Android系统6.0源代码编译过程分析(1)

1 绪论

经过一段时间,学习Android系统源代码,参考一些大佬的资料,逐步想出了自己的一下想法,并记录下来,故此写下此博客。首先从系统编译过程分析开始。

2 编译环境搭建准备工作

(1) UbuntuKylin 16.04 LTS 链接内容
(2) Android 6.0_r1
(3) Open JDK 7

3 系统源码下载

(1) 安装git

安装好之后配置用户名和邮箱地址

$ sudo apt-get install git
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

(2) 安装curl

$ sudo apt-get install curl

(3) 下载repo

repo是google为方便管理android源码编写的一系列python脚本。

$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

(4) 同步代码

创建存放源码的文件夹

$ mkdir android-6.0.1
$ cd android-6.0.1

使用repo init指定要同步的代码版本,目前所有android源码的版本:链接内容

$ repo init -u https://android.googlesource.com/platform/manifest -b android-6.0.1_r1

这里使用google的镜像服务器上同步代码。
最后使用下面的命令下载源码。因为源码比较大,所以下载时间会很长(根据自己电脑的配置)。

$ repo sync

4 编译源码

(1) 安装open JDK7

Android 6.0只能使用OpenJDK7才能编译成功,具体原因读者查资料,这里不在解说。

sudo add-apt-repository ppa:openjdk-r/ppa 
sudo apt-get update
sudo apt-get install openjdk-7-jdk 

打开/etc/profile文件,配置OpenJDK:

sudo gedit /etc/profile

在末尾追加下面代码:

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre 
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib 
export PATH=${JAVA_HOME}/bin:$PATH

修改完/etc/profile文件需要重启才能生效,但在不重启的情况下,使用下面命令可以使当前bash环境生效:

source /etc/profile

检查OpenJDK:

java -version

正确配置如下图所示:
这里写图片描述

(2) 修改源码

修改源码/android-6.0.1/art/build/Android.common_build.mk文件,定位到75行,将下面的代码

ifneq ($(WITHOUT_HOST_CLANG),true)

改成:

ifeq ($(WITHOUT_HOST_CLANG),false)

若不修改这里,编译源码的时候会出现错误,修改的目的是为了把CLANG这个编译选项关掉,不会影响源码编译。

(3) 安装依赖

这是编译源码前的最后一步,也是做重要的一步,若不安装依赖,在编译过程中会出现源码编译错误的现象。

sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib 
sudo apt-get install libc6-dev-i386 
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev 
sudo apt-get install lib32z-dev ccache
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib 
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential  

5 开始编译

(1) 在 .bashrc文件末尾添加:export USE_CCACHE = 1

echo export USE_CCACHE=1 >> ~/.bashrc

(2) 提高编译效率,设置编译器高速缓存:

prebuilts/misc/linux-x86/ccache/ccache -M 50G

这里写图片描述
(3) 导入编译Android源码所需的环境变量和其它参数:

source build/envsetup.sh

这里写图片描述

(4) 运行lunch命令选择编译目标:
这里写图片描述
选择5:
这里写图片描述
(5) 开始编译

make -j8

make -jN来设置参与编译的线程数量,一般来说设置为cpu核心数的两倍,N是cpu核心数。
查看cpu个数,可以用下面命令:

cat  /proc/cpuinfo

6 编译成功

编译已成功如图所示:
这里写图片描述
进入/android-6.0.1/out/target/product/generic_x86目录,可以看到编译好的文件:
这里写图片描述

启动模拟器:

emulator

稍等几分钟,就可以出现模拟器画面了,如图所示:
这里写图片描述
到此为止,下载源码和编译源码就结束了!! 接下来,我们继续编译SDK和内核。

猜你喜欢

转载自blog.csdn.net/warticles/article/details/80936105