AndroidL 源码编译 预置GMS包与第三方应用 系统属性管理

一,android整体编译
1.减压源码到指定的目录
2.安装JDK
3.执行以下脚本进行编译
#!/bin/bash
# 导入jdk环境变量
JAVA_HOME=/home/xxx/xxx/xxx/java-1.7.0-openjdk-1.7.0.9.x86_64
JRE_HOME=/home/xxx/xxx/xxx/java-1.7.0-openjdk-1.7.0.9.x86_64/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
# 导入编译环境变量
source build/envsetup.sh
#lunch n           # 采用第n种编译方法编译,输入lunch可以看到所有的编译方式
#make -j16      # 编译整个流

#编译短信模块, mmm xxx/xxx为编译当xxx/xxx目录下的Android.mk文件中定义的模块,它所依赖的模块不编译
#mmm ./packages/apps/Mms
#cd ./packages/apps/Mms 
#mm 这两句是编译./packages/apps/Mms目录下以及它子目录下所有的Android.mk文件中定义的模块,它门所依赖的模块不编译

#make otapackage    
#编译OTA包, make xxx为编译xxx模块以及它所依赖的所有模块

# 编译OTA差分包命令,从xxx_27.zip到xxx_28.zip的查分包27to28.zip
#./build/tools/releasetools/ota_from_target_files -v -i ./out/target/product/XXXXX/obj/PACKAGING/xxx_27.zip ./out/target/product/XXXXX/obj/PACKAGING/xxx_28.zip ./27to28.zip;


二,预置gms包
1.将gms包减压到vendor目录下
2.在build/target/product/generic_no_telephony.mk文件中添加以下内容
......
$(call inherit-product, $(SRC_TARGET_DIR)/product/core.mk)
+ $(call inherit-product, vendor/google/products/gms.mk) # 添加这一句
......
3.在build/tools/buildinfo.sh最后加入以下内容,过GMS认证时需将后面的android-google改为公司的client-ID名称
......
+ echo "ro.com.google.clientidbase.am=android-google"
+ echo "ro.com.google.clientidbase.gmm=android-google"
+ echo "ro.com.google.clientidbase.ms=android-google"
+ echo "ro.com.google.clientidbase.yt=android-google"
+ echo "ro.com.google.clientidbase=android-google"

echo "# end build properties"
......
4.在vendor/google/products/gms.mk中进行删减要预置的应用


三,预置第三方应用以及库文件放置的位置
1.在vendor下创建一个文件夹Customers_Package,
再在这个文件夹中创建一个thirdapps文件用于放置第三方应用,
创建一个systemfile用于放置不需要编译即可放置到system文件下的内容
2.在Customers_Package下创建一个文件customers_package.mk,并添加以下内容,用于指定要编译的第三方应用模块
PRODUCT_PACKAGES += \
        
3,在systemfile中创建system文件,并在当前目录下创建copyfiles.mk文件并添加以下内容,用于拷贝system下面文件到system分区对应的位置
copy_files := $(subst $(LOCAL_PATH)/,, \
$(filter-out %.mk,\
$(patsubst ./%,%, \
$(shell find $(LOCAL_PATH) -type f -name "*") \
)))

PRODUCT_COPY_FILES += $(foreach file,$(copy_files),\
$(LOCAL_PATH)/$(file):$(file))

4,将以上两个mk文件加到build/target/product/generic_no_telephony.mk中
......
+ $(call inherit-product-if-exists, vendor/Customers_Package/system_file/copyfiles.mk)
$(call inherit-product, $(SRC_TARGET_DIR)/product/core.mk)
+ $(call inherit-product, vendor/Customers_Package/customers_package.mk)
......


四,统一修改各种系统属性
1.在build/core/下创建build_xxx.mk文件,定义各种需要修改的系统属性别名,如下所示
# ro.build.display.id 
export BUILD_DISPLAY_ID=2015_11_30_build
export SMT_VERSION=false
# persist.sys.language
export SYS_LANGUAGE=en
......
2.在build/core/version_defaults.mk中添加以下内容进行编译build_xxx.mk文件
......
INTERNAL_BUILD_ID_MAKEFILE := $(wildcard $(BUILD_SYSTEM)/build_id.mk)
ifneq "" "$(INTERNAL_BUILD_ID_MAKEFILE)"
include $(INTERNAL_BUILD_ID_MAKEFILE)
endif

+ INTERNAL_BUILD_MAKEFILE := $(wildcard $(BUILD_SYSTEM)/build_xxx.mk)
+ ifneq "" "$(INTERNAL_BUILD_MAKEFILE)"
+  include $(INTERNAL_BUILD_MAKEFILE)
+ endif
......
3.在build/tools/buildinfo.sh中进行使用build_xxx.mk中定义的各种值,其他的文件中也可使用,buildinfo.sh中使用的较多
......
echo "ro.build.display.id=$BUILD_DISPLAY_ID"
echo "ro.product.model=$PRODUCT_MODEL"
echo "ro.product.brand=$PRODUCT_BRAND"
echo "ro.product.name=$PRODUCT_NAME"
echo "ro.product.device=$PRODUCT_DEVICE"
echo "ro.product.board=$TARGET_BOOTLOADER_BOARD_NAME"
......

你可能感兴趣的:(AndroidL 源码编译 预置GMS包与第三方应用 系统属性管理)