Android Package を署名して Android Market へ
Android Market にアプリケーションを登録するためには、ビルドした apk ファイルに署名をしないといけないので、ちょっとやってみた。
Android Market に開発者として登録するところは、結構前にやったので覚えていないし、簡単だったと思うので特に書かない。
リリースビルド
ant release
でリリースビルドをする。
すると、 bin 以下に ProjectName-unsigned.apk というファイルができる。
ここでは、これに署名する。
Key Store 作成
まずは、暗号鍵のペアを作る。
${keystorefile} にはキーペアを保存するファイルのパスを、 ${keyalias} には作成するキーペアの名前を入力。
validity はとりあえず 10000 日としておくのがいいみたい。
で、色々聞かれるので答える。
$ keytool -genkey -v -keyalg RSA -keystore ${keystorefile} -alias ${keyalias} -validity 10000 キーストアのパスワードを入力してください: 新規パスワードを再入力してください: 姓名を入力してください。 [Unknown]: your name 組織単位名を入力してください。 [Unknown]: person 組織名を入力してください。 [Unknown]: person 都市名または地域名を入力してください。 [Unknown]: chiyoda-ward 州名または地方名を入力してください。 [Unknown]: tokyo この単位に該当する 2 文字の国番号を入力してください。 [Unknown]: jp CN=shoma, OU=person, O=person, L=yokohama, ST=kanagawa, C=jp でよろしいですか? [no]: y 10,000 日間有効な 1,024 ビットの RSA の鍵ペアと自己署名型証明書 (SHA1withRSA) を生成しています ディレクトリ名: CN=shoma, OU=person, O=person, L=yokohama, ST=kanagawa, C=jp <keystore> の鍵パスワードを入力してください。 (キーストアのパスワードと同じ場合は RETURN を押してください): [test.keystore を格納中]
jar に署名
で、対象の apk に署名する。
$ jarsigner -keystore ${keystorefile} -verbose bin/ProjectName-unsigned.apk ${keyalias} キーストアのパスワードを入力してください: 更新中: META-INF/RELEASEK.SF 更新中: META-INF/RELEASEK.RSA 署名中: res/layout/main.xml 署名中: AndroidManifest.xml 署名中: resources.arsc 署名中: res/drawable-hdpi/icon.png 署名中: res/drawable-ldpi/icon.png 署名中: res/drawable-mdpi/icon.png 署名中: classes.dex 署名中: path/to/package/ProjectName/ProjectName.scala
署名を検証
署名を検証してみる。
全部 sm と出たら成功なのかな。
$ jarsigner -certs -verbose -verify bin/ProjectName-unsigned.apk 768 Thu Oct 07 00:22:16 JST 2010 META-INF/MANIFEST.MF 889 Mon Oct 11 23:08:32 JST 2010 META-INF/RELEASEK.SF 937 Mon Oct 11 23:08:32 JST 2010 META-INF/RELEASEK.RSA sm 564 Thu Oct 07 00:19:58 JST 2010 res/layout/main.xml X.509, CN=your name, OU=person, O=person, L=chiyoda-ward, ST=Tokyo, C=jp [証明書は 10/10/06 23:58 から 38/02/21 23:58 まで有効です] sm 1984 Thu Oct 07 00:19:58 JST 2010 AndroidManifest.xml X.509, CN=your name, OU=person, O=person, L=chiyoda-ward, ST=Tokyo, C=jp [証明書は 10/10/06 23:58 から 38/02/21 23:58 まで有効です] sm 1272 Thu Oct 07 00:20:00 JST 2010 resources.arsc X.509, CN=your name, OU=person, O=person, L=chiyoda-ward, ST=Tokyo, C=jp [証明書は 10/10/06 23:58 から 38/02/21 23:58 まで有効です] sm 3966 Thu Oct 07 00:20:00 JST 2010 res/drawable-hdpi/icon.png X.509, CN=your name, OU=person, O=person, L=chiyoda-ward, ST=Tokyo, C=jp [証明書は 10/10/06 23:58 から 38/02/21 23:58 まで有効です] sm 1537 Thu Oct 07 00:20:00 JST 2010 res/drawable-ldpi/icon.png X.509, CN=your name, OU=person, O=person, L=chiyoda-ward, ST=Tokyo, C=jp [証明書は 10/10/06 23:58 から 38/02/21 23:58 まで有効です] sm 2200 Thu Oct 07 00:20:00 JST 2010 res/drawable-mdpi/icon.png X.509, CN=your name, OU=person, O=person, L=chiyoda-ward, ST=Tokyo, C=jp [証明書は 10/10/06 23:58 から 38/02/21 23:58 まで有効です] sm 335364 Thu Oct 07 00:19:58 JST 2010 classes.dex X.509, CN=your name, OU=person, O=person, L=chiyoda-ward, ST=Tokyo, C=jp [証明書は 10/10/06 23:58 から 38/02/21 23:58 まで有効です] sm 8535 Sat Sep 04 17:03:16 JST 2010 path/to/package/ProjectName/ProjectName.scala X.509, CN=your name, OU=person, O=person, L=chiyoda-ward, ST=Tokyo, C=jp [証明書は 10/10/06 23:58 から 38/02/21 23:58 まで有効です] s = 署名が検証されました。 m = エントリがマニフェスト内にリストされます。 k = 1 つ以上の証明書がキーストアで検出されました。 i = 1 つ以上の証明書がアイデンティティスコープで検出されました。 jar が検証されました。
signed apk を作成
最終的に signed.apk を作る。
Verification successful なら成功でしょう。
で、このファイルを Android Market に登録すると。
$ zipalign -v 4 bin/ProjectName-unsigned.apk bin/ProjectName-signed.apk Verifying alignment of bin/ProjectName-signed.apk (4)... 50 META-INF/MANIFEST.MF (OK - compressed) 533 META-INF/RELEASEK.SF (OK - compressed) 1102 META-INF/RELEASEK.RSA (OK - compressed) 1817 res/layout/main.xml (OK - compressed) 2369 AndroidManifest.xml (OK - compressed) 3136 resources.arsc (OK) 4464 res/drawable-hdpi/icon.png (OK) 8488 res/drawable-ldpi/icon.png (OK) 10084 res/drawable-mdpi/icon.png (OK) 12325 classes.dex (OK - compressed) 132398 path/to/package/ProjectName/ProjectName.scala (OK - compressed) Verification succesful
できたもの
Live Wallpaper 作成 - プログラマのネタ帳 で作った壁紙を登録してみた。
Android からアクセスすると Market が立ち上がるみたい。
Digital Clock Wallpaper
見られない人はこんなサイトがあったので、こっちから
http://www.androidzoom.com/android_applications/tools/digital-clock-wallpaper_lpat.html
スクショの画像って 480x854 なのね。nexus one は 480x800 だから微妙にサイズが合わない…。