获取 gradle 构建的 aapt2 参数?

2024-04-27

我有兴趣尝试使用 aapt2 从命令行编译 Android 应用程序。当我尝试执行以下操作时,链接约束布局库时遇到问题aapt2 link命令。该程序从 Android studio/gradle 成功构建。如何使 gradle 命令行调用向我显示它正在运行的 aapt2 命令?

作为记录,我尝试运行 ./gradlew assembleDebug --debug,我所能看到的只是对 aapt2-proto 库的调用。


Link

该命令会有点复杂,并且取决于很多因素(例如您的资源、项目的依赖项、使用的标志等),因此获取完整命令的最简单方法是实际“破坏”资源。
编辑你的资源/值/strings.xml文件包含:

<string name="incorrect">@string/idontexist</string>

转到项目目录并运行“gradlew clean assembleDebug”。 AAPT2 在链接期间将失败,Android Gradle 插件将打印出所使用的完整命令。
我使用的是 3.2.0-alpha13 版本,它为我提供了完整的命令:

error: failed linking references.
Command: <path>/.gradle/caches/transforms-1/files-1.1/aapt2-3.2.0-alpha13-4662957-linux.jar/cbe84ab07c48b199e5fe8d202dd5845e/aapt2-3.2.0-alpha13-4662957-linux/aapt2 link -I\
      <path>/Android/Sdk/platforms/android-27/android.jar\
      --manifest\
      <path>/AndroidStudioProjects/Library/app/build/intermediates/merged_manifests/debug/processDebugManifest/merged/AndroidManifest.xml\
      -o\
      <path>/AndroidStudioProjects/Library/app/build/intermediates/processed_res/debug/processDebugResources/out/resources-debug.ap_\
      -R\
      @<path>/AndroidStudioProjects/Library/app/build/intermediates/incremental/processDebugResources/resources-list-for-resources-debug.ap_.txt\
      --auto-add-overlay\
      --java\
      <path>/AndroidStudioProjects/Library/app/build/generated/not_namespaced_r_class_sources/debug/processDebugResources/r\
      --proguard-main-dex\
      <path>/AndroidStudioProjects/Library/app/build/intermediates/legacy_multidex_aapt_derived_proguard_rules/debug/processDebugResources/manifest_keep.txt\
      --custom-package\
      com.example.foo.bar\
      -0\
      apk\
      --output-text-symbols\
      <path>/AndroidStudioProjects/Library/app/build/intermediates/symbols/debug/R.txt\
      --no-version-vectors
Daemon:  AAPT2 aapt2-3.2.0-alpha13-4662957-linux Daemon #0

此处用于 AAPT2 的标志:

  • -I:平台的android.jar的路径
  • - 显现:清单文件(AGP 使用合并的清单,而不仅仅是源中的清单)
  • -o: 输出文件
  • -R: 资源。通常你会一个接一个地传递,但由于这里有很多,它们被写入一个文件,然后该文件被传递到 AAPT2 (这就是为什么路径前面有“@”符号)
  • --自动添加覆盖: 允许叠加
  • --java:R.java 的输出目录
  • --proguard-main-dex:主 dex 的 Proguard 规则的输出文件
  • --自定义包:R类的包
  • -0: 不要压缩这些扩展名
  • --输出文本符号:R.txt 的输出文件
  • --无版本向量:矢量绘图没有自动版本控制

其他可能对您有用的标志:

  • -v: 详细记录
  • -A:包含您想要放入 APK 文件中的资源的目录,它们不会被处理或压缩,只是按原样放入输出文件中
  • -h: 打印出帮助

Compile

编译命令非常简单。您基本上告诉 AAPT2 要编译哪个单个文件以及在哪里输出它。

<path>aapt2 compile -o /path/to/output/dir /path/to/file/to/compile.xml

编译的标志是:

  • -o:编译后的文件放置的目录
  • --伪本地化:生成伪语言环境的源
  • --legacy:导致 AAPT2 更加宽松,并将某些错误视为警告(就像 AAPT1 所做的那样)
  • -v: 详细记录
  • -h: 打印出帮助

要记住的一件事是,编译的文件是二进制 .flat 文件,输出名称基于输入名称和文件的父目录名称。这意味着如果输入文件是res/drawable-450dpi/img.png输出文件将是可绘制-450dpi_img.png.flat。编译值文件的扩展名是“arsc.flat”,而不仅仅是“.flat”,因此文件res/values-en/strings.xml将被编译为值-en_strings.arsc.flat。这是由 AAPT2 自动完成的,因此您无需担心,但最好了解一下,以防您稍后需要找到编译后的文件。

关于编译的另一个有趣的事实是,它在记住输入文件是什么(以及 XML 文件的行号)方面非常有用,因此如果链接失败,错误将不会指向 .flat 文件,而是指向原始输入文件代替。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取 gradle 构建的 aapt2 参数? 的相关文章

  • Android 在 ListView 中获取精确的滚动位置

    我想获得 ListView 滚动的确切像素位置 不 我指的不是第一个可见位置 有办法实现这一点吗 好的 我找到了一个解决方法 使用以下代码 View c listview getChildAt 0 int scrolly c getTop
  • 使用三元运算符“不执行任何操作”[重复]

    这个问题在这里已经有答案了 我想像这样使用三元运算符 仅检查true声明的一部分 foo bar Do nothing 是否可以排除该语句的 else 部分的逻辑 我尝试使用return 但编译器给出了错误 基本上我想要实现的是使用三元运算
  • 改造如何打印响应 JSON

    我正在使用 Retrofit 并且想要访问从服务器返回的 JSON 响应 有人可以告诉我吗 谢谢 如果您只想查看出于调试目的的响应 只需在改造中打开调试并查看日志即可 它是这样的 restAdapter setDebuggingEnable
  • 如何使用 WiFi Direct 打印文本文件

    我有一个正在运行的 Android 应用程序 可以显示用户统计信息 我想将纯文本格式 txt 的小报告发送到 WiFi Direct 打印机 我已经下载了示例demo https developer android com guide to
  • 屏幕关闭时接近传感器不起作用?

    Hy 我有一个与接近传感器相关的问题 当我将手指放在上面时 我想关闭屏幕 当我拿开手指时 我想打开屏幕 我成功地完成了关闭部分 但是当我将手指从传感器上移开时 它似乎没有执行 onSensorChanged 方法 这是它的代码 public
  • Android 中无网络、断线的情况如何处理?

    我有一个应用程序需要连接到 Internet 才能执行某些操作 但当没有可用的 Internet 时 它会崩溃 我读到 如果没有互联网 我需要使用 try catch 括号 我尝试使用它 正如您在 AsyncTask 中看到的那样 但它不起
  • 错误:(52, 0) 未找到 Gradle DSL 方法:使用 Quickblox API 中的“сompile()”

    我尝试通过添加在线 Maven 依赖项在我的程序中使用 Quickblox API 我正在使用 Android Studio 当我尝试构建我的程序时 它显示以下错误 Error 52 0 Gradle DSL method not foun
  • 让 SSLEngine 在 Android (4.4.2) 上使用 TLSv1.2?

    伙计们 我希望我遗漏了一些明显的东西 并且我希望有人能够提供一些线索 我正在尝试让 TLSv1 2 在 SSL NIO 上下文中运行 使用Android异步 https github com koush AndroidAsync库 所以我尝
  • 无法从 AsyncTask 启动服务

    我正在尝试从 AsyncTask 启动服务 但看不到它的启动 我还在清单文件中添加了服务 这里是代码 protected Integer doInBackground Void values throws InterruptedExcept
  • 迁移到 AndroidX 后 Google 登录无法正常工作

    我已将 Google Sign 集成到我的 Android 应用程序中 当我使用 spp Compact v28 库时它工作得很好 但在将我的应用程序迁移到 androidx 后失败 但出现以下异常 java lang Incompatib
  • 如何以编程方式在 Genymotion 上刷新 zip

    我正在尝试将谷歌应用程序刷新到 genymotion 模拟器中 我可以使用拖放功能来完成此操作 但我的项目需要 google apps zip 已加载到 genymotion 机器中并且在内部闪烁 以避免与桌面交互 我检查过类似的问题thi
  • Android快速查找网络上所有本地设备

    我正在制作一个 Android 应用程序 需要能够查看本地网络设备 名称或 IP 目前我可以扫描网络并找到设备的本地IP 然而 由于时间太长 用户在搜索网络时会看到黑屏加载几分钟 这是我当前正在使用的代码 private ArrayList
  • 如何在Java中从一组选定的颜色中输出随机颜色? (安卓)

    因此 我希望每当用户输入答案时都为字符串赋予随机颜色 我的问题是 我不确定如何使字符串的随机颜色成为特定范围的颜色 例如 如果我希望字符串随机变成蓝色 红色 绿色 粉色 白色或棕色 只有这些颜色 没有其他颜色 到目前为止 我已经使用以下代码
  • 如何在 android 中将日期从 24 小时格式更改为 12 小时格式(上午/下午)

    Calendar ci Calendar getInstance CiDateTime ci get Calendar MONTH 1 ci get Calendar DAY OF MONTH ci get Calendar YEAR St
  • AndroidJUnit4 测试未找到

    我像这样注释了我的课程 RunWith AndroidJUnit4 class public class WorkdayProviderTest 此外 还注释了我的测试方法 如下所示 Test public void insert data
  • 如何默认显示带有手动(键盘)输入的时间选择器对话框?

    时间选择器对话框默认显示循环计时以选择日期和时间 相反 它需要默认显示键盘输入来选择日期和时间 在以圆形样式显示时间选择器对话框时 它具有键盘图标 可将圆形样式更改为手动输入样式 Android Oreo 操作系统设备可使用此功能 如何在支
  • 将自定义文件与我的 Android 应用程序关联

    我想将特定扩展名的文件 例如任何扩展名为 xyz 的文件 与我的应用程序关联 这意味着 当用户在文件资源管理器 或其他地方 如 gmail 驱动器等 中点击 SaveFile1 xyz 时 我的应用程序应该启动 并且文件的 Uri 将在 I
  • 在android中重叠屏幕

    在下面的布局中 我有一个名为扫描设备的文本视图 其中显示设备名称 但我的设备列表显示在屏幕上方 任何人都可以帮助我如何滚动视图应该在设备列表内 滚动屏幕时 它显示设备列表 但它显示在屏幕上方 想要显示在屏幕内
  • Android ListView,如果arrayAdapter的arrayList为空则显示消息

    我需要帮助 我有一个 Listview setListAdapter arrayAdapter 和数组适配器有一个 arrayList If my arrayList is empty it shows loading images it
  • Android Studio 不允许我更改 SDK 位置

    我打开 Android Studio 然后我打开 SDK 管理器 我拥有最新版本 但是我的 SDK 平台需要 Android 6 0 它甚至不让我点击任何东西 在此图像中 您可以看到文本和复选框变色 我无法单击 SDK 平台内的任何内容 甚

随机推荐