Androidのデバッグ用apkの署名方法と確認方法
- Tue
- 00:03
- Android
Androidでデバッグ用にbuildしたapkに署名をつけるのが何気に面倒だったので忘れないようにメモ。
このkeystoreのパラメータは下記の通り。
当然ながら、このkeystoreで署名したものはGoogle Play上にリリースできない(ハズ)。
「Android Tools」-「Export Unsigned Application Package...」
を指定。もしかしたら、Signed Package作成で、上記keystoreを指定すれば、BuildConfig.DEBUG =true で作成されるのかもしれない。
Signed Packageでも、自動ビルドを外した状態で一旦綺麗にcleanしないとデバッグモードのapkができたことがあったので、eclipse上でclean&build後apk作成でいけるかも。
jarsignerは、Javaと共にinstallされる(Androidのsdkではない)。場所は下記のようなjdk配下のbinの中。
実行例:
問題なければ、指定したapkに署名がされる。
実行例:
1. keystore
デバッグ用keystoreは、android sdkを入れると$HOME\.android\debug.keystore
に、defaultのものが作成される。公式ドキュメントは:Signing in Debug Modeこのkeystoreのパラメータは下記の通り。
key | value |
Keystore name | debug.keystore |
Keystore password | android |
Key alias | androiddebugkey |
Key password | android |
CN | CN=Android Debug,O=Android,C=US |
当然ながら、このkeystoreで署名したものはGoogle Play上にリリースできない(ハズ)。
2. apkの作成
eclipse上での作業。「Package Explorer」を右クリックして、「Android Tools」-「Export Unsigned Application Package...」
を指定。もしかしたら、Signed Package作成で、上記keystoreを指定すれば、BuildConfig.DEBUG =true で作成されるのかもしれない。
Signed Packageでも、自動ビルドを外した状態で一旦綺麗にcleanしないとデバッグモードのapkができたことがあったので、eclipse上でclean&build後apk作成でいけるかも。
3. 署名
署名するには、jarsignerコマンドを実行。jarsignerは、Javaと共にinstallされる(Androidのsdkではない)。場所は下記のようなjdk配下のbinの中。
C:\Program Files\Java\jdk1.6.0_38\bin\jarsigner.exe
実行例:
C:\Users\user01\Documents\android-test>jarsigner -verbose -keystore ..\.android\debug.keystore -storepass android -keypass android test.apk androiddebugkey 追加中: META-INF/MANIFEST.MF 追加中: META-INF/ANDROIDD.SF 追加中: META-INF/ANDROIDD.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.dexkeystoreとapkの場所さえ間違わなければ、defaultのものを使う限りパラメータはいつも一緒なのでコピペでいける。
問題なければ、指定したapkに署名がされる。
4. 署名の確認
署名の確認も、同じく、jarsignerコマンドにて可能。実行例:
C:\Users\user01\Documents\android-test>jarsigner -verify -verbose -certs test.apk 691 Mon Feb 11 23:48:44 JST 2013 META-INF/MANIFEST.MF 812 Mon Feb 11 23:48:44 JST 2013 META-INF/ANDROIDD.SF 776 Mon Feb 11 23:48:44 JST 2013 META-INF/ANDROIDD.RSA sm 1556 Mon Feb 11 23:39:34 JST 2013 res/layout/main.xml X.509, CN=Android Debug, O=Android, C=US [証明書は 12/12/30 0:56 から 42/12/23 0:56 まで有効です] sm 1684 Mon Feb 11 23:39:34 JST 2013 AndroidManifest.xml X.509, CN=Android Debug, O=Android, C=US [証明書は 12/12/30 0:56 から 42/12/23 0:56 まで有効です] ・・・ s = 署名が検証されました。 m = エントリがマニフェスト内にリストされます。 k = 1 つ以上の証明書がキーストアで検出されました。 i = 1 つ以上の証明書がアイデンティティスコープで検出されました。 jar が検証されました。例の通り、どの署名がされてるかは、CNを見るとわかる。