初始化一个构建环境
“入门”部分描述如何在你的机器上建立你的本地工作环境,如何使用 Repo 获取 Android 文件和如何构建这些文件构建 Android 源文件,你将需要用Linux 或 Mac OS。在 Windows 下构建,当前是不支持的。
注意:源下载大约 6GB 大小,你将需要 25GB 空闲的完成一个单一构建,和高达 90GB (或更多)来全套构建。
整个代码审查和代码更新过程的一个概述,看一个补丁的寿命。
选择一个分支
你构建环境的要求,由你计划编译哪个版本的源码决定。看一个全版本的构建数,你可一从这里选择一个分支。你也可以选择下载和构建最新源码(称为 "master"),在这种情况下,你将简单的忽略分支版本规范,当你初始化库。
一旦你选择了一个分支,跟着下面恰当的只是建立你的构建环境。
建立一个 Linux 构建环境
这些描述适用于所有分支,包括主分支。
Android 构建是内部常规测试在 Ubuntu LTS (10.04),但是大多数发行应该提供有效的构建工具。提交成功或失败在其它分布是欢迎的。
Gingerbread (2.3.x) 和最新的版本,包括主分支,一个64位环境是必须的。旧的版本可以在32位系统上编译。
注意:这也可能构建 Android 在一个虚拟机。假如你运行 Linux 在一个虚拟机,为了构建 Android树你将需要至少 16GB 的 RAM/swap 和 30GB 或更多磁盘空间。
一般情况下你将需要:
-
Python 2.5 -- 2.7,你能下载从 python.org.
-
GNU Make 3.81 -- 3.82,你能下载从 gnu.org,
-
JDK 6 假如你想构建 Gingerbread 或更新的; JDK 5 Froyo 或旧的。你可以下载这两个一起从 java.sun.com.
-
Git 1.7 或更新。你能发现它在 git-scm.com.
详细描述 Ubuntu 10.04+ 如下。
安装 JDK
Sun JDK 不再在 Ubuntu 的主包库。为了下载它,你需要添加合适的库并支持系统应使用哪个 JDK。
Java 6: Gingerbread和更新
$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk
Java 5:对于 Froyo和以前
$ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu hardy main multiverse"
$ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu hardy-updates main multiverse"
$ sudo apt-get update
$ sudo apt-get install sun-java5-jdk
注意:lunch 命令在构建步骤里将确保 Sun JDK 用来替代任何先前安装的 JDK。
安装需要的包 (Ubuntu 10.04 -- 11.10)
你将需要一个64位版本的 Ubuntu。 Ubuntu 10.04 是被推荐的。构建用一个Ubuntu的较新版本是当前仅仅是当前实验支持的,并不保证工作在主分支外的分支。
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \
libxml2-utils xsltproc
Ubuntu 10.10 上:
$ sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so
Ubuntu 11.10上:
$ sudo apt-get install libx11-dev:i386
安装需要的包 (Ubuntu 12.04)
构建在 Ubuntu 12.04 上是当前仅仅实验支持的,并不保证工作在主分支外的分支。
$ sudo apt-get install git-core 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 mingw32 openjdk-6-jdk tofrodos \
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
配置 USB访问
GNU/linux 系统下(指定 Ubuntu 系统下),默认普通用户不能直接访问 USB 设备。该系统需要被指允许这样的访问。
推荐的方法是创建一个文件 /etc/udev/rules.d/51-android.rules
(作为 root 用户)和复制下面的行到里面。<username>
必须被替换为实际的用户名,被授权访问手机上的 USB。
# adb protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"
# fastboot protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"
# adb protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"
# fastboot protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"
# adb protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username>"
# fastboot protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username>"
# adb protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>"
# fastboot protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>"
# adb protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>"
# fastboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>"
# usbboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER="<username>"
# usbboot protocol on panda (PandaBoard ES)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="<username>"
这些新规则在下一次设备插入时生效。可能因此需要拔下设备插回电脑。
已知工作在包括 Ubuntu Hardy Heron (8.04.x LTS) 和 Lucid Lynx (10.04.x LTS)。其它版本的 Ubuntu 或其它变种的 GNU/linux 可能需要不同的配置。
建立 ccache
你能选择性的告诉使用 ccache 编译工具构建。Ccache 扮演一个编译器缓存,能被用来提速重构建。假如你经常"make clean",它工作的非常好,或者你频繁在两个不同的构建产品之间切换。
放下面的到你的 .bashrc 或相同。
export USE_CCACHE=1
默认,缓存将被存储在 ~/.ccache。假如你的 home 目录是基于 NFS 或一些其它的非本地化文件系统,以及你将要指定目录在你的 .bashrc。
export CCACHE_DIR=<path-to-your-cache-directory>
建议的缓存大小是 50-100GB。一旦你下载了源码,你将需要运行下面的命令。
prebuilt/linux-x86/ccache/ccache -M 50G
这设置存储在 CCACHE_DIR 和是持久的。
用一个单独输出目录
默认,每个构建的输出被保存在每个机器源码树子目录的 out/中。
在一些多存储设备的机器上,构建是快速的,当储存源文件和输出在单独的卷。额外的性能,输出能被储存在一个为速度优化的文件系统中,代替突然的意外,因为所有文件能在文件系统毁坏的情况下被重新生成。
设置这些,出口 OUT_DIR_COMMON_BASE
变量只想你将要保存输出目录的地方。
export OUT_DIR_COMMON_BASE=<path-to-your-out-directory>
每个单独的源树输出目录将被命名在目录保持源码树之后。
例如,假如你有源树为 /source/master1
and /source/master2
和 OUT_DIR_COMMON_BASE
是设置为 /output,输出目录将是
/output/master1
and/output/master2
.
它的重要在这种情况,没有多源树保额哦存在相同名称的目录,为这些将要结束共享一个输出目录,不可预知的结果。
这仅仅支持在比 4.0.x(IceCreamSandwich)新的分支。
建立一个 Mac OS X 构建环境
在一个默认的安装,OS X 运行在一个保留的情况,但是不区分大小写的文件系统。这种类型的文件系统不知吃 git 和将因为一些 git 命令(例如 "git status")表现异常。因为这,我们推荐你总是工作在 AOSP 源文件在区分大小写的文件系统。这能够相当简单用一个磁盘镜像,讨论如下。
一旦恰当的文件系统是有效的,构建主分支在一个现代化的 OS X 环境是非常简单的。早期的分支,包括 ICS,需要一些附件和 SDK。
创建一个大小写敏感的磁盘镜像
你能创建一个大小写敏感的文件系统用你的现有 OS X 环境用一个磁盘镜像,运行 DiskUtility 并且选择 "New Image",一个大小为 25GB 是最小的完成构建,更大的数字是更多的面向未来。用稀疏的镜像保存空间当允许增长后作为需要出现。确定选择 "case sensitive, journaled" 作为卷格式。
你也能创建它从一个 shell 用下面的命令:
# hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg
这将创建一个 .dmg (或可能一个 .dmg.sparsefile)文件,一段挂载,扮演一个设备,需要为 Android 开发格式化。一个磁盘镜像名为"android.dmg" 储存在你的 home 目录,你能添加下面的到你的 ~/.bash_profile
来挂载这个镜像,当你执行 "mountAndroid":
# mount the android file image
function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }
挂载一次,你将做你所有的工作在 "android" 卷。你能弹出它(卸载它)仅仅像你愿意,如同一个外部设备。
主分支
构建最新源码在一个 Mac OS 环境,你将需要一个 Intel/x86 机器运行 MacOS 10.6 (Snow Leopard) 或 MacOS 10.7 (Lion),随着 Xcode4.2 (苹果的开发工具)。虽然 Lion 没有一个 JDK,它将自动安装,当你尝试建立源。
Mac OS X 的其余部分仅仅应用在其他希望构建分支版本。
分支 4.0.x 和所有更早分支
构建 android-4.0.x 和更早分支在一个ie Mac OS 环境,你需要 anIntel/x86 机器运行 MacOS 10.5 (Leopard) 或 MacOS 10.6 (Snow Leopard)。你将需要 MacOS 10.5 SDK.
安装需要的包
-
安装 Xcode 从 苹果开发者网站。我们推荐版本 3.1.4 或更新,即 gcc 4.2。 版本 4.x 可能导致困难。假如你没有已经注册为一个苹果开发者,你将需要创建一个苹果 ID 为了下载。
-
安装 MacPorts 从 macports.org.
注意:确定
/opt/local/bin
出现在你的路径 BEFORE/usr/bin
。假如没有,添加export PATH=/opt/local/bin:$PATH
到你的
~/.bash_profile
。 -
获取 make,git,和 GPG 包从 MacPorts:
$ POSIXLY_CORRECT=1 sudo port install gmake libsdl git-core gnupg
假如使用 Mac OS 10.4,还有安装 bison:
$ POSIXLY_CORRECT=1 sudo port install bison
还原从 make 3.82
ICS 之前的 Android 版本,这有一个 bug 在 gmake 3.82 ,防止 android 构建。你能安装版本 3.81 用 MacPorts 按照下面的步骤:
-
编辑
/opt/local/etc/macports/sources.conf
和一行见解file:///Users/Shared/dports
rsync 线上面,然后创建这个目录:
$ mkdir /Users/Shared/dports
-
在新的
dports
目录,运行$ svn co --revision 50980 http://svn.macports.org/repository/macports/trunk/dports/devel/gmake/ devel/gmake/
-
创建一个端口索引为你的新本地库:
$ portindex /Users/Shared/dports
-
最后,安装久版本的 gmake用
$ sudo port install gmake @3.81
设置一个文件描述极限
MacOS 上,默认限制同时打开的文件描述符数量太低,一个高并行构建构成可能超过这个限制。
提高上线,添加下面的行到你的 ~/.bash_profile
:
# set the number of open files to be 1024
ulimit -S -n 1024
下面:下载源
你的构建环境做的好!,继续