本人的环境:
系统:Ubuntu12.10
参照:http://source.android.com/source/initializing.html 和 http://source.android.com/source/downloading.html
第一部分:本地环境初始化
文档上说,只支持linux系统和mac os,不支持windows,所以需要准备相应的系统。
1. 首先,要选择你要下载的版本号,版本号不同,相应的环境配置是不一样的。
2.所有版本共同的配置。
Gingerbread (2.3.x) 及其以后的新版本,包括主干分支(master branch), 需要一个64位的环境。Gingerbread (2.3.x) 之前的版本可以用32位的环境编译。
注意:在虚拟机中编译源码也是可以的。如果你在虚拟机里运行Linux, 你需要至少16GB的内存或者缓存分区,并且确保至少30GB的硬盘空间。
需要安装的软件:
1.Python 2.6 -- 2.7 安装命令: sudo apt-get install python 查看版本号:apt-show-versions python 或者 python --version
2.GNU Make 3.81 -- 3.82 安装命令:sudo apt-get install build-essential 查看版本号:apt-show-versions make 或者 make --version
3.JDK Gingerbread (2.3.x) 及其以后的新版本安装1.6,Gingerbread (2.3.x)以前的安装1.5。你可以在java.sun.com下载。
4. Git 1.7 以上 安装命令:sudo apt-get install git 检查版本号:apt-show-versions git 或者 git --version
3.这个是JDK的安装
Java 6: for Gingerbread and newer
$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk
Java 5: for Froyo and older
$ 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
注意:这里一定要用sun公司的jdk。
4. 安装系统需要的包(Ubuntu 10.04 -- 11.10)
你需要有一个64位的Ubuntu系统。推荐Ubuntu10.04. 其他更新版本的Ubuntu只是实验性质的支持,不能保证出了主分支(master branch)以外的能够成功。
$ 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
$ sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so
$ sudo apt-get install libx11-dev:i386
只能保证主分支在实验性的在Ubuntu 12.04上成功,不能保证其他分支成功。
$ 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
6. 配置USB权限
在GNU / Linux系统(尤其在Ubuntu系统)下,普通用户默认是不能访问USB设备的。为了能够访问USB设备,所以需要进行配置。
推荐的方式如下:创建一个文件/ etc/udev/rules.d/51-android.rules,
$ sudo gedit / etc/udev/rules.d/51-android.rules
把如下内容拷贝到文件里面,然后用自己的用户名替换<username>
# 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>"
# 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 (8.04.x LTS) 和 Lucid Lynx (10.04.x LTS)是能够成功编译到设备上的。Ubuntu其他的版本和其他的GNU/Linux系统可能需要其他的配置。
7. 设置缓存区(cache)
你可以用这个工具选择性的去build. 缓存区(cache)的作用是当你重新build的时候他可以作为一个编译缓存区加速你的编译速度。如果你经常使用“make clean”或者在不同的分支间来回的切换,这个非常好用。
在~/.bashrc 或者其他环境变量里追加下面的代码:
export USE_CCACHE=1
缓存默认会存到~/.ccache这个目录下。如果你的home目录在NFS或者其他非本地的文件系统上,也许你想把他在~/.bashrc中设置成其他的目录(我没试)。
export CCACHE_DIR=<path-to-your-cache-directory>
缓存区的大小建议是50GB~100GB. 如果你下载完了代码,执行下面的代码:
prebuilts/misc/linux-x86/ccache/ccache -M 50G
当编译Ice Cream Sandwich (4.0.x) 或者更老的版本, 缓存区是在不同的位置。
prebuilt/linux-x86/ccache/ccache -M 50G
这个设置要持久的保存在~/.ccache的 CCACHE_DIR 上。像上面。
8. 用一个单独的编译输出路径
默认情况下,源码输出到out/下的分支目录。在一些多存储设备的机器上,源码和输出在不同的分区上速度会快一些。下面是设置输出目录的。
export OUT_DIR_COMMON_BASE=<path-to-your-out-directory>
这个仅仅支持 Jelly Bean (4.1) 和更新的版本,包括主分支.
第二部分:下载源码
1. 安装repo
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo $ chmod a+x ~/bin/repo这一步我是可以顺利执行的。很多网友说不能执行。如果你遇到了,给我反馈。
2. 初始化repo客户端
创建一个目录来存放源码,如果你打算下载多个分支,最好建几个子文件夹。
我的目录是:~/android_resource/android-4.0.1_r1。
有时间再写。实在太困了。