我已使用aapt p
打包资源并生成R.java
。
但是当我升级到Android 24时,我找到了aapt2.exe
。
我应该使用aapt2.exe
吗?我该如何使用它?我找不到任何关于它的文档。
答案 0 :(得分:23)
AAPT和AAPT2之间的工作方式有很大差异。
除了新功能之外,AAPT2背后的主要思想是将“包”步骤分为两部分:'compile'和'link'。它提高了性能,因为如果只有一个文件发生更改,您只需要重新编译该文件并使用'link'命令链接所有中间文件。
AAPT2尽可能早地捕获大多数错误。这就是为什么当从AAPT切换到AAPT2时,您可能会遇到许多错误,指出某些元素嵌套不正确或某些引用不正确。有关新限制性的更多信息请参阅Android Studio 3.0 documentation。
Android Studio 3.0默认启用AAPT2(使用Android Gradle Plugin 3.0.0)。但是,如果要在自己的脚本中使用AAPT2,则需要更改处理资源的方式。
对于使用AAPT的'package'命令,您将使用-S传递资源目录。使用AAPT2,您需要首先使用'compile命令编译每个资源,然后仅使用-R标志传递所有已编译的文件。
例如:
aapt package -S app/src/main/res/ ...
改为使用:
aapt2 compile -o compiled/res/ app/src/main/res/values/values.xml
aapt2 compile -o compiled/res/ app/src/main/res/drawable/myImage.png --no-crunch
...
aapt2 link -R compiled/res/values_values.arsc.flat -R compiled/res/drawable_myImage.flat ...
标志使用方面存在更多差异,例如,在“编译”步骤期间,每个文件都使用“--pseudo-localize”和“--no-crunch”标志。有关AAPT2标志类型的完整信息:
aapt2 compile -h
aapt2 link -h
答案 1 :(得分:8)
注意:将此视为Izabela答案的补充
这是(截至2018年2月)相当差的文件。 Android O中Overlay Manager Service的作者最近介绍了他们的工作,并讨论了AAPT2 in their slides(参见上下文中的幻灯片12-14)。
此外,如有疑问,请查看源代码:https://android.googlesource.com/platform/frameworks/base/+/android-7.0.0_r7/tools/aapt2。
答案 2 :(得分:2)
除了上面给出的答案外,AAPT2的文档终于发布了。您可以找到文档here。如果发现任何错误,请report a bug对付这些错误。