1. 环境配置
本节介绍如何设置你的本地工作环境来构建Android的源文件。你将需要使用Linux OS,目前不支持Windows下的建筑。
该源码下载约8.5GB大小。您将需要超过30GB可用来完成一个单一的构建,以及高达100GB(或以上)的全套版本。
本文档完全参考android官方网站:http://source.android.com/source/initializing.html
Linux编译环境搭建
Android的构建经常在Ubuntu LTS(12.04)版本做编译,而且操作系统版本为64-bit。
安装JDK
库依赖安装
$ sudo apt-get install git gnupg flex bison gperf build-essential \
zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
libgl1-mesa-dev g++-multilib mingw32tofrodos \
python-markdown libxml2-utils xsltproc zlib1g-dev:i386
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
2. 源码下载
Android的源代码树位于由谷歌托管的一个Git仓库。本节介绍如何下载源代码树中特定Android版本源代码。
安装repo
repo是一种工具,可以更容易地使用Git在了Android的环境中工作,它是下载源码的主要工具。
1. 在主目录下创建bin文件夹,并添加进入环境变量
$ mkdir ~/bin
$ PATH=~/bin:$PATH
2. 下载repo工具,并且赋予可执行权限
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
初始化repo客户端
安装完repo后,设置下载android源码的路径,开始下载源码
1. 创建一个源码存放路径,然后进入该路径
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
2. 运行 repo init 来初始化你想要下载的源码,使用-b选择源码版本
$ repo init -u https://android.googlesource.com/platform/manifest-b android-4.4.4_r1
注:源码版本需要根据安卓机器型号和版本参照,详细参照下面链接
http://source.android.com/source/build-numbers.html
下载源码
$ repo sync
3. 编译源码
下载专有驱动文件
Android的开源项目,不能只从纯粹的源代码给不同手机终端使用,需要额外的不同机器硬件相关的专利库运行,专为硬件图形加速,这种库称为专有驱动。这些专有驱动是不开源的,需要去相关网站下载。
https://developers.google.com/android/nexus/drivers
如下所示,以nexus5为例,
Nexus 5 (GSM/LTE) binaries for Android4.4.4 (KTU84P)
Hardware Component | Company | Download | MD5 Checksum | SHA-1 Checksum |
NFC, Bluetooth, Wi-Fi | Broadcom | 3b0c5fc786daf79f016493c05bf5f0f2 | 5ddada9ea77f750d3a032e62f1ef9d324b4fa152 | |
Camera, Sensors, Audio | LG | a4c4935fcb438ea72782d7179596ea13 | a691be8188d179a3951b8af4551b2595d81156bd | |
Graphics, GSM, Camera, GPS, Sensors, Media, DSP, USB | Qualcomm | f1cb5b7c87cddb6cc0493eb9e53c6ee4 | 88178b6deb2ffc8481588004ac9061398ed43f0d |
% cd WORKING_DIRECTORY
% wgethttps://dl.google.com/dl/android/aosp/lge-mako-jwr66y-a85ca75e.tgz
% tar -zxvf lge-mako-jwr66y-a85ca75e.tgz
% ./extract-lge-mako.sh # (view the license and then type"I ACCEPT")
...
% wgethttps://dl.google.com/dl/android/aosp/qcom-mako-jwr66y-a5becaf1.tgz
% tar -zxvf qcom-mako-jwr66y-a5becaf1.tgz
% ./extract-qcom-mako.sh # (view the license and thentype "I ACCEPT")
...
% wgethttps://dl.google.com/dl/android/aosp/broadcom-mako-jwr66y-137ef66d.tgz
% tar -zxvf broadcom-mako-jwr66y-137ef66d.tgz
% ./extract-broadcom-mako.sh # (view the license and thentype "I ACCEPT")
解压专有文件后,通过脚本释放文件到源码中,准备编译工作。
初始化编译
$ . build/envsetup.sh
选择编译目标
通过lunch命令选择相应的目标,它由BUILD-BUILDTYPE形式组成,build是各个手机版本代号,buildtype为编译的类型。
$ lunch aosp_hammerhead-userdebug
Build表
Device | Code name | Build configuration |
Nexus 5 (GSM/LTE) | hammerhead | aosp_hammerhead-userdebug |
Nexus 7 (Wi-Fi) | razor (flo) | aosp_flo-userdebug |
Nexus 7 (Mobile) | razorg (deb) | aosp_deb-userdebug |
Nexus 10 | mantaray (manta) | full_manta-userdebug |
Nexus 4 | occam (mako) | full_mako-userdebug |
Nexus 7 (Wi-Fi) | nakasi (grouper) | full_grouper-userdebug |
Nexus 7 (Mobile) | nakasig (tilapia) | full_tilapia-userdebug |
Galaxy Nexus (GSM/HSPA+) | yakju (maguro) | full_maguro-userdebug |
Galaxy Nexus (Verizon) | mysid (toro) | aosp_toro-userdebug |
Galaxy Nexus (Experimental) | mysidspr (toroplus) | aosp_toroplus-userdebug |
PandaBoard (Archived) | panda | aosp_panda-userdebug |
Motorola Xoom (U.S. Wi-Fi) | wingray | full_wingray-userdebug |
Nexus S | soju (crespo) | full_crespo-userdebug |
Nexus S 4G | sojus (crespo4g) | full_crespo4g-userdebug |
Buildtype表
Buildtype | Use |
user | 开放功能最少,适合编译发行版rom |
userdebug | 跟user版本很类似,但是开放调试功能 |
eng | 配置了额外的编译选项 |
开始编译
使用GNU make编译,并行任务-JN,n表示的硬件CPU的能力。例如2个CPU,每个核心最多建立四个线程,最快建立J8。
$ make –j8
4. 刷机
解锁bootloader
bootloader默认情况下是锁定的。在设备处于FASTBOOT模式,引导程序执行以下命令被解锁。
fastboot oem unlock
烧录镜像
在编译完后,输出目录会生成相应的rom镜像文件,使手机进入fastboot模式,输入以下命令,即可完成刷机。
% cd out/target/product/<device> # (replace <device> with correct value for your device)
% fastboot flash boot boot.img
% fastboot flash system system.img
% fastboot flash userdata userdata.img