【Android 安裝包優(yōu)化】資源混淆 ( AAPT2 資源編譯工具 | resources.arsc 資源映射表 工作機制 )
文章目錄
一、AAPT2 資源編譯工具
二、resources.arsc 資源映射表 工作機制
三、參考資料
一、AAPT2 資源編譯工具
資源的編譯 , 生成 R.java 文件 , 都是通過 AAPT 工具生成的 ;
AAPT2 工具官方文檔 : https://developer.android.google.cn/studio/command-line/aapt2?hl=zh_cn
Java 文件是由 javac 工具編譯成 .class 字節(jié)碼文件 , 然后通過 dx 工具打包到 dex 文件中 ;
清單文件 AndroidManifest.xml , Drawable XML 圖片資源 , 布局 XML 資源 , 都是由 AAPT2 工具將
XML 文本文件
編譯成
二進制的資源文件
, 并打包到 APK 安裝包 中 ;
AAPT2 工作原理 :
打包編譯 :
assets 和 res/raw 目錄下的文件雖然不需要編譯 , 但是也會 被 AAPT2 工具 采集出來進行打包 ;
清單文件 , XML 資源文件 , 會被 AAPT2 工具編譯成一個 " *.ap_ " 二進制文件 , 在 debug 模式下 , 在 " app\build\intermediates\processed_res\debug\out " 目錄下生成 " resources-debug.ap_ " 文件 ;
res 目錄下的其它文件 , 根據(jù)文件類型不同 , 進行不同的處理 , 如壓縮 ;
該 " resources-debug.ap_ " 文件是一個壓縮文件 , 可以使用 7-Zip 工具打開 ;
生成資源 ID 并賦值給資源 :
AAPT2 會對除 Assets 之外的其它資源 , 都生成一個對應的資源 ID , 該 ID 是一個 int 類型常量 , 占 4 4 4 字節(jié) ;
這些生成的 ID 常量值 , 會存放在 resources.arsc 資源映射表 中 ,
參考 【Android 安裝包優(yōu)化】資源打包配置 ( resources.arsc 資源映射表 | 配置國際化資源 ) 一、resources.arsc 資源映射表 博客章節(jié) ;
二、resources.arsc 資源映射表 工作機制
特別注意 AAPT2 工具編譯生成的 resources.arsc 資源映射表 , Android 應用中查找資源 , 就是根據(jù)該 resources.arsc 資源映射表 查找資源 ;
resources.arsc 資源映射表 提供了
資源 ID
與
資源文件路徑
之間的映射表 , 可以根據(jù)資源 ID 查詢到對應的資源文件 ;
Android 應用中 , 調用 R.mipmap.ic_launcher 資源 , 假設 其對應的資源 ID 是 0x7f010000 , 對應的資源路徑是 res/mipmap/ic_launcher.png ;
首先通過 ID R.mipmap.ic_launcher 到 resources.arsc 資源映射表 中查找對應的文件名稱 , 然后找到對應的路徑 ;
Android 通過 AssetManager 獲取 assets 目錄中的資源 , 具體是通過文件名來查找資源的 ;
Android 通過 Resources 獲取 res 目錄下的資源 , 通過資源 ID 查找資源 ; 傳遞一個 ID 給 Resources , Resources 根據(jù)該 ID , 從 resources.arsc 資源映射表 中獲取具體的資源文件名稱 , 路徑 ;
三、參考資料
參考官方文檔 :
縮減、混淆處理和優(yōu)化應用 : https://developer.android.google.cn/studio/build/shrink-code
APK 構建流程 : https://developer.android.google.cn/studio/build
AAPT2 工具官方文檔 : https://developer.android.google.cn/studio/command-line/aapt2?hl=zh_cn
參考之前的博客資源 :
【Android 安全】DEX 加密 ( ProGuard 混淆 | -keepclassmembers 混淆效果 | -keepclasseswithmembernames 混淆效果 )
【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆后的報錯信息 | Proguard 混淆映射文件 mapping.txt )
【Android 安全】DEX 加密 ( Proguard 混淆 | 將混淆后的報錯信息轉為原始報錯信息 | retrace.bat 命令執(zhí)行目錄 | 暴露更少信息 )
【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆后的報錯信息 | Proguard 混淆映射文件 mapping.txt )
博客資源 :
GitHub 項目源碼 : https://github.com/han1202012/SVG
- :
Android 網(wǎng)絡
版權聲明:本文內容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內刪除侵權內容。