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ファイル名]