apktoolはapkファイルをデコンパイル&再コンパイルしてくれるソフトです。

brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1)がしつこく出現したので解決方法の手記

以下エラーコマンド

W: invalid resource directory name: C:\Users\aaa\apktool\2\res navigation brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): [C:\Users\aaa\AppData\Local\Temp\brut_util_Jar_5061293244804902265.tmp, p, –forced-package-id, 127, –min-sdk-version, 21, –target-sdk-version, 29, –version-code, 101720332, –version-name, 10.17.2, –no-version-vectors, -F, C:\Users\aaa\AppData\Local\Temp\APKTOOL7088188973485098800.tmp, -e, C:\Users\aaa\AppData\Local\Temp\APKTOOL2151794333813061023.tmp, -0, arsc, -I, C:\Users\aaa\AppData\Local\apktool\framework\1.apk, -S, C:\Users\aaa\apktool\2\res, -M, C:\Users\aaa\apktool\2\AndroidManifest.xml]

手段1

apktoolのフォルダー内で以下を実行する。

apktool empty-framework-dir --force

apktoolのバージョンを変えたときに起こるっぽい

手段2

私の環境では変化なしだったが一応記す

端末の/system/framework/からframework-res.apkを採取しapktoolに関連付ける。hogeに任意の名称を与える。また端末によってはhoge-framework-res.apkの様なapkも存在することがあるのでそれも。

apktool if framework-res.apk -t hoge

デコード実行時にタグを与えるすることで関連付けたframeworkを利用できる。

apktool d -t hoge [デコンパイルするapkファイル名]

手段3

再コンパイル時にappt2を指定する。

apktool b --use-aapt2 [コンパイルするフォルダ名]

手順4

デコード時に以下のオプションを指定する。以下オプションは時間短縮にもつながるが、resとsmaliの両方を弄りたい場合には使えない

リソースの改変をしない場合

resファイルを編集せず、smaliファイルのみ編集する場合、以下のコマンドが使える。

apktool d -r [デコンパイルするapkファイル名]

また、AndroidManifest.xmlの改変もできなくなるが、--force-manifestオプションを追加すれば同様に読み込めるようになる。

smaliの改変をしない場合

smaliファイルを編集せず、resファイルのみ編集する場合、以下のコマンドが使える

apktool d -s [デコンパイルするapkファイル名]