本文檔以SC826-CN-00(msm8953平台,Android 7)為例,說明如何解析system.img鏡像檔案。
某客戶回報,在不同編譯環境下生成的system.img檔案大小差異很大。A環境下大小為1.8G左右,B環境下大小為1.3G左右。
1.8G的system.img檔案燒錄後,系統運作比較卡頓。而1.3G的檔案則比較流暢。
為定位該問題,首先來找出兩個環境下system.img檔案有何差異。
這裡就需要對system.img進行解析,看看包含了哪些app和檔案。
可以在ubuntu環境下進行解壓,參考類似下面的連結:
https://www.jianshu.com/p/db70835d41c8
這裡我們用更直覺的window工具來解析。
百度搜尋"ROM助手"或"ROM工具",會出現不少相關工具。
我們這裡安裝一個ROM助手。
選擇"IMG“解包->system.img
解壓成功之後,會在 MoGu/imgupack 下生成解壓後的檔案夾。 數字最大的檔案夾就對應剛解壓的system.img。
把兩個system.img都解壓之後,對比差異。
右邊是對應1.8G大小的system.img,它包含的所有app都多出一個oat/arm64/*.odex的檔案。導緻整個鏡像檔案變大。
odex檔案是個什麼東西呢,百度了解下,據說能加快app啟動速度。但這裡不是我們關注的重點,先想辦法把*.odex檔案幹掉。
打開 device/qcom/msm8953_64/BoardConfig.mk,如下圖:
WITH_DEXPREORT 對應 odex的編譯選項。
我們簡單粗暴的跳過這部分判斷邏輯,直接設成 false。
删除system下的目标檔案:
rm -rf out/target/product/msm8953_64/system
重新編譯system,再檢視生成的鏡像檔案,大小已經減小了幾百M。
https://uploader.shimo.im/f/YBP9Ouk9a5U9RfME.patch?attname=BoardConfig.mk.patch&download
來源:馮耀宗部落格,歡迎分享本文!