![](/img/trans.png)
[英]Gradle build fails with error: Failed linking resources and AAPT2 error
[英]Getting the aapt2 parameters of a gradle build?
我有興趣嘗試使用aapt2從命令行編譯android應用程序。 嘗試執行aapt2 link
命令時,鏈接約束布局庫時出現問題。 該程序可從Android studio / gradle成功構建。 如何使gradle命令行調用向我顯示正在運行的aapt2命令?
作為記錄,我嘗試運行./gradlew assembleDebug --debug,我所看到的只是對aapt2-proto庫的調用。
鏈接
該命令會有點復雜,並且取決於很多事情(例如您的資源,項目的依賴項,使用的標志等),因此獲取完整命令的最簡單方法是實際“破壞”資源。
編輯您的res / values / 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的標志:
其他可能對您有用的標志:
編譯
編譯命令非常簡單。 您基本上可以告訴APT2編譯哪個文件以及在哪里輸出。
<path>aapt2 compile -o /path/to/output/dir /path/to/file/to/compile.xml
編譯標志為:
要記住的一件事是,編譯文件是二進制.flat文件,輸出名稱基於輸入名稱和文件的父目錄名稱。 這意味着,如果輸入文件為res / drawable-450dpi / img.png,則輸出文件將為drawable-450dpi_img.png.flat 。 編譯后的值文件的擴展名為“ arsc.flat”,而不僅僅是“ .flat”,因此res / values-en / strings.xml文件將被編譯為values-en_strings.arsc.flat 。 這是由AAPT2自動完成的,因此您不必擔心,但是如果以后需要查找已編譯的文件,很高興知道這一點。
關於編譯的另一個有趣的事實是,記住輸入文件的內容(以及XML文件的行號)很漂亮,因此,如果鏈接失敗,錯誤將不會指向.flat文件,而是指向原始輸入文件代替。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.