JDK7におけるAndroidアプリの署名
JDK7(Java7)でjarsignerを利用しapkに署名をする場合、2010~12あたりのブログに書かれているコマンド(JDK6の手法)では署名が出来ず、
[INSTALL_PARSE_FAILED_NO_CERTIFICATES]
というエラーが返ってくる。一応対処できたのでメモ。
・環境
Mac OSX 10.7.5 java version "1.7.0_51" Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
・コマンド
$ keytool -genkey -sigalg SHA1withDSA -keyalg DSA -keysize 1024 -keystore ${HOME}/.android/[yourname].keystore -validity 10000 -alias [youralias]
証明書の作成。
JDK6のときと異なるのは -sigalg SHA1withDSA -keyalg DSA のあたり。JDK7ではデフォルトの暗号ハッシュがSHA-1固定じゃなくなったためオプションで明示してあげる必要がある。
androidのドキュメントでは SHA1withRSA を使いなさいとなっているがJavaのドキュメントではサポートしてると書いてないのでJavaにあわせる。
jarsigner -sigalg SHA1withDSA -digestalg SHA1 -keystore ${HOME}/.android/[yourname].keystore -verbose Hogehoge.apk [youralias]
上で作成した証明書を使って署名する。証明書の作成に使用したのと同じ形式を指定してあげる。
$ jarsigner -verify Hogehoge.apk
署名の確認。
日本語環境なら「jarは検証されました。」と表示されればおっけー。
・参考
http://www.adamrocker.com/blog/232/signing_for_publish_android_application.html
Sign your app | Android Developers
jarsigner