Android编译

Android编译系统-中

2017-10-09  本文已影响0人  董成鹏

上一篇我们讲到了lunch菜单的一般格式:ProductName_DeviceName-BuildVarient,讲过了Product和Device,那么这次我们来说一下BuildVarient。

以aosp_flo-userdebug来说,当我们BuildVarient选择userdebug的时候,编译出来的Rom就有roo权限,但是为什么这样就会有root权限呢?
这里面有两方面的原因:

这里有一点要注意:在Android中,编译和安装是分开进行的,有一些模块会被编译,但是不会被安装到设备上,会被安装的模块,会先被编译,编译的结果在编译目录中,然后会把该模块从编译目录拷贝到安装目录中。也就是说会被安装的模块多了一个拷贝的过程。

具体到某一个模块,该模块是否会被安装是由LOCAL_MODULE_TAGS这个变量和BuildVarient共同决定的。
他们的关系如下

|LOCAL_MODULE_TAGS|BuildVarient|

|:-----|:-----|
|optional|待决定|
|user|user|
|eng|eng|
|debug|userdebug|

比如我们的BuildVarient是Userdebug,这意味着所有的模块的Android.mk中,LOCAL_MODULE_TAGS为debug的模块将会被编译并且被安装。而LOCAL_MODULE_TAGS为user和eng的模块将不会被安装。LOCAL_MODULE_TAGS为optional的模块是否会被安装取决于这个模块是否被添加到PRODUCT_PACKAGES这个变量中。

lunch的内容大致已经讲解完了,接下来就是执行make命令了。

我们看到在源码根目录的Makefile文件中只有一句话:


    include build/core/main.mk

这个main.mk就是我们编译过程的入口了。

在接下来讲解一下Android编译框架Make的流程。

上一篇 下一篇

猜你喜欢

热点阅读