2013年06月10日

コマンドラインでのANDROIDアプリのコンパイルと署名

ANDROID アプリは Eclipse を使わずにコマンドラインでコンパイルと署名ができる。
できるのならやってみよう、というわけ。

試した環境は:
CentOS release 6.4
Android SDK Tools r22.0.1

以下、あらかじめ Eclipse で作成したプロジェクトがあることが前提。
プロジェクト名は HelloWorld とする。

1. 作業環境の整備

1.1 Android SDK Tools
まずは、Android Developers のサイトから SDK Tools をダウンロードしてインストールする。
Android Developers
http://developer.android.com/index.html
Develop > Tools > Download のページで、[DOWNLOAD FOR OTHER PLATFORMS] のところにある "SDK Tools Only" から、"Linux 32 & 64-bit" のファイルをダウンロード。
今回は "android-sdk_r22.0.1-linux.tgz" だった。

これを適当なところに展開する。
ここでは /opt ディレクトリの下に展開した。
toolsplatform-tools にパスを通しておいたほうが便利かもしれない。
$ export PATH=$PATH:/opt/android-sdk-linux/tools $ export PATH=$PATH:/opt/android-sdk-linux/platform-tools

設置したら、SDK を更新しておく。
# /opt/android-sdk-linux/tools/android update sdk --no-ui
1.2 Ant
使用した Android SDK Tools の r22.0.1 は、Ant 1.8.0 以上が必要なので、本家サイトからダウンロードしてくる。
Apache Ant
http://ant.apache.org/
Apache Antのサイトの "Binary Distributions" からダウンロードし、適当なディレクトリーに展開する。
ここでは /opt/apache-ant に解凍した。
そして、ANT_HOME に Ant のパスを設定し、ついでにパスも通しておく。
$ export ANT_HOME=/opt/apache-ant $ export PATH=$PATH:$ANT_HOME/bin

2. Android アプリのコンパイル

まずは、Eclipse で作成した Android アプリのパスに移動し、プロジェクトを update する。
$ android update project --target android-16 --path .
ターゲットは project.properties に書かれているものに合わせるといいかも。
local.propertiesbuild.xml の2ファイルが作られ、コンパイルできるようになる。
サブプロジェクトに関するコメントが表示されるがとりあえず無視。

コンパイルしてみる。
$ ant release
そうしたら以下のようなエラーが。。。:
BUILD FAILED /opt/android-sdk-linux/tools/ant/build.xml:650: The following error occurred while executing this line: /opt/android-sdk-linux/tools/ant/build.xml:691: Execute failed: java.io.IOEx ception: Cannot run program "/opt/android-sdk-linux/build-tools/17.0.0/aapt": error=2, そのようなファイルやディレクトリはありません ...
試しに /opt/android-sdk-linux/build-tools/17.0.0/aapt を実行してみると、/lib/ld-linux.so.2 が存在しない、というエラー。
linux.so.2 ファイルは、調べてみると glibc.i686 というパッケージに含まれるらしい。
$ yum provides ld-linux.so.2 Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile * base: www.ftp.ne.jp * epel: ftp.iij.ad.jp * extras: www.ftp.ne.jp * updates: www.ftp.ne.jp glibc-2.12-1.107.el6.i686 : The GNU libc libraries Repo : base Matched from: Other : ld-linux.so.2
へぇ、glibc.i686glibc.x86_64 とは別なのか。。。
glibc.i686 をインストールして /opt/android-sdk-linux/build-tools/17.0.0/aapt を実行すると、今度はまた別のライブラリーが存在しないというエラーが。
ひとつひとつつぶしていくと、結局3つのパッケージの追加インストールが必要だった:
# yum install glibc.i686 # yum install zlib.i686 # yum install libstdc++.i686
コンパイルが成功すると bin ディレクトリの中に .apk ファイルが作られる。

3. 署名

3.1 鍵ペアーの生成
Android アプリに署名するための鍵ペアーは、keytool コマンドで生成できる。
keytool は JDK に含まれている。
$ keytool -genkey -v -keystore tan9.keystore -alias HelloWorld \ -dname "CN=Hello World, O=Tan9, L=Shinjuku, ST=Tokyo, C=JP" -keyalg RSA \ -keysize 2048 -validity 10000 -keypass 123456 -storepass 123456 $ keytool -list -keystore tan9.keystore
キーストアーファイルのファイル名 (上記 tan9.keystore)、パスワード (123456 2カ所)、識別名 (CN=Hello World, O=Tan9, L=Shinjuku, ST=Tokyo, C=JP) 等は適当に。
3.2 アプリへのデジタル署名
jarsigner コマンドを使ってアプリにデジタル署名する。
$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 \ -keystore tan9.keystore -storepass 123456 -keypass 123456 \ bin/HelloWorld-release-unsigned.apk HelloWorld 追加中: META-INF/MANIFEST.MF 追加中: META-INF/HELOWORL.SF 追加中: META-INF/HELOWORL.RSA 署名中: res/layout/main.xml 署名中: AndroidManifest.xml 署名中: resources.arsc 署名中: res/drawable-hdpi/ic_launcher.png 署名中: res/drawable-ldpi/ic_launcher.png 署名中: res/drawable-mdpi/ic_launcher.png 署名中: res/drawable-xhdpi/ic_launcher.png 署名中: classes.dex
これで bin/HelloWorld-release-unsigned.apk に署名が施される。
タグ:android Ant
posted by K/I at 00:52 | 東京 ☀ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする