关闭

android编译及添加apk到system.img

标签: android编译
1070人阅读 评论(0) 收藏 举报
分类:

------------------------------添加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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:22227次
    • 积分:525
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:76篇
    • 译文:3篇
    • 评论:1条
    最新评论