android 系統開發入門(一) 啓動及編譯過程介紹

1)android啓動階段通常是3個階段:
第一個階段未uboot,即上電開機到驅動加載前,通常看到的現象爲進入開機logo前的階段;
第二個界面爲kernel階段,即驅動加載階段,通常看到的現象開機動畫顯示的前一階段;
第三個階段爲android啓動階段,即由孵化器ZygoteInit啓動系統各個服務,系統各個服務啓動完成後會走systemready回調,之後啓動systemui服務,之後會遍歷所有home屬性的activity,然後選擇進入launcher,當所有初始化做完之後會發出開機完成boot_complete廣播(詳細的開機過程網上一搜一大把)
2)與1對應起來,系統編譯的流程也是如此,先編譯mboot,然後再編譯kernel,然後再編譯android,到最後將所有生成的文件打包到固件裏面(即bin文件),編譯android時原生的步驟是
-- source build/envsetup.sh 讀取envsetup.sh 中的函數,並執行腳本,配置環境變量等
-- lunch 選擇平臺編譯選項,一般分爲user,userdebug,eng,常規的流程應該是給客戶的最終版本是user版本,開發版本是userdebug或者eng,開發版本一般都是可以自動打開adb和機器可以root,remount的,user版本則相反,具體詳細區別百度一搜一大把
-- make(全編譯)或mm(模塊編譯)
不同廠家有的會做客製化,修改部分的指令,但是基本原理都是一樣的
3)make過程
原生的編譯安卓指令是make,入口文件是源碼樹根目錄下名稱爲Makefile的文件,當在源代碼根目錄上調用 make 命令時,make 命令首先將讀取該文件。Makefile 文件的內容只有一行:include build/core/main.mk。作用僅爲包含 build/core/main.mk文件。在 main.mk 文件中又會去包含其他的文件,其他文件中又會包含更多的文件,這樣就引入了整個 Build 系統
4)當全編譯完一次之後,就可以進行各個模塊的單元調試,比如framework或者package或者device下面需要編譯apk或者jar的地方都能在可以執行mm的地方都會有個mk文件,mm就是通過mk文件去生效的
mm 編譯當前目錄下的模塊,單獨編譯某個模塊,需要cd到相應的含有mk(mk就是makefile的縮寫)文件的目錄下執行,如packages/apps/Settings$ mm
mmm 在跟目錄下,執行某個文件夾下的make文件單獨編譯某個模塊,可以在跟目錄直接執行,後面跟需要編譯的模塊路徑,如mmm packages/apps/Settings/
mm -B 強制編譯所有的目標文件,mm爲增量編譯即只編譯發生變化的目標文件
mma 將相關聯的模塊全部關聯進來編譯,比如有的時候全編譯完後,再單獨編譯完Launcher3或者Settings時會提示缺少某個模塊導致編譯失敗,此時可以用mma編譯執行成功

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章