android aapt插件化,Android APK文件(三、AAPT2工具使用)
AAPT2(Android 資源打包工具)是一個(gè)構(gòu)建工具,Android Studio 和 Android Gradle 插件使用它來(lái)編譯和打包應(yīng)用的資源。AAPT2 會(huì)解析資源、為資源編制索引,并將資源編譯為針對(duì) Android 平臺(tái)進(jìn)行過(guò)優(yōu)化的二進(jìn)制格式。
Android Gradle 插件 3.0.0 及更高版本默認(rèn)情況下會(huì)啟用 AAPT2,aapt2地址(/sdk_path/build-tools/version/aapt2)。
AAPT2 支持通過(guò)啟用增量編譯實(shí)現(xiàn)更快的資源編譯。這是通過(guò)將資源處理拆分為兩個(gè)步驟來(lái)實(shí)現(xiàn)的:
編譯:將資源文件編譯為二進(jìn)制格式。
鏈接:合并所有已編譯的文件并將它們打包到一個(gè)軟件包中。
這種拆分方式有助于提高增量編譯的性能。例如,如果一個(gè)文件發(fā)生了改變,則只需要重新編譯這個(gè)文件。
編譯
AAPT2 支持編譯所有 Android 資源類型,如可繪制對(duì)象和 XML 文件。調(diào)用 AAPT2 進(jìn)行編譯時(shí),每次調(diào)用都應(yīng)傳遞一個(gè)資源文件作為輸入。然后,AAPT2 會(huì)解析該文件并生成一個(gè)擴(kuò)展名為 .flat 的中間二進(jìn)制文件。
輸入
輸出
XML 資源文件(如 String 和 Style),它們位于 res/values/ 目錄下。
以 *.arsc.flat 作為擴(kuò)展名的資源表。
其他所有資源文件。
除 res/values/ 目錄下的文件以外的其他所有文件都將轉(zhuǎn)換為擴(kuò)展名為 *.flat 的二進(jìn)制 XML 文件。此外,默認(rèn)情況下,所有 PNG 文件都會(huì)被壓縮,并采用 *.png.flat 擴(kuò)展名。如果選擇不壓縮 PNG,您可以在編譯期間使用 --no-crunch 選項(xiàng)。
AAPT2 輸出的文件不是可執(zhí)行文件,稍后您必須在鏈接階段添加這些二進(jìn)制文件作為輸入來(lái)生成 APK。但是,所生成的 APK 文件不是可以立即部署在 Android 設(shè)備上的可執(zhí)行文件,因?yàn)樗话?DEX 文件(已編譯的字節(jié)碼)且未簽名。
編譯語(yǔ)法:compile
aapt2 compile path-to-input-files [options] -o output-directory/
復(fù)制代碼
path-to-input-files必須符合path/resource-type[-config]/file.
錯(cuò)誤示例:G:\Decompile\aapt\colors.xml
運(yùn)行會(huì)報(bào)錯(cuò):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\
復(fù)制代碼
會(huì)在目錄文件夾下生成values_colors.arsc.flat文件。
編譯選項(xiàng)
選項(xiàng)
說(shuō)明
-o path
指定已編譯資源的輸出路徑。這是一個(gè)必需的標(biāo)志,因?yàn)槟仨氈付?AAPT2 可將已編譯的資源輸出并存儲(chǔ)到其中的目錄的路徑。
--dir directory
指定要在其中搜索資源的目錄。雖然您可以使用此標(biāo)志通過(guò)一個(gè)命令編譯多個(gè)資源文件,但這樣就無(wú)法獲得增量編譯的優(yōu)勢(shì),因此不建議對(duì)大型項(xiàng)目使用。
--pseudo-localize
生成默認(rèn)字符串的偽本地化版本,如 en-XA 和 en-XB。
--no-crunch
停用 PNG 處理。
--legacy
將使用早期版本的 AAPT 時(shí)允許的錯(cuò)誤視為警告。
-v
啟用詳細(xì)日志記錄。
鏈接
在鏈接階段,AAPT2 會(huì)合并在編譯階段生成的所有中間文件(如資源表、二進(jìn)制 XML 文件和處理過(guò)的 PNG 文件),并將它們打包成一個(gè) APK。此外,在此階段還會(huì)生成其他輔助文件,如 R.java 和 ProGuard 規(guī)則文件。不過(guò),生成的 APK 不包含 DEX 字節(jié)碼且未簽名。
鏈接語(yǔ)法:link
aapt2 link path-to-input-files [options] -o outputdirectory/outputfilename.apk --manifest AndroidManifest.xml
復(fù)制代碼
示例
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
復(fù)制代碼
鏈接選項(xiàng)
選項(xiàng)
說(shuō)明
-o path
指定鏈接的資源 APK 的輸出路徑。必須指定。
--manifest file
指定要構(gòu)建的 Android 清單文件的路徑。必須指定。
-I
如果您要在資源文件中使用帶有 android 命名空間(例如 android:id)的屬性,則必須使用此標(biāo)志。
--java directory
指定要在其中生成 R.java 的目錄。
--min-sdk-version min-sdk-version
設(shè)置要用于 AndroidManifest.xml 的默認(rèn)最低 SDK 版本。
--target-sdk-version target-sdk-version
設(shè)置要用于 AndroidManifest.xml 的默認(rèn)目標(biāo) SDK 版本。
--version-code version-code
指定沒(méi)有版本代碼時(shí)要注入 AndroidManifest.xml 中的版本代碼(整數(shù))
--compile-sdk-version-name compile-sdk-version-name
指定沒(méi)有版本名稱時(shí)要注入 AndroidManifest.xml 中的版本名稱。
-v
可提高輸出的詳細(xì)程度
轉(zhuǎn)儲(chǔ)
dump 用于輸出有關(guān)從 link 命令生成的 APK 的資源和清單信息。使用 dump 將信息輸出到控制臺(tái)。
轉(zhuǎn)儲(chǔ)語(yǔ)法
aapt2 dump [subcommand] filename.apk [options]
復(fù)制代碼
subcommand
選項(xiàng)
說(shuō)明
apc
Print the contents of the AAPT2 Container (APC) generated fom compilation.
badging
輸出從APK清單中提取的信息
configurations
輸出APK使用的配置信息
packagename
輸出包名
permissions
輸出APK中使用到的權(quán)限信息
strings
輸入資源表常量池的信息
styleparents
Print the parents of a style in an APK.
resources
輸出資源表的信息
xmlstrings
輸出編譯后的常量池
xmltree
輸入編譯后的xml樹(shù)
轉(zhuǎn)儲(chǔ)選項(xiàng)
選項(xiàng)
說(shuō)明
--no-values
禁止在顯示資源時(shí)輸出值。
--file file
將文件指定為要從 APK 轉(zhuǎn)儲(chǔ)的參數(shù)。
-v
提高輸出的詳細(xì)程度。
結(jié)尾
總結(jié)
以上是生活随笔為你收集整理的android aapt插件化,Android APK文件(三、AAPT2工具使用)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2012 A 数学建模
- 下一篇: Android 实现全屏截图、剪裁图片、