Androidアプリを作る際必要最小限なコマンド

Eclipseを使わずにアプリをつくる場合に。
マーケットへの公開を考慮して署名も埋め込む。
CentOS上での環境作成はこちら

署名キーの作成

$ keytool -genkey -v -keystore example.keystore \ 
-alias example -keyalg RSA -validity 10000

aliasとkeypassを変えて-genkeyを実行すれば、同一キーストアに対して複数のキーを登録することができるらしい。

プロジェクト作成

$ android create project -n HelloWorld \ 
 -t 1 -k com.example.helloworld \
 -p ~/workspace/HelloWorld -a HelloWorld

コーディング

Emacs や Vi とかで適当に。

コンパイル

まずは、署名なしでコンパイルする。

$ ant release

署名を入れる

$ jarsigner -verbose -keystore ~/example.keystore \
~/workspace/helloworld/bin/HelloWorld-unsigned.apk example

この状態で、すでに署名は入っているので確認する。

$ jarsigner -verify -verbose -certs \
~/workspace/helloworld/bin/HelloWorld-unsigned.apk

適正化

適正化すると同時にファイル名も変更する。

$ zipalign -v 4 ~/workspace/helloworld/bin/HelloWorld-unsigned.apk \
~/HelloWorld.apk
$ zipalign -c -v 4 ~/HelloWorld.apk

マーケットアップロード時の制限

以上で作ったapkをマーケットで公開するにはいくつか制限がある。

Market requires the minSdkVersion to be set to a positive 32-bit integer in AndroidManifest.xml.

SDKバージョンの最小をセットしなさい、と。

...
    </application>                                                              
   <uses-sdk android:minSdkVersion="7" />                                       
</manifest>   
The package name of your apk may not begin with any of the following values: [com.android, com.google, android, com.example]

パッケージ名の始まりが不可なのだと。
公開されている他のパッケージ名とぶつからないパッケージ名で作成する必要がある。

できあがり

BrowserLauncher20110911013951826469564.apk 直
BrowserLauncher20110911072449000000.apk 直
少しレスポンスヘッダをいじるとよい。

header("Content-Type: application/vnd.android.package-archive");
header("Content-disposition: attachment; filename=" . $filename);
header("Content-Length: $size");
readfile($filename);