文档管理中心

【原创】安卓关键编译流程梳理



作者:HW-LXL

摘要:本文从安卓编译的关键流程来分析安卓编译系统

目录
  • 关键动作1:envsetup.sh 和 choosecombo

  • 关键动作2:产品参数读取

  • 关键动作3:模块配置表生成流程

[显示全部]

之前发过一篇文章,主要从架构,和文件间的关系分析了安卓编译系统。

本文则从另一个角度,即从安卓编译的关键流程来分析,相信对大家理解安卓编译系统会有帮助。

首先看一下安卓编译的总流程。

该总流程,描述了我们敲入编译脚本,到编译结束的关键动作。 最主要的关键动作有三个,包括'envsetup.sh 和 choosecombo'流程,'产品参数读取'流程和“模块配置表生成流程”。简单来说,安卓编译系统会载入环境参数,读取产品参数,并生成产品参数中所规定的模块的编译动作,并将模块注册到模块注册表中,被总编译目标所依赖。

通过这样的流程,即可根据产品不同,编译出不同的镜像出来。

image.png

关键动作1:envsetup.sh 和 choosecombo

在真正执行编译操作时,一定要先执行envsetup.sh和choosecombo来初始化编译环境,但是在执行过程中,它们到底具体做出了什么操作呢?请看下图。

从图中可以看到,主要的动作为根据用户输入,结合对AndroidProduct.mk的解析,生成一些非常重要的环境参数,并最后调用printconfig将它们打印出来。

这部分的动作主要是使用shell脚本实现的,其目的为配置环境参数。为后面的编译操作做准备。

image.png

关键动作2:产品参数读取


编译参数配置完了,现在进入真正的编译过程中。首先include进来的就是main.mk,它可以说是一切编译行为的开始和结束。

编译过程中,最开始执行的动作,就是根据环境变量,进一步获得特有的产品配置,具体来说,就是获得重要的产品配置信息变量PRODUCTS变量。

PRODUCTS变量类似一个结构体,显示了其解析的mk文件的结果,其中有非常重要的变量,如PRODUCT_NAME和PRODUCT_COPY_FILES等等。

image.png

关键动作3:模块配置表生成流程

产品的信息载入好了之后,要找到产品定义的各个模块的安装方法。

此时需要读取产品的Android.mk,并将它们载入到模块配置表ALL_MODULES,ALL_MODULES中定义的模块,经过一次筛选,最终将载入安装模块列表modules_to_install,该模块列表将被droid依赖,在编译的时候会进行编译和安装。

点赞
收藏
回复
分享
举报
浏览956 编辑于2019-10-15 03:40未知归属地
全部评论
最多点赞
最新发布
最早发布
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。