有人問我這樣一個問題,就是高通或者mtk是如何將自己的內容打包到system.img中的。接觸編譯比較少的,所以對這個還是陌生的,不過目前android的相關資料太詳實了,自己看文章和追蹤代碼過程記錄如下。文章首推“老羅Android之旅”,其中有4篇文章講解編譯系統的,這個是強烈推薦大家看的。
簡略的原理如下:各個模塊下都會有Android.mk文件,這個是編譯腳本的片段。在一次Android系統的完整編譯中,編譯腳本會搜索所有子目錄下的Android.mk,然後組合成一個完整的編譯腳本,這樣避免掉了文件間編譯依賴衝突或循環的問題。要想將一個模塊編譯到system.img中,一定要有腳本將模塊加入到PRODUCT_PACKAGES變量中,這個是唯一的條件。PRODUCT_PACKAGES不只是app哦,framework或者bin等都是要加入到其中的。
mtk打包代碼分析
build/target/product/telephony.mk
PRODUCT_PACKAGES += \
CarrierConfig \
Dialer \
CallLogBackup \
rild
device/mediatek/common/device.mk
# MediaTek framework base modules
PRODUCT_PACKAGES += \
mediatek-common \
mediatek-framework \
CustomPropInterface \
mediatek-telephony-common
build目錄下有諸多通用的腳本文件,不過在device的mediatek目錄下又有個common文件夾,有點重複...,除了這兩處,在項目的腳本里也可以配置。或者新寫個文件,include到編譯流程中。
高通打包代碼分析
#Qc extended functionality of android telephony
QTI_TELEPHONY_FWK := qti-telephony-common
QTI_TELEPHONY_FWK += QtiTelephonyServicelibrary
...
PRODUCT_PACKAGES += $(QTI_TELEPHONY_FWK)
高通維護自己模塊的腳本只有一處,修改起來比較方便。