Google Code Prettify

2011年11月6日

Ant を使って Android アプリを構築する

Eclipse を使って Android アプリのプロジェクトを作成すると build.xml が作られずに、 コマンドラインからの構築ができない。 ただ、ちょっと前の ADT の話なので定かでない。。。
Eclipse を使うと署名済みの apk パッケージまで作れるが、 GUIを使って一連の操作を毎回するのは面倒なので、 ant を使ったリリース方法を調べてみた。

build.xml の作成

ant 化対応は非常に簡単で、プロジェクトのトップディレクトリで次のコマンドを実行すれば良い。
% ${ANDROID_SDK}/tools/android update project --path .
この時点で「ant debug」を実行すると bin/${project名}-debug.apk にデバック用のアプリが作成できる。
ただ、SDK Tools r14 から若干ファイルの構成が変更されているので注意が必要である。
build.xml
ant用の構築ファイル
ant.properties (旧 build.properties)
ユーザが追加して使用するもの。普通はコッチに書く。
local.properties
構築マシン固有の情報。現在は SDKへのパスのみ? VCSへの登録は避けるべきファイル
project.properties (旧 default.properties)
ADTによって維持される情報。

パスワードの自動入力

プロパティ値として key.store/key.alias/key.store.password/key.alias.password を設定しておけば、あとは万事取り計らってくれるようである。ただ、パスワード情報を記載するので、VCSへの登録される可能性が高いant.properties への記述は避けるべきで、VCS には登録しない secure.properties を作成して、コイツを読み込むように build.xml を変更するべきかなぁ。。。
build.xml
...
    <property file="ant.properties" />
    <property file="secure.properties" /> <!-- ここ追加 --&gt
...
secure.properties
key.store=path-of-keystore
key.alias=alias
key.alias.password=password
key.store.password=password
これで、 「ant release」の実行で bin/${project名}-release.apk に署名済みのapkパッケージが作成される。

リリース apk パッケージのファイルのカスタマイズ

ここまで来ると、リリース apk パッケージのファイル名に自動的に構築日時とversionCodeを埋め込みたいのが、エンジニアの心情だと思う。
build.xml をよく読むと、一番最後の import 要素の上に、任意のターゲットを追加すると良さ気である。なので、 次の deploy ターゲットを追加してみた。
build.xml
...
    <target name="deploy" depends="release" description="deploy">
        <xpath input="AndroidManifest.xml"
               expression="/manifest/@android:versionCode"
               output="config.versionCode"
               default="release"
        />
        <tstamp>
            <format property="config.versionDate" pattern="yyyyMMdd" />
        </tstamp>
        <property name="out.deploy.file"
                  value="${out.absolute.dir}/${ant.project.name}-${config.versionDate}-${config.versionCode}.apk"
        />

        <copy file="${out.final.file}"
              tofile="${out.deploy.file}"
              overwrite="true"
        />
        <echo>Deploy Package: ${out.deploy.file}</echo>
    </target>
...
これで、 「ant deploy」の実行で bin/${project名}-YYYYYMMDD-V.apk に署名済みのapkパッケージが作成される。
ターゲット名はあまり良く無いかも。。。

まとめ

makeファイルでのスクリプト片をantのタスク等で作成しないといけないのでいまいち使い勝手がよくわからない。 が、スゲー便利なんだろうなぁ。。。ant

参照

0 件のコメント:

久しぶりの投稿

かなり期間が空いてしまったが、ブログを再開してみようと思う。 2013年3月が直前の投稿だったが、頻繁に更新していた時期が 2011年11月までなので、8年間ぶりとなる。 8年間なにをしていたのかと言えば、2回転職して未だにIT技術者の職を得ている。 その...