使用AAPT2对多个文件进行编译

最近在使用重打包工具对某些遇到的apk进行重打包时,遇到了一些错误,例如: res\drawable\$avd_hide_password__0.xml: Invalid file name: must contain only [a-z0-9_.]

这是因为apktool 在解析apk包时发现了重复的资源文件,它将重复的文件增加了$的前缀和数字后缀
解决方案为移除文件名和文本里所有错误添加的$符号即可。

APKtool上的讨论和我的解答 我的解答

然后又遇到了 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路径]

希望能够帮助到遇到同样问题的人。

kisence

潮落江平未有风。