初始化一个构建环境

来源:互联网 发布:五大连池矿泉水 知乎 编辑:程序博客网 时间:2024/05/02 02:39

初始化一个构建环境

“入门”部分描述如何在你的机器上建立你的本地工作环境,如何使用 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/master1and /source/master2OUT_DIR_COMMON_BASE 是设置为 /output,输出目录将是 /output/master1and/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 imagefunction 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 1024ulimit -S -n 1024

下面:下载源

你的构建环境做的好!,继续下载源....


原创粉丝点击