简体   繁体   English

获取gradle构建的aapt2参数?

[英]Getting the aapt2 parameters of a gradle build?

I am interested in trying to compile an android application from the command line using aapt2. 我有兴趣尝试使用aapt2从命令行编译android应用程序。 I am having a problem linking the constraint-layout library when I try to perform the aapt2 link command. 尝试执行aapt2 link命令时,链接约束布局库时出现问题。 This program builds successfully from Android studio/gradle. 该程序可从Android studio / gradle成功构建。 How can I make gradle command line invocation show me the aapt2 command it is running? 如何使gradle命令行调用向我显示正在运行的aapt2命令?

For the record, I have tried to run ./gradlew assembleDebug --debug and all I can see is the calls to the aapt2-proto library. 作为记录,我尝试运行./gradlew assembleDebug --debug,我所看到的只是对aapt2-proto库的调用。

Link 链接

The command will be a bit complicated and will depend on many things (like your resources, the project's dependencies, flags used etc), so the easiest way to get the full command is to actually "break" a resource. 该命令会有点复杂,并且取决于很多事情(例如您的资源,项目的依赖项,使用的标志等),因此获取完整命令的最简单方法是实际“破坏”资源。
Edit your res/values/strings.xml file to contain: 编辑您的res / values / strings.xml文件以包含:

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

Go to the project's directory and run "gradlew clean assembleDebug". 转到项目目录,然后运行“ gradlew clean assembleDebug”。 AAPT2 will fail during linking and Android Gradle Plugin will print out the full command used. AAPT2在链接期间将失败,并且Android Gradle插件将打印出所使用的完整命令。
I'm using version 3.2.0-alpha13 and it gives me the command in full: 我正在使用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

The flags used here for AAPT2: 此处用于AAPT2的标志:

  • -I : path to the platform's android.jar -I :平台的android.jar的路径
  • --manifest : the manifest file (AGP uses the merged manifest, not simply the one in your sources) --manifest :清单文件(AGP使用合并的清单,而不只是源文件中的清单)
  • -o : output file -o :输出文件
  • -R : resources. -R :资源。 Normally you'd pass one by one, but since there are many here, they're written to a file and then that file is passed to AAPT2 (that's why there's the "@" symbol before the path) 通常,您将一一传递,但是由于这里有很多传递,因此它们被写入文件,然后将该文件传递给AAPT2(这就是路径前面有“ @”符号的原因)
  • --auto-add-overlay : allow overlays --auto-add-overlay :允许覆盖
  • --java : output directory for the R.java --java :R.java的输出目录
  • --proguard-main-dex : output file for Proguard rules for main dex --proguard-main-dex :主dex的Proguard规则的输出文件
  • --custom-package : package for the R class --custom-package :R类的软件包
  • -0 : do not compress these extensions -0 :不压缩这些扩展名
  • --output-text-symbols : output file for the R.txt --output-text-symbols :R.txt的输出文件
  • --no-version-vectors : no automatic versioning of vector drawables --no-version-vectors :没有矢量可绘制对象的自动版本控制

Other flags that might be useful to you: 其他可能对您有用的标志:

  • -v : verbose logging -v :详细日志记录
  • -A : directory containing assets you want placed in your APK file, they will not be processed or compressed, just put as-is into the output file -A :包含要放置在APK文件中的资产的目录,将不会对其进行处理或压缩,只需将其原样放入输出文件
  • -h : print out help -h :打印出帮助

Compile 编译

Compile command is pretty straightforward. 编译命令非常简单。 You basically tell AAPT2 which single file to compile and where to output it. 您基本上可以告诉APT2编译哪个文件以及在哪里输出。

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

The flags for compile are: 编译标志为:

  • -o : the directory where the compiled files will be placed -o :将放置编译文件的目录
  • --pseudo-localize : generate sources for pseudo-locales --pseudo-localize :生成伪语言环境的源
  • --legacy : causes AAPT2 to be more lenient and treat some errors as warnings (like AAPT1 did) --legacy :使AAPT2宽大处理并将某些错误视为警告(如AAPT1那样)
  • -v : verbose logging -v :详细日志记录
  • -h : print out help -h :打印出帮助

One thing to keep in mind is that the compiled files are binary .flat files and the output name is based in the input name and the file's parent directory name. 要记住的一件事是,编译文件是二进制.flat文件,输出名称基于输入名称和文件的父目录名称。 That means if an input file was res/drawable-450dpi/img.png the output file will be drawable-450dpi_img.png.flat . 这意味着,如果输入文件为res / drawable-450dpi / img.png,则输出文件将为drawable-450dpi_img.png.flat Compiled values files get the extension "arsc.flat" instead of just ".flat", so a file res/values-en/strings.xml will be compiled to values-en_strings.arsc.flat . 编译后的值文件的扩展名为“ arsc.flat”,而不仅仅是“ .flat”,因此res / values-en / strings.xml文件将被编译为values-en_strings.arsc.flat This is done automatically by AAPT2 so you don't need to worry about it, but it's good to know in case you need to find the compiled file later on. 这是由AAPT2自动完成的,因此您不必担心,但是如果以后需要查找已编译的文件,很高兴知道这一点。

Another fun fact about compile is that it's nifty when it comes to remembering what the input file was (and the line numbers for XML files), so if linking fails the error won't point to the .flat file, but to the original input file instead. 关于编译的另一个有趣的事实是,记住输入文件的内容(以及XML文件的行号)很漂亮,因此,如果链接失败,错误将不会指向.flat文件,而是指向原始输入文件代替。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Gradle构建失败并出现错误:链接资源失败和AAPT2错误 - Gradle build fails with error: Failed linking resources and AAPT2 error 尝试使用Firebase在Android Studio中更新我的build.gradle并收到“ AAPT2错误:检查日志以获取详细信息”错误 - Trying to update my build.gradle in Android Studio using Firebase and getting an “AAPT2 error: check logs for details” error Android Gradle 构建错误“AAPT2 aapt2-4.1.0-6503028-windows 守护程序 #0:链接期间出现意外错误,试图停止守护程序。” - Android Gradle build error "AAPT2 aapt2-4.1.0-6503028-windows Daemon #0: Unexpected error during link, attempting to stop daemon." 如何使用aapt2构建可运行的apk? - How to build runnable apk with aapt2? Aapt2引发以前版本中存在的错误 - Aapt2 throws error that was present in previous build Jenkins构建Android的Aapt2问题 - Aapt2 issue with jenkins build Android Android Studio 3.0.1-获取AAPT2错误 - Android Studio 3.0.1 - Getting AAPT2 errors 我正在尝试构建我的应用程序,但出现此错误:AAPT2 进程意外退出。 错误 output - im trying to build my app but i getting this error: AAPT2 process unexpectedly exit. Error output Android Studio构建失败,出现此错误:-守护进程:AAPT2 aapt2-3.2.0-rc02-4818971-osx守护进程#0 - Android Studio build failed, getting this error:- Daemon: AAPT2 aapt2-3.2.0-rc02-4818971-osx Daemon #0 每次构建代码时都无法链接引用AAPT2错误的引用 - Failed to linking references getting AAPT2 error every time i build the code
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM