android 生成apk失败,Android应用开发之apktool 打包失败问题的解决

本文介绍了在Linux环境下,由于PATH变量错误导致的Android应用apktool打包失败的问题。通过修改res/values/strings.xml的app_name字段来改变应用名,但在打包过程中遇到aapt命令找不到的错误。解决方法是检查并修正PATH变量,确保aapt路径正确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文将带你了解Android应用开发之apktool 打包失败问题的解决,希望本文对大家学Android有所帮助。

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

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

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

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

Java代码  sed  "s/.*/${new_app_name}/" $DECODE_PATH/res/values/strings.xml > /data/package/strings.xml  sed  "s/.*/${new_app_name}/"   $DECODE_PATH/res/values/strings.xml > /data/package/strings.xml

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

Java代码     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.(UNIXProcess.java:148)          at java.lang.ProcessImpl.start(ProcessImpl.java:65)          at java.lang      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.(UNIXProcess.java:148)

at   java.lang.ProcessImpl.start(ProcessImpl.java:65)

at java.lang

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

尝试解决

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

2 加回-r 一切正常。

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

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

Java代码    # yum install -y compat-libstdc++-296.i686   yum install -y compat-libstdc++-33.i686     # 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变量就解决了

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值