編譯:
1.source build/envsetup.sh 腳本
設置編譯環(huán)境,加載一些編譯方法例如 m鸦采、mm荸百、mmm、lunch等
2.lunch 指定要編譯的那一套源碼
3.make -j8 開始編譯
開始編譯從源碼根目錄的makefile文件開始剩拢,makefile中引用了 include build/core/main.mk文件
在main.mk文件中引入了大量的mk文件线得,引用了源碼的模塊mk,這是系統(tǒng)編譯的基石徐伐,其他模塊的mk配置都是在這個基礎上衍生的贯钩。
4.android系統(tǒng)編譯的mk大致分為三種,一種就是上述的編譯系統(tǒng)的模塊办素,第二種就是各大廠商配置的一般在devices目錄下(之前是在vendor目錄下)對于不同廠商的模塊的編譯主要是從AndroidProduct.mk文件開始的角雷,因為AndroidProduct.mk文件是在main.mk文件下進行全局搜索的。所以我們在配置好我們自己廠商的文件夾之后就要加一個AndroidProduct.mk文件性穿,在這個文件中配置我們自己源碼的mk文件配置勺三,這是各大廠商源碼模塊的入口。
第三種編譯就是每個單獨的項目的編譯需曾,每個項目都有一個mk文件等待系統(tǒng)加載吗坚,文件主要以Android.mk命名祈远,因為在android開始編譯的時候回去搜索所有的一Android.mk命名的mk文件并include到編譯流程中。
一個編譯配置問題:
在android系統(tǒng)源碼開發(fā)中商源,在一個模塊中添加新的模塊车份,比如在vendor下面添加一個新的項目類型的模塊,如 通信類型牡彻、多媒體類型扫沼、其他類型等。每種類型下面肯定有多個apk/module組成庄吼,為了降低代碼耦合充甚,讓不同類型的模塊,在項目編譯的時候配置獨立的.mk文件霸褒。每種類型都有一個總的mk文件管理當前類型下的所有mk文件伴找。注意:總的mk文件名字不能用 Android.mk,因為Android.mk系統(tǒng)在編譯的時候會自動搜索所有目錄下的Android.mk废菱,總的mk文件里面由于用到了 PRODUCT_PACKAGES += XXX 這種是只能讀的類型技矮,所以在編譯的時候就會報錯。
當配置好所有目錄下的mk時候殊轴,這個總的mk 在系統(tǒng)編譯的時候衰倦,并不能直接被編譯到系統(tǒng)中。必須要把當前mk配置到旁理,系統(tǒng)編譯流程中的某個mk文件中去例如:
在build/make/tagart/product/config.mk中加入 include $(TOPDIR)vendor/thundersoft/t/preTest.mk 引用配置的總的mk樊零。總的mk中在去引用單個apk/module 中的mk文件孽文,以 PRODUCT_PACKAGES += XXXNAME 加載驻襟。