android系統映象裁剪定製---實戰篇
阿新 • • 發佈:2019-02-17
android系統裁剪優化一直是各個廠商定製產品的關鍵步驟,包括淺層次的去除不必要的apk(android apk裁剪定製 )和深層次的裁剪整個編譯系統和框架層. android作為開源系統,各個產品同質化嚴重,只有深層次的裁剪定製自己的系統,才能充分體現各自產品的特性,也是優化各自產品的關鍵步驟,此篇文章主要關注編譯系統和框架層的裁剪,拋磚引玉, 還有很多地方可以改進的地方,基於工作中時間限制,沒有徹徹底底的進行,此處只是工作的實戰篇,請拍磚引論,apk裁剪請看之前的單獨文章(android apk裁剪定製
).
思路:
android系統大而繁雜,對於不太熟悉android真個框架的朋友可以從真個思路入手:
1: 給予原生的程式碼映象,adb shell進入單板, 主要是檢視/system資料夾的內容,從這個資料夾入手,裁剪不必要的服務,庫檔案,apk,等等.
2: 瞭解真個編譯系統,從編譯過程入手,看隱含的可裁剪項,過程和思路很重要
具體裁剪內容:
1: build/target/product是編譯產品關鍵的mk檔案存放處,此處可以更加各個mk檔案編譯內容進行裁剪
base.mk檔案:去除不必要的lib庫檔案和bin檔案
core_minimal.mk: dmtracedump, Shell, HTMLViewer, screencap等工具和apk等
core.mk: libnfc_ndef, mms-common nfc功能庫檔案和mms簡訊功能等
embedded.mk: dumpstate, dumpsys
emulator.mk: camera.goldfish , camera.goldfish.jpeg , lights.goldfish , gps.goldfish等
full_base.mk: 去除不需要的庫和apk
full_base_telephony.mk: 去除apk和電話功能
generic_no_telephony.mk:去除apk和不必要的庫
languages_full.mk,locales_full.mk: 去除不需要的語言設定(可以去除res包的大小)
2:
external/icu4c/stubdata/icu-data-default.txt: 修改此檔案,去除編譯出的icu.dat檔案大小,去除不需要的語言,重新用指令碼生成想要的dat檔案即可
external/skia/Android.mk: 去除其中test的編譯
3:
frameworks/base/data/etc/platform.xml: 去除不需要的屬性
frameworks/base/data/fonts/Android.mk: 去除不需要的字型
frameworks/base/data/fonts/fallback_fonts.xml: 去除不需要的字型
frameworks/base/data/fonts/fonts.mk: 去除不需要的字型
4:
frameworks/base/data/sounds/AllAudio.mk: 去除不需要的聲音檔案(除了ui的保留,其他都可以去除)
frameworks/base/data/videos/VideoPackage1.mk: 去除不需要的視訊檔案
frameworks/native/data/etc/handheld_core_hardware.xml: 去除不需要的屬性
frameworks/native/data/etc/tablet_core_hardware.xml: 去除不需要的屬性
frameworks/base/preloaded-classes: 裁剪不必要的資源載入
5:
init.rc: 裁剪不需要的本地服務
system.prop: 裁剪不必要的屬性內容
以上這些內容可以使得映象大大的減少,包括參加apk內容,根據實踐,映象減少100M,當然還有可以裁剪的地方,請廣大同胞搞點玉出來,我也好學習學習
思路:
android系統大而繁雜,對於不太熟悉android真個框架的朋友可以從真個思路入手:
1: 給予原生的程式碼映象,adb shell進入單板, 主要是檢視/system資料夾的內容,從這個資料夾入手,裁剪不必要的服務,庫檔案,apk,等等.
2: 瞭解真個編譯系統,從編譯過程入手,看隱含的可裁剪項,過程和思路很重要
具體裁剪內容:
1: build/target/product是編譯產品關鍵的mk檔案存放處,此處可以更加各個mk檔案編譯內容進行裁剪
base.mk檔案:去除不必要的lib庫檔案和bin檔案
core_minimal.mk: dmtracedump, Shell, HTMLViewer, screencap等工具和apk等
core.mk: libnfc_ndef, mms-common nfc功能庫檔案和mms簡訊功能等
embedded.mk: dumpstate, dumpsys
emulator.mk: camera.goldfish , camera.goldfish.jpeg , lights.goldfish , gps.goldfish等
full_base.mk: 去除不需要的庫和apk
full_base_telephony.mk: 去除apk和電話功能
generic_no_telephony.mk:去除apk和不必要的庫
languages_full.mk,locales_full.mk: 去除不需要的語言設定(可以去除res包的大小)
2:
external/icu4c/stubdata/icu-data-default.txt: 修改此檔案,去除編譯出的icu.dat檔案大小,去除不需要的語言,重新用指令碼生成想要的dat檔案即可
external/skia/Android.mk: 去除其中test的編譯
3:
frameworks/base/data/etc/platform.xml: 去除不需要的屬性
frameworks/base/data/fonts/Android.mk: 去除不需要的字型
frameworks/base/data/fonts/fallback_fonts.xml: 去除不需要的字型
frameworks/base/data/fonts/fonts.mk: 去除不需要的字型
4:
frameworks/base/data/sounds/AllAudio.mk: 去除不需要的聲音檔案(除了ui的保留,其他都可以去除)
frameworks/base/data/videos/VideoPackage1.mk: 去除不需要的視訊檔案
frameworks/native/data/etc/handheld_core_hardware.xml: 去除不需要的屬性
frameworks/native/data/etc/tablet_core_hardware.xml: 去除不需要的屬性
frameworks/base/preloaded-classes: 裁剪不必要的資源載入
5:
init.rc: 裁剪不需要的本地服務
system.prop: 裁剪不必要的屬性內容
以上這些內容可以使得映象大大的減少,包括參加apk內容,根據實踐,映象減少100M,當然還有可以裁剪的地方,請廣大同胞搞點玉出來,我也好學習學習