Linux下 使用Repo和Git下载Android源代码并编译

时间:2023-01-11 15:57:47
本日志介绍了下我个人在64位ubuntu 12.10下使用repo和git来下载android源代码的过程。本文参看了官方网页的介绍:http://source.android.com/source/downloading.html,并结合了些许个人经历。 编译下载android源码需要大量时间、精力、人品,请广大读者谨慎上路。如果大家在阅读本文时有任何问题,请发邮件至讨论: czxttkl@gmail.com   
1。编译环境必须是64位的Linux系统。推荐使用ubuntu,建议版本号>=10.04。在ubuntu中执行以下命令安装必要的包:如果是ubuntu12.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

如果是ubuntu10.04-11.10,请先执行:
$ 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
如果是ubuntu10.04,请另行执行:
$ sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so
如果是ubuntu11.10,请另行执行:
$ sudo apt-get install libx11-dev:i386

2。新建你要保存Android源码的文件夹。例如我要存在home文件夹下bin文件夹里。在命令行中输入:mkdir ~/binPATH=~/bin:$PATH
3。继续在Terminal中输入:curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repochmod a+x ~/bin/repo这时候在你的home文件夹下应该已经有一个bin文件夹,其中有一个repo文件。repo文件相当于一个批处理文件,极大地简化了git的使用。因为android系统的各部分都放在上百个不同的代码仓库里,若使用git clone <代码仓库地址> 命令下载每个仓库里的源代码,那么下载完所有的android源码可能要执行上百次git clone,而repo文件则将所有步骤变成了一个脚本文件了。我们目前只需要使用repo sync命令将所有代码仓库里的master branch拷贝至本地即可。
更多的repo使用方法可见:http://source.android.com/source/version-control.html或者参考我另外一篇博文:Android源码下载——Repo\Git的常用命令介绍Android所有代码仓库列表可见:https://android.googlesource.com/?format=HTML
4。通过cd ~/bin将Terminal定位到~/bin文件夹
5。在Terminal中(当前处于bin文件夹)输入以下命令,初始化repo。repo默认将下载所有代码仓库中的master branch:
$ repo init -u https://android.googlesource.com/platform/manifest
如果此步成功,应该会有提示:Repo is initialized in your working directory. 在~/bin文件夹内生成了.repo隐藏文件夹
若想让repo下载指定的branch而非master,可执行:
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
查看目前android所有branch列表:http://source.android.com/source/build-numbers.html
仔细看看~/bin/.repo/manifest.xml文件,里面列出了repo需要同步的所有project的信息。特别注意的是有一些project的group属性为“notdefault”。在仅使用repo sync命令时默认是不下载这些project的。 想要连同下载notdefault的project,请参考Android源码下载——Repo\Git的常用命令介绍》一文中的使用repo下载not default的project

6。继续输入:repo sync这样就可以开始下载最新源码了。在*,网络连接常常不稳定,导致repo sync一半可能会失败。但repo sync具有一定的断点续传的功能,失败后隔一段时间(10分钟左右就好)重新运行repo sync即可。
7。开始配置Ccache编译缓存。将以下内容拷贝至/etc/profile中:
export USE_CCACHE=1
并且在命令行中执行:source /etc/profile 以使该环境变量生效接着将Terminal定位到源码文件夹下,执行:prebuilts/misc/linux-x86/ccache/ccache -M 50G
8. 现在可以开始编译源码了
使用源码中的build/envsetup.sh配置编译所需环境
$ source build/envsetup.sh

9.接着执行lunch full-eng以明确我们待会儿编译的目标为emulator上的android系统。如果你想编译能刷上真机的android系统,请参考:http://source.android.com/source/building-devices.html当然,目前能将编好的android系统刷上去的真机型号不多,只有Nexus几个系列罢了。
10. 一般直接输入make开始编译就好.(官网上有说明,如果使用make -jn(n为某个自然数)可以多线程编译,但我使用make -j4有时会产生意想不到的错误.固我一般只用make直接开始编译)make后会在源代码根目录下产生out文件夹,内有target和host两个子文件夹。target文件夹一般存放的是与手机端有关的make结果,host文件夹存放的是和pc端有关的内容。
11.若想编译sdk,请参考:
http://maider.blog.sohu.com/255063790.html



常见问题汇总:
1.
http://hi.baidu.com/iptux/item/689e9957aaa40000e7c4a579
2. http://wenku.baidu.com/view/af341cf19e31433239689349.html
3.No command 'emulator' found, did you mean:
   Command 'qemulator' from package 'qemulator' (universe)
   emulator: command not found
解决办法:
重新运行命令行:
1.source build/envsetup.sh

2.lunch full-eng


转帖:http://maider.blog.sohu.com/250854034.html