apktoolでハマった —
普段はソースとapkとをセットで納品することが多いわけですが、apkだけ納品した時に限って「マニフェストにXXXXをちゃんと設定しているよね?」とかって、問い合わせが来たりするものです(^^;;
ソースとapkのバージョンがきっちり管理できていれば問題なく返答にできますが、たまに冷や汗たらりの時もあります(^^;;
そういう時に、apk内のマニフェストを覗くのに便利なapktoolというツールがあります。
今回、apktoolでハマったので、メモです。
Android Studio 1.0.1でビルドしたapkを、apktool v1.5.2で見ようとしたら、下記のような例外が出てハマりました。
$ apktool d test.apk I: Baksmaling... I: Loading resource table... Exception in thread "main" brut.androlib.AndrolibException: Could not decode arsc file at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:56) at brut.androlib.res.AndrolibResources.getResPackagesFromApk(AndrolibResources.java:491) at brut.androlib.res.AndrolibResources.loadMainPkg(AndrolibResources.java:74) at brut.androlib.res.AndrolibResources.getResTable(AndrolibResources.java:66) at brut.androlib.Androlib.getResTable(Androlib.java:50) at brut.androlib.ApkDecoder.getResTable(ApkDecoder.java:189) at brut.androlib.ApkDecoder.decode(ApkDecoder.java:114) at brut.apktool.Main.cmdDecode(Main.java:146) at brut.apktool.Main.main(Main.java:77) Caused by: java.io.IOException: Expected: 0x001c0001, got: 0x00000000 at brut.util.ExtDataInput.skipCheckInt(ExtDataInput.java:48) at brut.androlib.res.decoder.StringBlock.read(StringBlock.java:44) at brut.androlib.res.decoder.ARSCDecoder.readPackage(ARSCDecoder.java:102) at brut.androlib.res.decoder.ARSCDecoder.readTable(ARSCDecoder.java:83) at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:49) ... 8 more
うーん。わからんよ(T-T)
android-apktoolのサイトを確認したら、最近のapktoolのv2.0.0RC3があったので、こっちを使ってみました。
$ java -jar apktool_2.0.0rc3.jar d test.apk
おぉ!! いけた!!
最初はJRE 1.6でやって失敗していましたが、JREを1.8にupdateしたらなんとか行けました。
っていうか、サイトのRequirementsにJRE 1.7って書いているのをあとで知りました…orz
ちゃんと読めって話ですよね(^^;;
まぁでも、これで解決。
これで何とか気持ちよく年を越せそうです。
Categorised as: ツール
コメントを残す