1 绪论
Android是一种基于 Linux 内核、自由开放源代码的操作系统, 由 Google 公司和开放手机联盟共同领导及开发, 主要使用于移动设备。首先就从系统源代码下载与编译过程分析开始。
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 "you@example.com"
(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
出现如下界面:
就证明把repo已在/home/wang/android-6.0.1中初始化了,接下来就可以在google的镜像服务器上同步代码。
最后使用下面的命令下载源码。因为源码比较大,所以下载时间会很长(根据自己电脑的配置)。
$ repo sync
下载成功,如图所示:
可以在android-6.0.1文件夹中看到下载完成的系统源码文件,如下图:
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
稍等几分钟,就可以出现模拟器画面了,如图所示:
到此为止,下载源码和编译源码就结束了!! 接下来,我们继续分析《Android系统6.0源代码编译过程分析(2)之编译SDK及内核》。