aapt生成R.java报错:First type is not attr!

环境

系统:mac
安卓SDK版本:30.0.0
apktool版本:2.4.1  

问题

使用sdk目录里的aapt编译生成R.java报错:First type is not attr!

/Users/liang/Library/Android/sdk/build-tools/30.0.0/aapt p -f -m -J ./gen -S res/ -I /Users/liang/Library/Android/sdk/platforms/android-30/android.jar -M AndroidManifest.xml
First type is not attr!  
aapt F 07-18 22:28:55  1467 247240 First type is not attr!  
Abort trap: 6  

原因

出现这个问题的原因是重打包的apkresource.arsc里面第一个不是attr,在googleaapt工具里面对resource.arsc里面第一个类型必须得是attr有强校验,否则就会报First type is not attr!的错误。aapt1源码里面对位置为0type做了强校验,如果不为attr则编译报错

ApkTool里面使用了aapt1去对一个已经使用了aapt2打包的apk重打包导致此问题

我的解决办法

解压apktool2.4.1,获取到对应的aapt文件

使用截图里的aapt来生成R.java文件即可

aapt_64 p -f -m -J ./gen -S res/ -I /Users/liang/Library/Android/sdk/platforms/android-30/android.jar -M AndroidManifest.xml  

其他方法参考:https://baijiahao.baidu.com/s?id=1612770712213635730&wfr=spider&for=pc