这几天在开始弄关于apk反编的事情,当然刚开始,问题不断,今天做一个apk反编是在回编没有做任何修改,居然回编出错,好在有网络。几寻搜索,终于找到一个符合自己心意的,担心以后查找不易,现转载如下,原文地址APKTool打包的一个小问题
在windows下,用APKTool进行打包时,有时会爆这个错误,甚至我们在反编译完没经过任何改动的时候,直接重打包也会遇到
I: Smaling... I: Building resources... Exception in thread "main" brut.androlib.AndrolibException: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [aapt, p, --min-sdk-version, 10, --target-sdk-version, 10, -F, C:\Users\ice\AppData\Local\Temp\APKTOOL5697750537225709497.tmp, -0, arsc, -I, C:\Users\ice\apktool\framework\1.apk, -S, F:\webattack\android\result\decompile\res, -M, F:\webattack\android\result\decompile\AndroidManifest.xml] at brut.androlib.Androlib.buildResourcesFull(Androlib.java:358) at brut.androlib.Androlib.buildResources(Androlib.java:283) at brut.androlib.Androlib.build(Androlib.java:206) at brut.androlib.Androlib.build(Androlib.java:176) at brut.apktool.Main.cmdBuild(Main.java:228) at brut.apktool.Main.main(Main.java:79) Caused by: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [aapt, p, --min-sdk-version, 10, --target-sdk-version, 10, -F, C:\Users\lenovo\AppData\Local\Temp\APKTOOL5697750537225709497.tmp, -0, arsc, -I, C:\Users\lenovo\apktool\framework\1.apk, -S, F:\webattack\android\result\decompile\res, -M, F:\webattack\android\result\decompile\AndroidManifest.xml] at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:357) at brut.androlib.Androlib.buildResourcesFull(Androlib.java:336) ... 5 more Caused by: brut.common.BrutException: could not exec command: [aapt, p, --min-sdk-version, 10, --target-sdk-version, 10, -F, C:\Users\lenovo\AppData\Local\Temp\APKTOOL5697750537225709497.tmp, -0, arsc, -I, C:\Users\lenovo\apktool\framework\1.apk, -S, F:\webattack\android\result\decompile\res, -M, F:\webattack\android\result\decompile\AndroidManifest.xml] at brut.util.OS.exec(OS.java:93) at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:355) ... 6 more Caused by: java.io.IOException: Cannot run program "aapt": CreateProcess error=2, ????????? at java.lang.ProcessBuilder.start(ProcessBuilder.java:459) at java.lang.Runtime.exec(Runtime.java:593) at java.lang.Runtime.exec(Runtime.java:466) at brut.util.OS.exec(OS.java:84) ... 7 more Caused by: java.io.IOException: CreateProcess error=2, ????????? at java.lang.ProcessImpl.create(Native Method) at java.lang.ProcessImpl.<init>(ProcessImpl.java:81) at java.lang.ProcessImpl.start(ProcessImpl.java:30) at java.lang.ProcessBuilder.start(ProcessBuilder.java:452) ... 10 more
顾名思义,就是aapt.exe创建失败了,为什么呢,大家可以看到在apktool.bat路径下,aapt.exe好好存在着。经过研究发现,主要是apktool.bat的调用里面大家可以发现是这样的
@echo off set PATH=%CD%;%PATH%; java -jar "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9
很明显,程序的查找路径只有当前目录和Path,如果你不在apktool的所在目录调用apktool.bat的话,那么对apktool.jar对aapt.exe的间接调用就会发生找不到的问题。
解决就很简单了,要么把命令行定位到apktool的目录,要么一劳永逸的把apktool的路径直接加到环境变量path中去。