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
ディレクトリの下に展開した。
tools
と
platform-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.properties
と
build.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.i686
は
glibc.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
に署名が施される。