很多应用平台上传APK后都用aapt工具来解析Android 的资源内容, 并获得图标。 但是aapt有个bug, 不能正常解析资源内容。 我今天在百度,豌豆荚,360 等大平台上上传自己的应用时遇到这个问题, 摸索了半天才找到真正的解决方案。
首先进入Android SDK里的tools文件夹下, 然后在cmd执行以下命令:
aapt dump badging 您的apk路径.apk
执行完了会输出错误信息, 比如:
package: name='com.yourdomain.yourapp' versionCode='1' versionName='1'sdkVersion:'8'W/ResourceType(15821): Failure getting entry for 0x7f04001b (t=3 e=27) in package 0 (error -84)application-label-en:'Your App Name'application-icon-120:'res/drawable-ldpi/appicon.png'application-icon-160:'res/drawable-mdpi/appicon.png'application-icon-240:'res/drawable-hdpi/appicon.png'application-icon-320:'res/drawable-xhdpi/appicon.png'ERROR getting 'android:icon' attribute: attribute is not a string value
以上我们可以看到, 错误位置, 但是这里根本看不到具体在哪儿。t=3 e=27的 意思是, type为3, entity 为27的那个资源有问题,接下来我们执行另一个命令获取更详细的信息。
aapt dump resources 您的apk路径.apk
type 3 configCount=2 entryCount=28 spec resource 0x7f040000 com.yourdomain.yourapp:string/Quiz_Type: flags=0x00000000 spec resource 0x7f040001 com.yourdomain.yourapp:string/QUIZ_TYPES: flags=0x00000000 ... Lines cut out for brevity ... spec resource 0x7f04001a com.yourdomain.yourapp:string/info: flags=0x00000000 spec resource 0x7f04001b com.yourdomain.yourapp:string/app_name: flags=0x00000000 config (default): resource 0x7f040000 com.yourdomain.yourapp:string/Quiz_Type: t=0x03 d=0x0000001c (s=0x0008 r=0x00) resource 0x7f040001 com.yourdomain.yourapp:string/QUIZ_TYPES: t=0x03 d=0x0000001d (s=0x0008 r=0x00) ... Lines cut out for brevity ... resource 0x7f04001a com.yourdomain.yourapp:string/info: t=0x03 d=0x0000001a (s=0x0008 r=0x00) config en: resource 0x7f04001b com.yourdomain.yourapp:string/app_name: t=0x03 d=0x00000030 (s=0x0008 r=0x00)
这样我们就可以寻找type为3, entity 为27的那个资源, 如果资源过多, cmd窗体看不全, 就用这个命令吧:
aapt dump resources 您的apk路径.apk > D:\elbiz.text
这样就可以把全部信息保存到D盘根目录下的elbiz.text文件里。
找到有问题的那个资源后, 该删除的就删除, 该修改的就修改。 good luck!