Android系統的啓動優化主要分爲三大部分:java
(1) Bootloader優化android
(2) Linux Kernel的剪裁與優化優化
(3) Android OS部分的剪裁與優化動畫
本文重點關注Android OS部分的啓動優化,值得關注的優化點分別介紹以下:ui
1. 精簡preload的classes和resourceserver
前面介紹過,因爲全部的Android應用程序都是從Zygote進程fork出來的,因此爲了共享一些class和resourse資源,Zygote進程初始化過程當中,會預先加載一些經常使用的java class和資源文件到進程的內存中,這樣其餘應用fork出來後就不用再次加載了,從而提升了應用的啓動速度。xml
這個過程是能夠精簡和優化的,你能夠減小一些classes和resource的加載,從而加快系統的啓動速度。本過程涉及到的文件:blog
frameworks/base/preload-classes進程
frameworks/base/core/res/res/values/arrays.xml圖片
2. 精簡native service和java service
前面介紹過,Android OS的啓動本質上就是啓動一系列的本地服務和Java服務,Android系統的全部功能都是經過這些服務間接提供的。
這些服務有不少並非必須啓動的,根據業務需求能夠去掉一些,本過程涉及到的文件:
system/core/rootdir/init.rc
frameworks/base/services/java/com/android/server/SystemServer.java
3. 精簡預裝的apk文件
系統啓動過程當中,會掃描系統指定目錄下的全部apk文件,這個過程也是很是耗時的,預裝的apk文件越少,系統啓動速度也就越快,所以,精簡預裝apk也是優化系統啓動速度最重要的手段之一。
要想減小預裝的apk文件,則須要分析系統的build文件,將不須要的apk編譯選項刪除掉,本過程涉及到的文件:
build/target/product/xxxx.mk
device/<company>/<product>/xxxx.mk
vendor/..../xxxx.mk
4. 減小內核的log打印級別
過多的log打印消息會顯著地增長系統啓動的時間,log打印級別有多處能夠調整,推薦修改init.rc文件中的loglevel來改變log打印級別。
system/core/rootdir/init.rc
5. 其餘優化手段
上面介紹的都是最經常使用的優化手段,其實還有不少其餘的方法,簡單列舉以下:
(1) 優化啓動動畫,下降幀率和圖片尺寸
(2) 精簡系統,減少boot.img文件大小,能夠顯著減小啓動過程當中加載和解壓boot.img的時間
(3) 預先建立一些目錄和文件,而不是在init過程當中建立
(4) 其餘……
6. 小結
這裏我給出一位國外的高手優化的結果做爲比較和參考(個人優化結果只提升了20%的啓動速度,遠沒有達到他的效果):