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

ビルドにJDK7を使うとAndroidアプリのrelease版がインストールできない問題に遭遇した。しかもdebug版はちゃんと動く。そして原因判明するまでの調査過程をメモっておく。 解決編→ http://www.kaoriya.net/blog/2012/05/10
10
MURAOKA Taro @kaoriya

なんか今日はもう頭使う仕事したくない。

2011-11-01 22:00:25
MURAOKA Taro @kaoriya

って、Androidアプリが動かない件は調査しないとダメやんけ。

2011-11-01 22:00:41
MURAOKA Taro @kaoriya

ぐぬぬぬ。JDK7でAndroidプロジェクトのrelease版をant releaseで作ると、installできないアプリが作られる。それ以外は全部動くのに。

2011-11-01 22:58:41
MURAOKA Taro @kaoriya

JDK7にAndroid SDKが動かない落とし穴があるとは…ちょっと想像できなかった。しかもリリース版だけで、その他の部分はちゃんと動くんだもの。

2011-11-01 23:11:48
MURAOKA Taro @kaoriya

…もしやjarsignerのdigestアルゴリズムのデフォルト設定が変わったか?

2011-11-01 23:19:28
MURAOKA Taro @kaoriya

JDK7でもant debug時はSHA1でdigestされてる。かといって手動でjarsignerに-digestalg指定しても、動くAPKにはならなかった。jarsignerの使い方を間違ってる可能性は否定できないが。

2011-11-01 23:33:36
MURAOKA Taro @kaoriya

debug版が動いていることから、build.xmlを追ってdebug/releaseで署名がどう違っているかを検証すればわかりそうだな。

2011-11-01 23:34:56
MURAOKA Taro @kaoriya

じぇんじぇん経路が違った。debugはSDKのSignedJarBuilderなのに 、releaseはantのsignjarタスクだった。この2つがJDK6では同じ動作、JDK7では違う動作になるだろうね。

2011-11-01 23:45:22
MURAOKA Taro @kaoriya

できた~。JDK7でもAndroidのapkにもちゃんとサインできたよー。-sigalg SHA1withRSA -digestalg SHA1この2つのオプションが必要だった。これは完全にブログネタだな。

2011-11-01 23:57:53
MURAOKA Taro @kaoriya

あばばば…JDK6からJDK7にかけてsigalgとdigestalgのデフォルト値が変わっちゃってるw http://t.co/RKgNDaQI http://t.co/6s3Ob57S

2011-11-01 23:59:24
MURAOKA Taro @kaoriya

謎は全て解けた m9(`・ω・´)シャキーン そしてantのsignjarにはsigalgとdigestalgを指定する口がない \(´・ω・`)/オワタ

2011-11-02 00:05:39
MURAOKA Taro @kaoriya

一応antのsignjarタスクの説明にリンク貼っておこう。 http://t.co/2no3tXSu

2011-11-02 00:18:34

コメント

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