Android系統的啟動優化主要分為三大部分:
(1) Bootloader優化
(2) Linux Kernel的剪裁與優化
(3) Android OS部分的剪裁與優化
本文重點關注Android OS部分的啟動優化,值得關注的優化點分別介紹如下:
1. 精簡preload的classes和resource
前面介紹過,由於所有的Android應用程序都是從Zygote進程fork出來的,所以為了共享一些class和resourse資源,Zygote進程初始化過程中,會預先加載一些常用的java class和資源文件到進程的內存中,這樣其他應用fork出來后就不用再次加載了,從而提高了應用的啟動速度。
這個過程是可以精簡和優化的,你可以減少一些classes和resource的加載,從而加快系統的啟動速度。本過程涉及到的文件:
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%的啟動速度,遠沒有達到他的效果):

轉:http://ticktick.blog.51cto.com/823160/1664754
