官方介紹:developer.android.google.cn/studio/comm…java
AAPT2(Android 資源打包工具)是一個構建工具,Android Studio 和 Android Gradle 插件使用它來編譯和打包應用的資源。AAPT2 會解析資源、爲資源編制索引,並將資源編譯爲針對 Android 平臺進行過優化的二進制格式。android
Android Gradle 插件 3.0.0 及更高版本默認狀況下會啓用 AAPT2,aapt2地址(/sdk_path/build-tools/version/aapt2)。bash
AAPT2 支持經過啓用增量編譯實現更快的資源編譯。這是經過將資源處理拆分爲兩個步驟來實現的:工具
這種拆分方式有助於提升增量編譯的性能。例如,若是一個文件發生了改變,則只須要從新編譯這個文件。post
AAPT2 支持編譯全部 Android 資源類型,如可繪製對象和 XML 文件。調用 AAPT2 進行編譯時,每次調用都應傳遞一個資源文件做爲輸入。而後,AAPT2 會解析該文件並生成一個擴展名爲 .flat 的中間二進制文件。性能
輸入 | 輸出 |
---|---|
XML 資源文件(如 String 和 Style),它們位於 res/values/ 目錄下。 | 以 *.arsc.flat 做爲擴展名的資源表。 |
其餘全部資源文件。 | 除 res/values/ 目錄下的文件之外的其餘全部文件都將轉換爲擴展名爲 *.flat 的二進制 XML 文件。此外,默認狀況下,全部 PNG 文件都會被壓縮,並採用 *.png.flat 擴展名。若是選擇不壓縮 PNG,您能夠在編譯期間使用 --no-crunch 選項。 |
AAPT2 輸出的文件不是可執行文件,稍後您必須在連接階段添加這些二進制文件做爲輸入來生成 APK。可是,所生成的 APK 文件不是能夠當即部署在 Android 設備上的可執行文件,由於它不包含 DEX 文件(已編譯的字節碼)且未簽名。優化
aapt2 compile path-to-input-files [options] -o output-directory/
複製代碼
path-to-input-files必須符合path/resource-type[-config]/file.ui
.\aapt2.exe compile G:\Decompile\aapt\res\values\colors.xml -o G:\Decompile\aapt\
複製代碼
會在目錄文件夾下生成values_colors.arsc.flat文件。google
選項 | 說明 |
---|---|
-o path | 指定已編譯資源的輸出路徑。這是一個必需的標誌,由於您必須指定 AAPT2 可將已編譯的資源輸出並存儲到其中的目錄的路徑。 |
--dir directory | 指定要在其中搜索資源的目錄。雖然您能夠使用此標誌經過一個命令編譯多個資源文件,但這樣就沒法得到增量編譯的優點,所以不建議對大型項目使用。 |
--pseudo-localize | 生成默認字符串的僞本地化版本,如 en-XA 和 en-XB。 |
--no-crunch | 停用 PNG 處理。 |
--legacy | 將使用早期版本的 AAPT 時容許的錯誤視爲警告。 |
-v | 啓用詳細日誌記錄。 |
在連接階段,AAPT2 會合並在編譯階段生成的全部中間文件(如資源表、二進制 XML 文件和處理過的 PNG 文件),並將它們打包成一個 APK。此外,在此階段還會生成其餘輔助文件,如 R.java 和 ProGuard 規則文件。不過,生成的 APK 不包含 DEX 字節碼且未簽名。spa
aapt2 link path-to-input-files [options] -o outputdirectory/outputfilename.apk --manifest AndroidManifest.xml
複製代碼
示例
aapt2 link -o output.apk -I android_sdk/platforms/android_version/android.jar compiled/res/values_values.arsc.flat compiled/res/drawable_Image.flat --manifest /path/to/AndroidManifest.xml -v
複製代碼
選項 | 說明 |
---|---|
-o path | 指定連接的資源 APK 的輸出路徑。必須指定。 |
--manifest file | 指定要構建的 Android 清單文件的路徑。必須指定。 |
-I | 若是您要在資源文件中使用帶有 android 命名空間(例如 android:id)的屬性,則必須使用此標誌。 |
--java directory | 指定要在其中生成 R.java 的目錄。 |
--min-sdk-version min-sdk-version | 設置要用於 AndroidManifest.xml 的默認最低 SDK 版本。 |
--target-sdk-version target-sdk-version | 設置要用於 AndroidManifest.xml 的默認目標 SDK 版本。 |
--version-code version-code | 指定沒有版本代碼時要注入 AndroidManifest.xml 中的版本代碼(整數) |
--compile-sdk-version-name compile-sdk-version-name | 指定沒有版本名稱時要注入 AndroidManifest.xml 中的版本名稱。 |
-v | 可提升輸出的詳細程度 |
dump 用於輸出有關從 link 命令生成的 APK 的資源和清單信息。使用 dump 將信息輸出到控制檯。
aapt2 dump [subcommand] filename.apk [options]
複製代碼
選項 | 說明 |
---|---|
apc | Print the contents of the AAPT2 Container (APC) generated fom compilation. |
badging | 輸出從APK清單中提取的信息 |
configurations | 輸出APK使用的配置信息 |
packagename | 輸出包名 |
permissions | 輸出APK中使用到的權限信息 |
strings | 輸入資源表常量池的信息 |
styleparents | Print the parents of a style in an APK. |
resources | 輸出資源表的信息 |
xmlstrings | 輸出編譯後的常量池 |
xmltree | 輸入編譯後的xml樹 |
選項 | 說明 |
---|---|
--no-values | 禁止在顯示資源時輸出值。 |
--file file | 將文件指定爲要從 APK 轉儲的參數。 |
-v | 提升輸出的詳細程度。 |