今天在修改cm9电池图标的时候,碰到一个问题,在用apktool对apk回编译的时候,出现类似以下错误(错误代码借用的网上的)。
- C:\Users\Connor\Desktop\New folder>apktool b Browser -d
- I: Checking whether sources has changed...
- I: Checking whether resources has changed...
- I: Building resources...
- invalid resource directory name: C:\Users\Connor\Desktop\New folder\Browser\res/drawable-sw600dp-hdpi
- invalid resource directory name: C:\Users\Connor\Desktop\New folder\Browser\res/drawable-sw600dp-nodpi
- invalid resource directory name: C:\Users\Connor\Desktop\New folder\Browser\res/layout-sw600dp
- invalid resource directory name: C:\Users\Connor\Desktop\New folder\Browser\res/menu-sw600dp
- invalid resource directory name: C:\Users\Connor\Desktop\New folder\Browser\res/mipmap-hdpi
- invalid resource directory name: C:\Users\Connor\Desktop\New folder\Browser\res/mipmap-mdpi
- invalid resource directory name: C:\Users\Connor\Desktop\New folder\Browser\res/mipmap-xhdpi
- invalid resource directory name: C:\Users\Connor\Desktop\New folder\Browser\res/values-sw600dp
- invalid resource directory name: C:\Users\Connor\Desktop\New folder\Browser\res/values-sw600dp-port
- invalid resource directory name: C:\Users\Connor\Desktop\New folder\Browser\res/values-w720dp
- invalid resource directory name: C:\Users\Connor\Desktop\New folder\Browser\res/xml-sw600dp
- Exception in thread "main" brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [aapt, p, -F, C:\Users\Connor\AppData\Local\Temp\APKTOOL6693420034194559908.tmp, -I, C:\U
- sers\Connor\apktool\framework\1.apk, -I, C:\Users\Connor\apktool\framework\3.apk, -S, C:\Users\Connor\Desktop\New folder\Browser\res, -M, C:\Users\Connor\Desktop\New folder\Browser\AndroidManifest.xml
- ]
- at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:193)
- at brut.androlib.Androlib.buildResourcesFull(Androlib.java:301)
- at brut.androlib.Androlib.buildResources(Androlib.java:248)
- at brut.androlib.Androlib.build(Androlib.java:171)
- at brut.androlib.Androlib.build(Androlib.java:154)
- at brut.apktool.Main.cmdBuild(Main.java:182)
- at brut.apktool.Main.main(Main.java:67)
- Caused by: brut.common.BrutException: could not exec command: [aapt, p, -F, C:\Users\Connor\AppData\Local\Temp\APKTOOL6693420034194559908.tmp, -I, C:\Users\Connor\apktool\framework\1.apk, -I, C:\Users
- \Connor\apktool\framework\3.apk, -S, C:\Users\Connor\Desktop\New folder\Browser\res, -M, C:\Users\Connor\Desktop\New folder\Browser\AndroidManifest.xml]
- at brut.util.OS.exec(OS.java:83)
- at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:191)
- ... 6 more
从错误中来看,好像是针对平板的sw600dp-hdpi文件夹无效。以为是修改文件导致,但后来发现,即便是反编译后不做任何修改,直接回编译,同样会出现这种错误。
多方度娘之后,得到的方法均无效,比如:有说framework-res.apk需要的别人未修改的,经测试,无效。有说apktool版本太低,我下的最新版,同样无效。有说baksmali版本不对,更有甚者说现在apktool还不支持android 4.0…………等等……
头大了半天之后,继续寻找解决办法,皇天不负有心人,终于在一篇E文中找到了相关的情况,原因是aapt版本太低。(文中还提到,替换成新的aapt之后要对apk重新反编译后再回编辑,直接回编辑之前的可能会有问题。)
多方寻找aapt未果之后,只好下载安装android SDK,从中提取出aatp替换掉 apktool文件夹中自带的aapt,之后重新编译……成功。
SDK中的aapt只有800K,而apktool自带的则有5M之多,刚看到的时候感到很疑惑,但确实管用,也就不管那么了…………
简单说一下配置环境,java jdk 7.1 、apktool 1.4.3
最后把新的aapt发上了,方便遇到同样问题的童鞋。