------------------------------添加apk到system.img中-------------------------------
1.添加第三方apk的package到system.img
首先把整个apk的源码包copy到/package/apps,要注意代码中的layout文件中的xml不能有中文字样,否则会提示编码errors,编译不能通过,可以用@string的方法。
然后,编辑一下文档即可。
/build/target/product/generic_no_telephony.mk
或者
/build/target/product/generic.mk
2.添加第三方apk到system.img
其实就是一个copy操作,把apk从某一个路径(如:packages/apk/ideal_apk路径下)copy到/system/app或者data/app的路径下面。然后系统编译到最后,再打包成system.img。
修改方法:
到相应机器的devices目录下找到一个有PRODUCT_COPY_FILES字样的mk文件,添加自己的apk路径进去即可。
3.更改android系统默认语言
4.在/build/target/product目录,找到full_base.mk或者full.mk文件,添加以下语句:
中文:PRODUCT_LOCALES:=zh_CN
英文:PRODUCT_LOCALES:=en_US
--------------------------------android编译---------------------------------------------
>source build/envsetup.sh 加载命令
该命令是用来将envsetup.sh里的所有命令加载到环境变量中去
作用:加载了编译命令使用到的函数命令,如:help,lunch,m,mm,mmm等;
添加了两个编译选项:generic-eng和simulator,这两个选项是系统默认选项;
查找vendor/<-厂商名称>/和vendor/<厂商目录>/build/目录下的vendrosetup.sh,如果存在的话,加载执行它,添加厂商自己定义的编译选项
>lunch 选择平台编译项,它会列出一个选择编译选项菜单
该命令是用户选择编译项,来定义product和编译过程中用到的全局变量。Eng是产品的编译类型。
eng:工程机
user:最终用户机
Userdebug:调试测试机
Tests:测试机
除了前两个,后两个一般不能交给最终用户
LOCAL_MODULE_TAGS,这个TAGS就是用来指定,当前的目标编译完了属于哪个分类里。
>make 执行编译
Make
执行make命令的结果就是执行当前目录下的Makefile文件。
------------------------------------------------Build/core/main.mk-------------------------------------
1.config.mk:
定义了大量的编译时用到的变量(CLEAR_VARS,BUILD_SHARED_LIBRARY等android.mk用到的变量);
检查:TARGET_PRODUCT,TARGET_BUILD_VARIANT;
获得当前的编译主机系统,决定编译环境;
定义编译结果的out输出目录。
检查必要的Board的配置信息 TARGET_CPU_ABI
定义编译时用的一些HOST主机工具及编译参数
--------------------------------包含product_config.mk:
------------包含product.mk:定义了一些和产品信息相关的处理函数;
------------包含device.mk:定义了一些和设备信息有关的处理函数;
-------------查找产品目录下的androidProducts.mk文件;
-------------从AndroidProduct.mk中查找待编译的产品配置文件;
-------------根据产品配置文件,找到其中定义的设备名:PRODUCT_DEVICE,导出产品配 置文件里声明的其它的产品属性变量
2.包含cleanbuild.mk:定义删除比那一结果的函数和目标如:dataclean,installclean
3.包含definition.mk:定义了编译过程中用到的大量的变量和宏。
4.检查TARGET_BUILD_VARIANT变量有效性。
5.根据make参数决定编译目标:SDK_ONLY(指定编译目录为SDK相关目录)、FULL_BUILD(指定编译目录从TOP顶级目录开始)。
6.从编译目录下查找所有子目录下的Android.mk并加载它。
7.从Android.mk中定义的目标中筛选出TAGS为TARGET_BUILD_VARIANT的目标
8.包含Makefile
9.定义一些目标:files,ramdisk,systemtarball,userdataimage
10.定义目标及其编译依赖冠以:droidcore,droid,sdk,clean(droid调用dist-for-goals函数开始编译)
所有的makefile都是通过build/core/main.mk这个文件组织在一起的。
--------------------------------------Build/core/config.mk------------------------------
CLEAR_VARS:用来清除之前定义的换几个变量;
BUILD_SHARED_LIBRARY:用来指定编译动态库过程;
--------------------------------------envsetup.mk-------------------------------------------------
该文件主要包含了product_config.mk文件,然后指定编译时要输出的所有文件的OUT目录。
总结:
Build/core/main.mk包含了config.mk,他主要定义了编译全部代码的依赖关系
Config.mk:定义了大量的编译脚本命令,编译时用到的环境变量,引入了envsetup.mk问价,
加载board相关配置文件。
Product_config.mk定义了vendor目录下Product相关配置文件解析脚本,读取androidProduct.mk生成TARGET_DEVICE变量
Product product config针对当前的芯片配置定义你将要生产产品的个性配置,主要是指APK方面的配置,那些APK会包含在哪个product中,哪些APK在当前product中是不提供的。Cdcd
Board board config主要涉及到硬件芯片的配置
Combo build flags config