Header Ads

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のバイナリをいじった後などに再署名する方は、

参考にどうぞ。