Androidのapkの再署名時の未知のインストールエラー解決方法に関して
Androidのapkの署名を適用したのに、
インストールしようとすると、
「INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION」
エラーになってしまう問題にぶち当たりました。
私の場合の対策方法をメモしておきますので、
署名の不具合で同様のエラーに困った方は参考にどうぞ。
原因は、Androidのビルド環境作成時に、
おそらく、JDKが1.7になっているのではないでしょうか?
私は、署名されたapkのバイナリファイルを書き換えて
再署名を行おうとしていましたが、JDK1.7のjarsignerでは、
一見署名できたかのように見えますが、apkのサイズが
元のapkサイズと異なりうまくいきませんでした。
そこで、JDK1.6のjarsignerに変更したところ、
うまくいきました!!
ということで、
「JDK1.7のjarsignerでは、Androidの署名がうまくいかない。」
「JDK1.6のjarsignerを使用すれば、署名がうまくいく。」
ということがわかりました。
(署名時の注意点)
classes.dexを編集した後に、
再署名する際は、下記ポイントが重要になります。
※
apkはzip圧縮されているので、apkの拡張子をzipに変えることで、
ファイルを簡単に開けます。
1)classes.dexのチェックサムを下記コマンドで確認し、修正する。
dexdump.exe -d 編集したclasses.dex
を実行すると、チェックサムのエラーがABCDEFGH VS IJKLMNOPのように、出力されます。
バイナリファイルでは、エンディアンが逆転していることに注意して、
右から左へバイナリエディタで16進数を編集します。
編集位置は、00000000行の08 09 0A 0B列のあたりです。
編集が終わったら、WinRARなどで、zipを開いて直接上書きしてしまえば良いです。
2)再署名の準備
META-INFフォルダ内のファイル
~.MF
~.SF
~.RSA
を削除してから署名を実施しなければうまくいかなかったです。
Androidのapkのバイナリをいじった後などに再署名する方は、
参考にどうぞ。