近日,下载了ANDROID的源码尝试进行编译,故针对其过程,根据Google的官方说明,进行一次翻译,其原始网址为http://source.android.com/source/index.html,本文只针对Linux环境下的步骤进行翻译。
注意:源代码的大小大概2.6G,至少需要10G的空闲空间来进行编译。(snowolf_538:我下载的Gingerbread总共大概占了近6个G)
注意:使用虚拟机Linux也是可以编译ANDROID源码的,但是需要至少8G的内存/交换空间和至少12G的硬盘空间。(snowolf_538:事实上,不理解此处为什么需要8G的内存/交换空间,我使用的是Ubuntu 11.04版本的虚拟机,只设置了1G的内存和2G的交换空间,编译没有问题)
通常来讲,需要:
- Python 2.4 -- 2.7,你可以从http://www.python.org/download/下载
- JDK6(如果编译Gingerbread或者更新的版本),JDK5(Froyo或者更老的版本),你可以从http://java.sun.com/javase/downloads/下载
- Git 1.5.4或者更新,你可以从http://git-scm.com/download下载
- (可选)Valgrind,一个可以帮助发现内存泄露、栈损坏和数组越界的工具,你可以从http://valgrind.org/downloads/current.html下载
以下步骤基于Ubuntu 10.04+
安装JDK
JDK不再在Ubuntu的主包库里面,所以需要根据ANDROID的版本号下载对应的JDK。
JDK6:Gingerbread或者更新
$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo add-apt-repository "deb-src http://archive.canonical.com/ubuntu lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk
(snowolf_538:上面的第二句执行时会报错,说是无效的地址,我实际使用的是sudo add-apt-repository "deb http://archive.canonical.com/ubuntu lucid parter")
JDK5:Froyo或者更老
$ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu dapper main multiverse"
$ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu dapper-updates main multiverse"
$ sudo apt-get update
$ sudo apt-get install sun-java5-jdk
安装必需的包
安装以下必需的包以建立完整的编译环境
$ 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
(snowolf_538:以上包安装时,其中lib32ncurses5-dev、ia32-libs、lib32readline5-dev和lib32z-dev无法找到,故使用libncurses5-dev、libreadline5-dev和libz-dev来代替,ia32-libs好像没有影响)
配置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 (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"
# fastboot protocol on crespo (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"
这些规则将会在下一次设备插上的时候生效。