android编译及添加apk到system.img

------------------------------添加apksystem.img-------------------------------

1.添加第三方apkpackagesystem.img

首先把整个apk的源码包copy/package/apps,要注意代码中的layout文件中的xml不能有中文字样,否则会提示编码errors,编译不能通过,可以用@string的方法。

然后,编辑一下文档即可。

/build/target/product/generic_no_telephony.mk

或者

/build/target/product/generic.mk

2.添加第三方apksystem.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-engsimulator,这两个选项是系统默认选项;

  查找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_LIBRARYandroid.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中定义的目标中筛选出TAGSTARGET_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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞_哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值