【问题标题】:How to use aapt2, where is the documentation?如何使用aapt2,文档在哪里?
【发布时间】:2017-06-24 06:06:43
【问题描述】:

我使用aapt p打包资源生成R.java

但是当我升级到Android 24时,我发现aapt2.exe

我应该使用aapt2.exe吗?我该如何使用它?我找不到任何关于它的文档。

【问题讨论】:

  • 在您的 gradle.properties 文件中,添加以下行:android.enableAapt2=true Source
  • android.enableAapt2 选项已弃用,不应再使用。使用android.enableAapt2=true 删除此警告。 将于 2018 年底移除。

标签: android aapt aapt2


【解决方案1】:

AAPT 和 AAPT2 的工作方式有一些很大的不同。

编译链接

AAPT2 背后的主要思想是,除了新功能之外,它将“打包”步骤分为两个:“编译”和“链接”。它提高了性能,因为如果只有一个文件发生更改,您只需重新编译该文件并使用“链接”命令链接所有中间文件。

更严格

AAPT2 试图尽早发现大多数错误。这就是为什么当从 AAPT 切换到 AAPT2 时,您可能会遇到许多错误,说明某些元素嵌套不正确或某些引用不正确。有关新限制的更多信息,请查看Android Studio 3.0 documentation

用法

Android Studio 3.0 默认启用 AAPT2(使用 Android Gradle 插件 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

【讨论】:

  • 我试过你提到的方法。但我仍然收到error: resource mipmap/ic_launcher (aka packageNamet:mipmap/ic_launcher) not found 之类的错误。等等。即使这些文件存在于编译的 res 文件夹中。
  • aapt2 link --manifest /home/test/src/main/AndroidManifest.xml -I /home/Android/Sdk/platforms/android-27/android.jar -R /home/test/build/intermediates/res/merged/debug/* -o file.zip 这是我正在使用的命令。 res/merged/debug 文件夹已经包含了所有由 Android Studio 构建过程创建的平面文件。我只是想打包为 zip 文件。难道我做错了什么 ? @izabela-orlowska
  • 嗯,从我所见,它看起来是正确的。你能提供一个复制案例吗?也许您缺少一些依赖项。在解决资源方面,AAPT2 比 AAPT 更严格,AAPT 会让更多事情发生,但这会导致可能的运行时问题。另外,如果这些是由 Android Studio 的 gradle 构建创建的,任务 processDevDebugResources 是否成功完成?如果是这样,您可以通过将 --debug 标志添加到 gradle 命令来查看 gradle 调用 AAPT2 的完整命令。 @jgm
  • 如何从 gradle 调用它?我需要在扫描类文件后对其进行后处理,以生成原始资源,然后我需要调用 aapt2 将资源转换为 .flat 文件(因为 aapt2 已经在其他资源上运行过)。我不知道如何在 gradle 规则中调用 aapt2。
  • @LukeHutchison 您可以将文件添加为合并资源任务的输入。
【解决方案2】:

注意:将此视为 Izabela 答案的补充

Android O 中的 Overlay Manager Service 的作者展示了他们的工作并讨论了 AAPT2 in their slides(有关上下文,请参见幻灯片 12-14)。这个工具的官方文档现在是here(礼貌@Shrijana's answer

另外,如有疑问,请查看源代码:https://android.googlesource.com/platform/frameworks/base/+/android-7.0.0_r7/tools/aapt2

【讨论】:

    【解决方案3】:

    除了上面给出的答案,AAPT2 的文档终于出来了。您可以找到文档here。如果您发现任何错误,请report a bug 处理这些错误。

    【讨论】:

    • 欢迎来到 StackOverflow Shrijana!在文档方面做得很好! :)
    • 谢谢! @IzabelaOrlowska :)
    猜你喜欢
    • 2018-07-02
    • 2010-09-30
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    相关资源
    最近更新 更多