Android APK文件(3、AAPT2工具使用)

官方介紹: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 文件(已編譯的字節碼)且未簽名。優化

編譯語法:compile

aapt2 compile path-to-input-files [options] -o output-directory/
複製代碼

path-to-input-files必須符合path/resource-type[-config]/file.ui

  • 錯誤示例:G:\Decompile\aapt\colors.xml 運行會報錯:error: invalid file path 'G:\Decompile\aapt\colors.xml'.
  • 正確示例:G:\Decompile\aapt\res\values\colors.xml
.\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

連接語法:link

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]
複製代碼

subcommand

選項 說明
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 提升輸出的詳細程度。

結尾

Android APK文件(1、編譯打包過程)

Android APK文件(2、解壓和反編譯)

Android APK文件(3、AAPT2工具使用)

Android APK文件(4、Smali語法)

相關文章
相關標籤/搜索