您的位置:首页 > 移动开发 > Android开发

下载构建android源码-初始化构建环境

2015-04-24 16:21 253 查看
原文链接:http://source.android.com/source/initializing.html

一、初始化构建环境

    本节讲述了如何配置构建android源码的本地环境功能,目前只支持在Linux或者Mac OS下构建,Windows暂不支持。

    整个code-review和code-update过程总览可以参见Life of a Patch

    1、配置Linux构建环境

          该教程适用于所有分支(branch),包括主干(master)

          一般情况下,Android源码的构建都是在最新版的Ubuntu LTS(14.04)上测试的,但是其他一些Linux发行版本也提供了所需的构建工具。欢迎反馈在其他发行版上的测试结果,成功的或者失败的。

         android 2.3.x(Gingerbread)及以上版本,包括主干版本,均需要一个64位的环境来构建源码,老点的版本可以在32位系统上构建。

         注:参照Downloading and Building页中关于硬件和软件要求,然后依着下面针对Ubuntu和Mac OS的详细指导。

   2、安装JDK

        Android的主干分支(master)需要Java7,Ubuntu提供了openjdk。

java7:针对最新的android版本

$ sudo apt-get update
$ sudo apt-get install openjdk-7-jdk


更新默认的java版本(可选):

$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac


如果遇到关于java版本的错误,请按照Wrong Java Version页讲述的方法设置java路径。

针对低版本的Android,下载安装对应的java jdk:

java6: gingerbread through KitKat

java5: cupcake through Froyo

注:构建步骤中的lunch命令保证使用的是sun jdk,而不是系统预安装的jdk版本。

  3、安装所需要的包(Ubuntu 14.04)

       你需要一个64位的Ubuntu,推荐Ubuntu 14.04

$ sudo apt-get install bison g++-multilib git gperf libxml2-utils make zlib1g-dev:i386 zip
 4、安装所需的包(Ubuntu12.04)

你可能需要Ubuntu 12.04来构建Android老版本,但是12.04不支持构建android的master和最新的发行版本

$ 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 mingw32 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



 5、安装所需包(Ubuntu 10.04--11.10)

     已经不支持在10.04-11.10上构建android源码,但是或许在构建AOSP的一些老版本上还是有用的

$ sudo apt-get install git 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


6、配置USB 访问权限

GNU/Linux系统下(特别是Ubuntu系统),默认情况下普通用户是不能直接访问USB设备的。系统需要按照下面的指导配置访问权限。

推荐方法是使用root权限创建一个文件/etc/udev/rules.d/51-android.rules,然后将下面的行复制进去保存,其中<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>"
# adb protocol on panda (PandaBoard ES)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="d002", 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>"
# adb protocol on grouper/tilapia (Nexus 7)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e42", MODE="0600", OWNER="<username>"
# fastboot protocol on grouper/tilapia (Nexus 7)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e40", MODE="0600", OWNER="<username>"
# adb protocol on manta (Nexus 10)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee2", MODE="0600", OWNER="<username>"
# fastboot protocol on manta (Nexus 10)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee0", MODE="0600", OWNER="<username>"


当下一次设备被插入时,这些新添加的规则就会生效,这个方法在Ubuntu Hardy Heron和Lucid Lynx上验证生效。其他版本的Ubuntu和GNU/ Linux的其它变种需要不同的配置。

7、使用一个单独的输出目录

默认情况下,构建的输出保存在对应版本树下的子目录out/,在其他具有多个存储设备的机器上,如果将源码文件和输出放在不同的卷上的话,构建会快很多。如果为了额外的性能,可以考虑将输出存放在一个速度优先、崩溃避免其次的文件系统上,因为即使文件系统崩溃,所有的文件都可以被重新生成。可以这样设置,通过导入一个指向你指定的输出目录的字符串常量来设置。

export OUT_DIR_COMMON_BASE=<path-to-your-out-directory>


每个单独的源代码树的输出目录将以包含源代码树的文件夹名字命名。例如,如果你有两个源码树,名称分别为/source/master1 /source/master2,同时指定OUT_DIR_COMMON_BASE为/output,这样两个源码树的输出目录就分别位/output/master1和/output/master2。这里需要重点指出,不要让多个源码树的输出目录使用同一个名字,因为这样他们共享一个输出目录,会造成不可预知的后果。

只有Jelly Bean(4.1)和更新的版本(包括主干分支)支持这个设置。

二、配置mac os构建环境

此处略去五千字。。。

三、构建环境的进一步优化(可选)

1、设置ccache

        你可以选择告诉构建过程使用ccache编译工具,ccache充当可用于加快改造项目的编译器缓存,特别是在你经常需要使用make clean指令或者经常在不同的构建铲平间切换时很有用。

在你的.bashrc文件中添加下面一行语句:

export USE_CCACHE=1
      默认情况下,cache会被保存在~/.cache中,如果你的主工作目录不是NFS,或者是其他非本地的文件系统,也可以在.bashrc文件指定保存路径

export CCACHE_DIR=<path-to-your-cache-directory>
     建议将cache大小设为50-100G。如果你已经下载完源代码,可以运行下面的命令:

prebuilts/misc/linux-x86/ccache/ccache -M 50G


  当构建Ice cream sandwich(4.0.x)及更老版本时,ccache在另一个位置

prebuilt/linux-x86/ccache/ccache -M 50G


这个设置永久保存在CCACHE_DIR中。

       
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 源码