aapt2 工具介紹

aapt 是Android Asset Packaging Tool的縮寫,是編譯和打包資源的工具。而aapt2是在aapt上做了優(yōu)化。Android Gradle Plugin 3.0.0或者更高版本默認(rèn)開啟aapt2。當(dāng)然也可以在配置文件中手動(dòng)關(guān)閉aapt2。

一般打包過(guò)程情況下,都是由gradle自動(dòng)調(diào)用aapt2,將資源文件編譯成二進(jìn)制文件。當(dāng)然,我們也可以使用命令行進(jìn)行手動(dòng)打包資源。aapt2打包資源的流程如下圖。

aapt2打包資源流程

aapt2將原先的資源編譯打包過(guò)程拆分成了兩部分,即編譯和鏈接。

  • 編譯:將資源文件編譯為二進(jìn)制格式文件
  • 鏈接:將編譯后的所有文件合并,打包成一個(gè)單獨(dú)文件

這種方式可以很好的提升資源的編譯性能,比如只有一個(gè)資源文件發(fā)送改變時(shí),你只需要重新編譯改變的文件,然后將其與其他未改變的資源進(jìn)行鏈接即可。而之前的aapt是將所有資源進(jìn)行merge,merge完后將所有資源進(jìn)行編譯,產(chǎn)生一個(gè)資源ap_文件,該文件是一個(gè)壓縮包,這樣帶來(lái)的后果就是即使只改變了一個(gè)資源文件,也要進(jìn)行全量編譯。

編譯

aapt2支持編譯所有的資源文件,并產(chǎn)生.flat格式的文件。

Input Output
res/values/目錄下的xml文件 *.asrc.flat 格式的文件
其他資源文件 res/values/ 目錄下的XML文件外,都是 *.flat格式文件. 此外所有的 PNG 文件默認(rèn)壓縮為 *.png.flat文件. 可以使用 --no-crunch 參數(shù)禁止壓縮PNG圖片

編譯語(yǔ)法

aapt2 compile path-to-input-files [options] -o output-directory/

Compile 命令行參數(shù)

Option Description
-o path 指定輸出文件路徑
--dir directory 指定掃描的資源目錄
--no-crunch 禁止PNG圖片壓縮處理
-v 打開詳細(xì)日志

舉例

下面我們?cè)贏ndroid項(xiàng)目目錄下,使用aapt2 命令行編譯資源文件

  • 編譯res/values/下的XML文件
aapt2 compile -o myBuild/ app/src/main/res/values/strings.xml

可以在myBuild/目錄下,找到values_strings.arsc.flat文件

  • 編譯png文件
aapt2 compile -o myBuild/ app/src/main/res/mipmap-xhdpi/ic_launcher.png

可以在myBuild/目錄下,找到mipmap-xhdpi_ic_launcher.png.flat文件

鏈接

在鏈接階段,aapt2首先合并編譯階段生成的文件,像二進(jìn)制XML文件,處理后的PNG文件等,然后,將其打包成一個(gè)apk文件。此外,在此階段可以生成其他輔助文件,如R.java和ProGuard規(guī)則文件。當(dāng)然,此時(shí)生成的apk文件并不包含dex文件,也沒(méi)有簽名。

連接語(yǔ)法

aapt2 link path-to-input-files [options] -o
outputdirectory/outputfilename.apk --manifest AndroidManifest.xml

常用link命令行參數(shù)

Option Description
-o path 指定輸出文件路徑
--manifest file 指定AndroidManifest文件路徑
-I 指定android.jar路徑
-- emit-ids path 可以產(chǎn)生資源id文件,可以適用于--stable-ids
--stable-ids 使用--emit-ids生成的文件,包含資源類型名稱列表及其分配的ID。
-v 打開詳細(xì)日志

更多命令行可以參見aapt2#link

舉例

在上一節(jié),我們編譯后得到兩個(gè)文件values_strings.arsc.flat和mipmap-xhdpi_ic_launcher.png.flat文件?,F(xiàn)在,我們使用aapt2 link命令將這兩個(gè)文件打包到output.apk 中。

aapt2 link -o output.apk -I /Users/nxiangbo/Library/Android/sdk/platforms/android-28/android.jar myBuild/values_strings.arsc.flat myBuild/mipmap-xhdpi_ic_launcher.png.flat --manifest app/src/main/AndroidManifest.xml -v

執(zhí)行上述命令,即可在當(dāng)前目錄生成output.apk。

Dump

dump用于打印通過(guò)link命令產(chǎn)生的APK文件的資源和配置文件??梢允褂靡韵旅顚⑵浯蛴〉浇K端。

aapt2 dump filename.apk [options]

dump 命令行參數(shù)

Option Description
--no-values 當(dāng)顯示資源時(shí),禁止輸出值
--file file 將文件指定為要從APK轉(zhuǎn)儲(chǔ)的參數(shù)
-v 打開詳細(xì)日志

舉例

使用aapt2 dump命令將鏈接后生成的output.apk打印出來(lái)。

aapt2 dump output.apk

輸出結(jié)果如下

Binary APK
Package name=com.example.nxiangbo.shapeimage id=7f
  type mipmap id=01 entryCount=1
    resource 0x7f010000 mipmap/ic_launcher
      (xhdpi-v4) (file) res/mipmap-xhdpi-v4/ic_launcher.png type=PNG
  type string id=02 entryCount=1
    resource 0x7f020000 string/app_name
      () "shapeImage"

參考文檔

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 簡(jiǎn)述: ? ?一直希望有個(gè)機(jī)會(huì)可以好好研究一下android手機(jī)的多主題功能,借此機(jī)會(huì)將自己所能分析到的內(nèi)容記錄...
    大天使之劍閱讀 2,000評(píng)論 0 6
  • 目錄 AAPT解釋,作用 AAPT基本命令 AAPT編譯資源源碼解析 AAPT打包和系統(tǒng)不一致的資源ID AAPT...
    徐正峰閱讀 85,459評(píng)論 7 139
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,844評(píng)論 6 427
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評(píng)論 25 708
  • 插件擴(kuò)展:一般插件都支持?jǐn)U展,對(duì)自己我創(chuàng)建的分類進(jìn)行支持. 找到安裝插件的工程文件,全局搜索install 安裝路...
    Vampire_Jam閱讀 192評(píng)論 0 1

友情鏈接更多精彩內(nèi)容