apktool 打包失败问题的解决

首先直接说原因: 因为linux 下的PATH变量错误导致的

需求:让运营打包时修改应用名,比如wifi管家改为天天wifi管家

做法: 修改res/values/strings.xml的app_name字段。

问题过程  :很愉快的用shell替换了

sed  "s/<string name=\"app_name\">.*<\/string>/<string name=\"app_name\">${new_app_name}<\/string>/" $DECODE_PATH/res/values/strings.xml > /data/package/strings.xml

但是apktool 编译回来的时候就报错了

 Caused by: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [aapt, p, --min-sdk-version, 7, --target-sdk-version, 16, -F, /tmp/APKTOOL4305046551350833283.tmp, -0, arsc, -I, /usr/local/app/apktool/framework/1.apk, -S, /data/package/public_tools/apktool/tencentwifimanager_1.1.0.20001_android_20160217202532-reunion-release_wifi_999002/res, -M, /data/package/public_tools/apktool/tencentwifimanager_1.1.0.20001_android_20160217202532-reunion-release_wifi_999002/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, 7, --target-sdk-version, 16, -F, /tmp/APKTOOL4305046551350833283.tmp, -0, arsc, -I, /usr/local/app/apktool/framework/1.apk, -S, /data/package/public_tools/apktool/tencentwifimanager_1.1.0.20001_android_20160217202532-reunion-release_wifi_999002/res, -M, /data/package/public_tools/apktool/tencentwifimanager_1.1.0.20001_android_20160217202532-reunion-release_wifi_999002/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": java.io.IOException: error=2, No such file or directory
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
        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: java.io.IOException: error=2, No such file or directory
        at java.lang.UNIXProcess.<init>(UNIXProcess.java:148)
        at java.lang.ProcessImpl.start(ProcessImpl.java:65)
        at java.lang 


不应该啊  我只是apktool  d的时候 把-r资源文件去掉了,改了下资源文件而已啊。

尝试解决

1 不改资源文件 打包还是报错

2 加回-r 一切正常。

问题的焦点其中在了-r上面了。但这个是必须要的,不然得不到要修改的文件。

3 根据报错google一下  得到的解决方法一个是

  # yum install -y compat-libstdc++-296.i686 
# yum install -y compat-libstdc++-33.i686 

让运维执行了 没有解决

4 网上看到另外解决方案 从Android Studio复制aapt 替换apktool 的。感觉麻烦没做

5 使用另外一个版本的apktool,还是没有解决。

不过方法4和5给了我灵感。   aapt的对不对其实是由什么决定的呢。有path变量啊。果断看一下path变量,居然aapt的路径和apktool路径的版本是对不上的。坑啊。

解决:改下path变量就解决了

猜你喜欢

转载自huangyunbin.iteye.com/blog/2279144