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

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及内核》

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值