AntでAndroidをビルドしたことない人向けです。つまり俺。
AndroidSDKやらADTはver16です。
流れ
・とりあえずビルドする(デバッグビルド)
・リリースビルドで署名まで済ませる
・NDKでのビルドも含める
このあたり参照
・http://developer.android.com/guide/developing/building/building-cmdline.html
流石にAntやJDKはインストール済みでパスが通っていることは前提
とりあえずデバッグビルド
とりあえず既にあるeclipseのプロジェクトと共存することが前提なので、
対象プロジェクトはeclipseで作ります。
ここではHelloAntという名前で作った前提となっています。
そうするとこんなディレクトリ構成かと
HelloAnt ├── AndroidManifest.xml ├── assets ├── bin ├── gen ├── proguard.cfg ├── project.properties ├── res └── src
とりあえず上記HelloAntディレクトリに移動
で、以下コマンドを実行
android update project -p ./
すると以下の結果となる
Updated local.properties No project name specified, using Activity name 'HelloAntActivity'. If you wish to change it, edit the first line of build.xml. Added file ./build.xml Updated file ./proguard.cfg
build.xmlとlocal.propertiesという2つのファイルが増えているはず
HelloAnt ├── AndroidManifest.xml ├── assets ├── bin ├── build.xml ├── gen ├── libs ├── local.properties ├── proguard.cfg ├── project.properties ├── res └── src
これでAntプロジェクトとして作成されました。
おもむろに以下コマンドを叩きます
ant debug
binディレクトリに行くと「HelloAntActivity-debug.apk」として出来ているはず。
以上でデバッグビルドは終わり。
リリースビルドに署名まで済ませる
まずkeystoreを作成する(略)
次に「ant.properties」というファイルを作成し以下の内容を書く
key.store=hoge.keystore //(へのパス) key.store.password=hogehoge key.alias=hoge key.alias.password=hugahuga
key.storeの右辺にはkeystoreファイルのパスを記載すればOK
ここではhoge.keystoreという名前でHelloAntディレクトリ直下に居る前提なので
単に「hoge.keystore」と書かれています。
HelloAnt ├── AndroidManifest.xml ├── ant.properties ├── assets ├── build.xml ├── hoge.keystore ├── libs ├── local.properties ├── proguard.cfg ├── project.properties ├── res └── src
おもむろに以下コマンドを叩く
ant release
binディレクトリに行くと「HelloAntActivity-release.apk」として出来ているはず。
以上でリリースビルドは終わり。
一旦キレイにする
ant clean
binとかgenディレクトリが消えるよ!
proguardを使う
通常eclipseで使うのと一緒
project.propertiesに以下の一行を追加
proguard.config=proguard.cfg //(へのパス)
昔はantでproguardは大変だったらしい。
追加で記入したら「ant release」でprogurardがapkに使われます。
NDKでのビルドも含める
ndkにもパスが通っていることが前提です。
ついにbuild.xmlを開きます。
そして51行目付近を見ます
上記部分をこんな感じに書き換えます
これで実行!と言いたいのですが、そもそもNDKのソースが無いのでsampleの「hello-jni」から
jniディレクトリごとコピーしてきます。
HelloAnt ├── AndroidManifest.xml ├── ant.properties ├── assets ├── build.xml ├── hoge.keystore ├── jni │ ├── Android.mk │ └── hello-jni.c ├── libs ├── local.properties ├── proguard.cfg ├── project.properties ├── res └── srchello-jni.cの関数名修正を忘れずに。
あと呼び出し元も無いので適当に作ってください。
めんどければhello-jniごとコピーで、antプロジェクト作成でもOKです。
ant release/debug
と叩けば-pre-buildの項目がこんな感じで出力されます
-pre-build: [exec] Compile thumb : hello-jni <= hello-jni.c [exec] SharedLibrary : libhello-jni.so [exec] Install : libhello-jni.so => libs/armeabi/libhello-jni.so
NDKでのビルドも含める その2
NDKだけ常にリリースビルドじゃ芸がないのでさっき修正した場所を下記のようにして見ました。
rel! dev!
これでdebug指定時はNDK_DEBUG=1でビルドされます。
なお、ant releaseなのかdebugなのかは
android-sdk/tools/ant/build.xml
を見て、${build.target}に直接文字列入れていたのでそれで判定しましたが…
いいのかな…
あとはコンパイル失敗をsoファイルができたかどうかとかでチェックしてやればより良いかも?
そういやndk-buildをオプション無しで叩いてもリリースビルドでチョットびっくり。
r4ぐらいの時、デフォルトはデバッグビルドじゃなかったでしたっけ?
おまけ
ant clean ant release -v > tmp.txtで詳細をよく見てみたら…
-compile: Property "tested.project.absolute.dir" has not been set Property "tested.project.absolute.dir" has not been set [javac] jp/omokageru/dnk/helloant/HelloAntActivity.java added as jp/omokageru/dnk/helloant/HelloAntActivity.class doesn't exist. [javac] /Users/dnk/personal/android/HelloAnt/gen/R.java.d skipped - don't know how to handle it [javac] jp/omokageru/dnk/helloant/R.java added as jp/omokageru/dnk/helloant/R.class doesn't exist. [javac] Compiling 2 source files to /Users/dnk/personal/android/HelloAnt/bin/classes [javac] Using modern compiler [javac] Compilation arguments: [javac] '-d' [javac] '/Users/dnk/personal/android/HelloAnt/bin/classes' [javac] '-classpath' [javac] '/Users/dnk/personal/android/HelloAnt/bin/classes:/Users/dnk/personal/android/HelloAnt' [javac] '-sourcepath' [javac] '/Users/dnk/personal/android/HelloAnt/src:/Users/dnk/personal/android/HelloAnt/gen' [javac] '-target' [javac] '1.5' [javac] '-bootclasspath' [javac] '/Users/dnk/app/android-sdk/platforms/android-8/android.jar' [javac] '-encoding' [javac] 'UTF-8' [javac] '-g' [javac] '-source' [javac] '1.5'
ん?1.5?
確か今ってビルドの指定は1.6じゃなかったでしたっけ?
ということで
android-sdk/tools/ant/build.xmlで、1.5指定のところ2ヶ所を1.6に書き換えて動作させて見ましたが、
問題なく動いているきがしました。
ant testとかあるけど、そのへんはきっとtest部の方々が総掛かりでまとめてくれることを勝手に期待しております。
リリースが頻発するとか、NDKを含めたコンパイルが多いとかだとAntの方が楽?
普段のデバッグビルド状態だとEclipseが吐き出したもので困ることはありませんが、
準備しておけば楽っぽいですね。
あと、複数人で開発しててちゃんとビルドサーバっつーかCIサーバみたいなのが有るところだと必須なんでしょう。
そういうところだとどんなAndroid開発なのか凄く気になる…
0 件のコメント:
コメントを投稿