一、Android编译步骤: 二、初始化编译环境--source build/envsetup.sh 在build/envsetup.sh中主要完成了三件事。
添加编译目标的代码如下: 三、选择编译目标--lunch 通过lunch选择编译目标,函数定义如下: 四、编译--make -j8 要make肯定有Makefile,Android根目录的Makefile只是简单地include进来了一个文件: 而build/core/main.mk就比较复杂了,以下是main.mk的结构图: ![]() 在main.mk中首先定义了默认编译目标并做版本检查,然后include config.mk。 在config.mk中定义了在Android.mk中编译目标时会用到的常量 然后include进来了/build/core/envsetup.sh,在envsetup.sh中定义了HOST_OS,OUT_DIR等环境变量,并通过include product_config.mk检索所有Product,并做有效性检查,然后根据lunch时选择的Product设置TARGET_DEVICE。 然后在envsetup.sh中根据TARGET_DEVICE查找BoardConfig.mk文件进行Board相关配置,查找KERNEL_HEADER,配置编译工具链。 在definitions.mk中定义了all_makefiles_under等用来检索文件的函数。 根据TARGET_BUILD_VARIANT设置ro.secure等系统属性,设定tags_to_install等变量。 接下来通过 找到所有子目录下的Android.mk文件并include进来,这样在Android.mk定义的LOCAL_PACKAGE_NAME与include $(BUILD_PACKAGE)就可以将相应的Android.mk中定义的目标包含进编译模块中,在config.mk中有如下定义: 而package.mk又包含base_rules.mk将LOCAL_MODULE添加到ALL_MODULES中。 post_clean.mk是跟Resource Overlay相关,使们们不需要修改framework中原来的资源文件就可以定义framework-res.apk中的资源。 接下来include build/core/Makefile文件,定义bootimage,systemimage等信赖目标,然后通过make编译droid(默认)目标就可以编译系统了。 Android采用检索所有子目录中的Android.mk将所有要编译的模块收集起来的方式编译系统,而不是进入到每个子目录执行make,这样就方便了我们添加自己的模块。 |
android 编译系统流程简介
最新推荐文章于 2021-06-28 13:35:28 发布