本节介绍如何设置你的本地工作环境来构建Android的源文件。你将需要使用Linux OS,目前不支持Windows下的建筑。
该源码下载约8.5GB大小。您将需要超过30GB可用来完成一个单一的构建,以及高达100GB(或以上)的全套版本。
本文档完全参考android官方网站:http://source.android.com/source/initializing.html
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
Android的源代码树位于由谷歌托管的一个Git仓库。本节介绍如何下载源代码树中特定Android版本源代码。
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后,设置下载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
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 |
Link |
3b0c5fc786daf79f016493c05bf5f0f2 |
5ddada9ea77f750d3a032e62f1ef9d324b4fa152 |
Camera, Sensors, Audio |
LG |
Link |
a4c4935fcb438ea72782d7179596ea13 |
a691be8188d179a3951b8af4551b2595d81156bd |
Graphics, GSM, Camera, GPS, Sensors, Media, DSP, USB |
Qualcomm |
Link |
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
bootloader默认情况下是锁定的。在设备处于FASTBOOT模式,引导程序执行以下命令被解锁。
fastboot oem unlock
在编译完后,输出目录会生成相应的rom镜像文件,使手机进入fastboot模式,输入以下命令,即可完成刷机。
% cd out/target/product/# (replace with correct value for your device)
% fastboot flash boot boot.img
% fastboot flash system system.img
% fastboot flash userdata userdata.img