当先锋百科网

首页 1 2 3 4 5 6 7

有人问我这样一个问题,就是高通或者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到编译流程中。

高通打包代码分析

分析完mtk,再看高通,在build或者device搜索会发现一无所获,是高通更改了编译流程?其实并不是
vendor/qcom/proprietary/common/config/device-vendor.mk

#Qc extended functionality of android telephony
QTI_TELEPHONY_FWK := qti-telephony-common
QTI_TELEPHONY_FWK += QtiTelephonyServicelibrary
...
PRODUCT_PACKAGES += $(QTI_TELEPHONY_FWK)
高通维护自己模块的脚本只有一处,修改起来比较方便。