Android的源码的多产品分支

来源:互联网 发布:中国芯片产业 知乎 编辑:程序博客网 时间:2024/05/18 21:10

我们在日常的项目开发过程中,经常出现同一份源码,编译不同的产品和而且每个产品功能差别不大,只是在android的framework层修改

一些地方。下面简单的介绍一下,多个产品分支的做法。

1.在创建不同的产品目录

例如:在device/xxx/xxx 产品目录。

配置该目录下的Android.mk AndroidProducet.mk。

2.LINK或者COPY原则(涉及以上第一点的目录结构增加对于内容的,请遵循2个凡是)
凡是2个项目一致的内容使用link. 凡是2个项目不一致的内容使用copy。
建议操作:
使用MI/tools/工具箱下提供的lns脚步,对新增的每个文件均采用单独link的模式,
如果遇到因为项目不同而需要单独区分的情况,请取消link为copy文件接口。
copy的情况下请特别注意,升级补丁需要照顾到多个项目。
  
3.其他一些需要配置多项目的内容涉及到的修改点
3.1 项目的宏定义文件,包含makefile,cpp,h,java(没有宏,使用静态class的形式)
makefile,cpp,h中的宏定义处
mediatek/config/$(project_name)/ProjectConfig.mk中
AUTO_ADD_GLOBAL_DEFINE_BY_NAME
AUTO_ADD_GLOBAL_DEFINE_BY_VALUE
AUTO_ADD_GLOBAL_DEFINE_BY_NAME_VALUE
在以上三个变量中增加对于的宏定义,分别代表宏是否定义,以及宏定义是否带有字符串值;定义
在##MI Support##
之后增加的譬如MTK_PRO_PROJECT_MI= yes主要使用makefile文件中,这里会有一个脚本来处理,
简单的说,就是临时export到环境变量中去,让所有的makefile文件不需要include就可以使用。
java代码区分静态的增加;
MI/$(project_name)/frameworks/featureoption/java/com/MI/MIfeatureoption/MIFeatureOption.java
这个会编译到frameworks中,当作全局变量供平台使用,用来在java代码中区分。
简单的说:
C代码中:MTK_PRO_PROJECT_MI_3 / MTK_PRO_PROJECT_MI_4.
JAVA代码中:由于JAVA中无法使用宏,大家可使用 MIFeatureOption.java 中定义的:MTK_PRO_PRODUCT_NAME_STR 字符串来区分。
3.2----如果需要区分多项目的APN文件以及AGPS文件还需要修改以下2处
首先需要在vendor/mediatek/etc增加多个项目的目录配置
其次需要build/target/product/$(project_name).mk中修改
原先的
PRODUCT_COPY_FILES += vendor/mediatek/etc/apns-conf.xml:system/etc/apns-conf.xml
PRODUCT_COPY_FILES += vendor/mediatek/etc/spn-conf.xml:system/etc/spn-conf.xml \
ifeq ($(MTK_AGPS_APP),yes)
PRODUCT_COPY_FILES += vendor/mediatek/etc/agps_profiles_conf.xml:system/etc/agps_profiles_conf.xml
endif
修改为
PRODUCT_COPY_FILES += vendor/mediatek/etc/$(MTK_PROJECT)/apns-conf.xml:system/etc/apns-conf.xml
PRODUCT_COPY_FILES += vendor/mediatek/etc/$(MTK_PROJECT)/spn-conf.xml:system/etc/spn-conf.xml \
ifeq ($(MTK_AGPS_APP),yes)
PRODUCT_COPY_FILES += vendor/mediatek/etc/$(MTK_PROJECT)/agps_profiles_conf.xml:system/etc/agps_profiles_conf.xml
endif
3.3 多项目蓝牙名称修改点,通过宏控制的形式来区分不同项目的蓝牙名称
frameworks/base/core/jni/android_bluetooth_common.h
具体修改为#define BTMTK_ANDROID_DEFAULT_LOCAL_NAME "ANDROID BT"配置为多个项目的。
3.4 多项目的USB名称修改点,通过宏控制的形式来区分不同项目的USB名称
mediatek/custom/mt6573/kernel/usb/src/mtk_usb_custom.h
具体修改为
#define VENDOR_ID      0x2006 /*MI  USB vendor id  */
#define MANUFACTURER_STRING "MI"
#define PRODUCT_STRING      "MI"
#define USB_ETH_VENDORID     0
#define USB_ETH_VENDORDESCR  "MI"
#define USB_MS_VENDOR        "MI"
#define USB_MS_PRODUCT       "MI MS"
3.5多项目的factory mode名称修改点,通过宏控制的形式来区分不同项目的USB名称
mediatek\source\factory\src\factory.c
具体修改为
print_verinfo(info, &len,  "SW Ver.     ", val);
3.6 多项目配置的uboot启动页面修改
---------------------------------------
首先需要增加目录
mediatek/custom/common/uboot/logo/$(project_name)
---------------------------------------
mediatek/source/external/boot_logo_updater/Android.mk中的修改点
原先的
LOCAL_SRC_FILES := custom/$(LOCAL_MODULE)
修改之后的
LOCAL_SRC_FILES := custom/$(MTK_PROJECT)/$(LOCAL_MODULE)
--------------------------------------
mediatek/build/android/permfix.sh中修改点
原先的
mediatek/custom/common/uboot/logo/update
mediatek/custom/common/uboot/logo/tool/*
mediatek/custom/common/uboot/logo/boot_logo
修改之后的
mediatek/custom/common/uboot/logo/${MTK_PROJECT}/update
mediatek/custom/common/uboot/logo/${MTK_PROJECT}/tool/*
mediatek/custom/common/uboot/logo/${MTK_PROJECT}/boot_logo
--------------------------------------
bootable/bootloader/uboot/build.sh中修改点
原先的:
UBOOT_LOGO_PATH="${CUR_DIR}/${MTK_PATH_CUSTOM}/logo"
修改为:
UBOOT_LOGO_PATH="${CUR_DIR}/${MTK_PATH_CUSTOM}/logo/${MTK_PROJECT}"
--------------------------------------
3.7 多项目的型号,版本,以及第三方APK等信息的配置,均集中在MI目录下对应的工程目录
MI/$(project_name)/config/ProjectConfig.mk中的
PRODUCT_PACKAGE_OVERLAYS多项目不同资源的配置
MTK_PRO_DISPLAY_ID 版本号
MTK_PRO_PRODUCT_MODEL 型号
PRODUCT_LOCALES 语言分辨率
$(call inherit-product, vendor/google/products/gms.mk google服务以及市场等
PRODUCT_PACKAGES 自开发源码的apk应用
注意:project_name为项目编译输入名称,如mi等。

原创粉丝点击