JDK7でAndroidアプリを正しくビルドできない問題を調査した

ビルドにJDK7を使うとAndroidアプリのrelease版がインストールできない問題に遭遇した。しかもdebug版はちゃんと動く。そして原因判明するまでの調査過程をメモっておく。 解決編→ http://www.kaoriya.net/blog/2012/05/10
Android jarsigner ant
10
MURAOKA Taro @kaoriya
なんか今日はもう頭使う仕事したくない。
MURAOKA Taro @kaoriya
って、Androidアプリが動かない件は調査しないとダメやんけ。
MURAOKA Taro @kaoriya
ぐぬぬぬ。JDK7でAndroidプロジェクトのrelease版をant releaseで作ると、installできないアプリが作られる。それ以外は全部動くのに。
MURAOKA Taro @kaoriya
JDK7にAndroid SDKが動かない落とし穴があるとは…ちょっと想像できなかった。しかもリリース版だけで、その他の部分はちゃんと動くんだもの。
MURAOKA Taro @kaoriya
…もしやjarsignerのdigestアルゴリズムのデフォルト設定が変わったか?
MURAOKA Taro @kaoriya
JDK7でもant debug時はSHA1でdigestされてる。かといって手動でjarsignerに-digestalg指定しても、動くAPKにはならなかった。jarsignerの使い方を間違ってる可能性は否定できないが。
MURAOKA Taro @kaoriya
debug版が動いていることから、build.xmlを追ってdebug/releaseで署名がどう違っているかを検証すればわかりそうだな。
MURAOKA Taro @kaoriya
じぇんじぇん経路が違った。debugはSDKのSignedJarBuilderなのに 、releaseはantのsignjarタスクだった。この2つがJDK6では同じ動作、JDK7では違う動作になるだろうね。
MURAOKA Taro @kaoriya
できた~。JDK7でもAndroidのapkにもちゃんとサインできたよー。-sigalg SHA1withRSA -digestalg SHA1この2つのオプションが必要だった。これは完全にブログネタだな。
MURAOKA Taro @kaoriya
あばばば…JDK6からJDK7にかけてsigalgとdigestalgのデフォルト値が変わっちゃってるw http://t.co/RKgNDaQI http://t.co/6s3Ob57S
MURAOKA Taro @kaoriya
謎は全て解けた m9(`・ω・´)シャキーン そしてantのsignjarにはsigalgとdigestalgを指定する口がない \(´・ω・`)/オワタ
MURAOKA Taro @kaoriya
一応antのsignjarタスクの説明にリンク貼っておこう。 http://t.co/2no3tXSu

コメント

MURAOKA Taro @kaoriya 2012年5月9日
あ、今これ http://ant.apache.org/manual/Tasks/signjar.html みたら sigalg と digestalg 指定する口がある。増えた?
MURAOKA Taro @kaoriya 2012年5月9日
ant 1.8.3以降を使っていれば、Android SDKに https://gist.github.com/2640593 このパッチを当てることでJDK7でも動くリリースバイナリをビルドできそう。
ログインして広告を非表示にする
ログインして広告を非表示にする