[Android]Ubuntu12.04 下编译和下载 Android4.0.3 源码
原创文章,谢绝转载
官方页面 :
initialize -> http://source.android.com/source/initializing.html
download -> http://source.android.com/source/downloading.html
build -> http://source.android.com/source/building.html
1 安装 JDK1.6.0
下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u29-download-
513648.html
1.1 将下载到的 jdk-6u29-linux-i586.bin 移动到/usr/lib/jvm/java 目录下,若不存在 jvm 和 java 目录,请使
用 root 身份创建。
命令为:
sudo -s(之后,输入登录 ubuntu 的密码)
cd /usr/lib
mkdir jvm
cd jvm
mkdir java
创建完 jvm 和 java 目录之后,使用 mv 命令将 jdk-6u29-linux-i586.bin 拷贝到 java 目录下。
1.2 安装 JDK
切换至/usr/lib/jvm/java 目录下,执行下面的命令:
chmod +x jdk-6u29-linux-i586.bin(增加可执行权限)
./jdk-6u29-linux-i586.bin
安装的时候,需要的时候按下 enter 就 Ok 了。
1.3 配置 JDK
gedit /etc/environment
在打开的文件中,添加如下几行:
PATH=$PATH:$JAVA_HOME/bin($PATH 为之前的 PATH 环境变量的内容)
CLASSPATH=".:$JAVA_HOME/bin"
JAVA_HOME="/usr/lib/jvm/java/jdk1.6.0_29"
接下来,需要安装 java/javac/jar 命令了,执行如下命令:
update-alternatives --install /usr/bin/java java /usr/lib/jvm/java/jdk1.6.0_29/bin/java 300
update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java/jdk1.6.0_29/bin/javac 300
update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/java/jdk1.6.0_29/bin/jar 300
update-alternatives --config java
update-alternatives --config javac
update-alternatives --config jar
在执行后面三条命令的时候,可能会出现选择的提示,这时候一定要选择 jdk1.6.0,而不是系统中的
openJDK,切忌。
最后,可以使用 java -version 命令,查看下当前的 java 版本是否为 1.6.0.
作者:南都布衣
2 安装必要的编译包
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 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386(与官方
的命令相比,我删除了 openjdk 的安装包)
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so(执行下,提示失
败也没关系)
3 安装 repo
3.1 创建 bin 目录,并设置路径,执行命令如下:
mkdir ~/bin
PATH=~/bin:$PATH
3.2 安装 repo,执行命令如下:
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
chmod a+x ~/bin/repo
4 下载 android4.0.3 源码
4.1 创建你的 Google 登录的用户名和密码
打开网址 https://android.googlesource.com/new-password,使用你的 Google 账户登录进去,然后点击
“Allow Access”按钮,回出现一个页面,上面有 Google 分配给你的用户名和密码。拷贝下方文本框内的
内容,在终端中执行命令:gedit ~/.netrc,之后,将拷贝的内容粘帖到.netrc 文件中。
4.2 初始化 repo
执行命令:repo init -u https://android.googlesource.com/a/platform/manifest
4.3 下载源码
执行命令:repo sync
5 错误处理
5.1 错误 1
Fetching projects: 22% (51/228) fatal: Not a git repository:
'/home/android/.repo/projects/external/fdlibm.git'
出现如上的错误,使用 rm 命令直接删除对应的文件,重新 repo sync 即可。
执行命令:rm -rf /home/android/.repo/projects/external/fdlibm.git
5.2 其他错误
将错误信息到 Google 上面搜索下,就会有答案的。当然了,有时候需要使用翻墙软件才行,因为可能会
访问到 google group 和 blogspot 等网站,而这些网站被和谐了。
6 编译 Android4.0.3
6.1 编译前的准备工作
请确认以下包的版本是否 OK:
1. gcc4.4,而不是 gcc4.6,如果是 4.6,需要安装 gcc4.4,命令如下:
作者:南都布衣
sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
cd /usr/bin
ls -l gcc*
sudo mv gcc gcc.bak
sudo ln -s gcc-4.4 gcc
ls -l g++*
sudo mv g++ g++.bak
sudo ln -s g++-4.4 g++
gcc -v
g++ -v
2 python2.5-2.7,ubuntu12.04 版本,默认的 python 版本是 2.7,所以,这个没什么问题
3 java 版本微 1.6.0,而不是 openJDK,前面我已经删除了 openJDK 的安装包,所以这里应该没有才对。
6.2 编译源码
按照官方的提示,依次执行如下命令:
source build/envsetup.sh
lunch full-eng
make -j4
建议:最后一条命令使用 make showcommands,这样可以显示编译命令,使得编译的时候,屏幕没有输
出的时候,不会感觉无聊。
7 编译错误处理
7.1
错误:You are attempting to build with the incorrect version of java.
解决方法:sudo update-alternatives --config java,同时最好确认下 javac 和 jar 命令。
7.2
错误:make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] 错误 1
make: *** 正在等待未完成的任务....
解决方法:
修改源码目录下/build/core/combo/HOST_linux-x86.mk 文件:
将以下语句
HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0
修改为
HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
7.3
错误:make: *** [out/host/linux-
x86/obj/STATIC_LIBRARIES/libMesa_intermediates/src/glsl/linker.o] 错误 1
解决方法:
gedit external/mesa3d/src/glsl/linker.cpp
在头文件段中,添加#include <stddef.h>
7.4
错误:make: *** [out/host/linux-
x86/obj/STATIC_LIBRARIES/liboprofile_pp_intermediates/arrange_profiles.o]
解决方法:确认你使用的 gcc 和 g++的 4.4 版本,而不是更高的版本。
7.5
错误:make: *** [out/target/common/obj/APPS/CtsVerifier_intermediates/classes-full-debug.jar]
解决方法:sudo update-alternatives --config javac,选择 jdk1.6.0,而不是 openjdk。
7.6
错 误:make: *** [out/target/common/obj/APPS/android.core.tests.libcore.package.com.no-core-tests-
res_intermediates /noproguard.classes-with-local.dex] Killed
解决方法:此问题是因为编译 android4.0 需要 4GB 的 RAM 或 SWAP 空间,而 ubuntu 默认的 1GB 的,
所以,增加 swap 空间即可,执行命令如下:
sudo dd if=/dev/zero of=/boot/swapfile bs=1024 count=4194304
sudo mkswap -v1 /boot/swapfile
sudo swapon /boot/swapfile
free
sudo vi /etc/fstab
/boot/swapfile swap swap defaults 1 1
7.7 其他错误,请 Google 下,还是那句话,你很可能需要翻墙。
8 编译成功
8.1 编译成功之后,会在 out/target/product/generic 下面看到 system.img,ramdisk.img,userdata.img
8.2 但是我编译成功之后,在终端运行 emulator 命令,却提示:
No command 'emulator' found, did you mean:
Command 'qemulator' from package 'qemulator' (universe)
emulator: command not found
解决方法:
重新运行以下命令:
source build/envsetup.sh
lunch full-eng