一、编译环境
PC:Ubuntu 18.04 64bit虚拟机,make版本:3.81,jdk版本:1.6.0_34
板端:RIotBoard i.MX 6Solo 、ARM Cortex-A9架构、单核1GHz主频 、1G RAM、4GROM、安卓版本4.4.2
二、. /build/envsetup.sh 分析
这个脚本主要是加载编译命令,加载平台信息。在编译之前,虚拟机或者安卓的源码是没有对应的编译命令(如:lunch、mmm等),他是依托于build目录下的envsetup这个shell脚本,通过这个脚本加载编译命令,之后通过这些命令来加载平台的信息,所以对于编译源码在环境搭建好了的情况下(以及搭建好了jdk以及将编译链添加到了当前用户的环境内),首先应是source这个脚本。在执行envsetup.sh这个脚本的时候会调用add_lunch_combo去添加一些默认的lunch分支选项,同是也会去包含device下的一些脚本,这些脚本也是使用的这个函数去包含一些自定义板级的lunch选项。lunch命令的作用在envsetup.sh脚本中有一个lunch函数,这个函数主要选择不同的lunch分支,首先是判断命令lunch有无传入参数,有则进行下面的操作记录选择的分支,并且做一系列的初始化的工作;没有则会打印出当前已经添加的分支。
如图2-1所示,在envsetup.sh中添加一些默认的分支:
![](https://i-blog.csdnimg.cn/blog_migrate/e09fd2450bb64eb52b4d231f588ed8be.png)
如图2-2所示,在source ./build/envsetup时,会包含device下的一些脚本文件:
![](https://i-blog.csdnimg.cn/blog_migrate/868ef5cf88f0b1542d8e3135cc059ee4.png)
如图2-3所示,对 脚本进行查看,还是使用add_lunch_combo函数去添加lunch的分支:
![](https://i-blog.csdnimg.cn/blog_migrate/f104326f8c7075fcfec19575559152b1.png)
lunch对应的分支后,会出现如图2-4所示的打印,其中包含了当板子的一些信息以及主机的一些信息:
![](https://i-blog.csdnimg.cn/blog_migrate/359ec4ba3ae44056afdce9c6f0b63be7.png)
查看当前的环境变量后发现在lunch后也添加了安卓编译所需要的一些环境,部分环境如图2-5所示,其中一些信息如ANDROID_BUILD_TOP表示安卓的源码目录,ANDROID_DEV_SCRIPTS主要部署安卓设备配置的脚本,ANDROID_EABI_TOOLCHAIN主要配置工具链,还有一些生成文件的路径,这里不多赘述。设置到现在就可以开始编译安卓源码了,使用make便可以开始编译。
![](https://i-blog.csdnimg.cn/blog_migrate/939576ad87d327973fbf0585d5e5fad7.png)
三、添加自定义lunch分支
为何要添加分支?安卓源码十分庞大,如果一个客户或一个硬件版本一个sdk的话这样占用很大空间,而且管理起来十分麻烦,当主线版本有了更新后需要挨个去同步每一个不同的版本,使得维护的成本更高。如图3-1所示,当存在不同客户与不同的板级硬件版本时我们可以增加不同的lunch分支来实现管理和编译不同的代码,这样便于维护和管理。
![](https://i-blog.csdnimg.cn/blog_migrate/88da8f08bfd69fb564b02922f6838baa.png)
四、综述
经过