最近在使用重打包工具对某些遇到的apk进行重打包时,遇到了一些错误,例如:
res\drawable\$avd_hide_password__0.xml: Invalid file name: must contain only [a-z0-9_.]
这是因为apktool 在解析apk包时发现了重复的资源文件,它将重复的文件增加了$的前缀和数字后缀
解决方案为移除文件名和文本里所有错误添加的$符号即可。
然后又遇到了 First type is not attr!
的错误
查了下资料得知这是因为使用aapt1导致的,这下就必须去研究aapt2了,然而虽然Google的文档看起来很详细,但是它并没有解释使用compile --dir
参数之后导出的是什么文件,且在后续的link
命令中又应该如何使用这个文件
我研究发现,他并不是一个flat文件,而是一个flat的压缩包,并且将这个文件以zip格式传递给后面的link
命令是可以成功识别的。
以下是完整用法
aapt2 compile --dir [资源文件夹路径] -o [res.zip]
aapt2 link [res.zip] -I [android.jar路径] --java [R文件输出路径] --manifest [清单文件路径] -o [输出apk路径]
希望能够帮助到遇到同样问题的人。