AndroidL 源码编译 预置GMS包与第三方应用 系统属性管理
2015-11-27 11:44
471 查看
一,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"
......
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"
......
相关文章推荐
- Android PickerView的实现
- Android自定义通知布局Notification,点击Notification导航切换回原Activity
- Android进阶之广播
- Android通知Notification
- Android 中 EventBus 的使用(2):缓存事件
- Android通知Notification
- Android 中 EventBus 的使用(1):为什么要使用 EventBus
- 九宫格排按钮,内容不被拉伸(TableLayout、layout_weight、layout_gravity和gravity)
- Android测试教程8--测试我们的Activity-第1篇
- Android Studio logcat 设置 缓存大小 ,增加logcat条数
- android颜色表
- android权限集合
- Android——遍历分别设置布局中不同控件的样式
- Android之RadioButton控件使用
- Android 欢迎引导页的魅力
- Ubuntu进入recovery单用户模式获得读写权限
- 开源中国 OsChina Android 客户端源码分析(13)Fragment学习
- EditText无法弹出软键盘
- Android ImageView scaleType
- Android 主页面顶部栏的通知Notification ,可以自定义通知消息栏的风格,并且点击通知栏进人本程序。