国庆节征文
[Android]Ubuntu12.04下编译和下载Android4.0.3源码
原创文章,谢绝转载
官方页面:
initialize -> /source/initializing.html
个人经营download -> /source/downloading.html
build -> /source/building.html
1 安装JDK1.6.0
下载地址:/technetwork/java/java/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无gui引导
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:$JA V A_HOME/bin($PATH为之前的PATH环境变量的内容)
CLASSPATH=".:$JA V A_HOME/bin"
JA V A_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-esntial zip curl libc6-dev libncurs5-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,执行命令如下:
le.com/dl/googlesource/git-repo/repo > ~/bin/repo
chmod a+x ~/bin/repo
4 下载android4.0.3源码
4.1 创建你的Google登录的用户名和密码
打开网址/new-password,使用你的Google账户登录进去,然后点击 “Allow Access”按钮,回出现一个页面,上面有Google分配给你的用户名和密码。拷贝下方文本框内的内容,在终端中执行命令:gedit ~/rc,之后,将拷贝的内容粘帖到rc文件中。
4.2 初始化repo
执行命令:repo init -/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/envtup.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/class-full-debug.jar]
解决方法:sudo update-alternatives --config javac,选择jdk1.6.0,而不是openjdk。
7.6
错 误:make: *** [out/target/common/obj/ests.-core-tests-res_intermediates /noproguard.class-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,urdata.img事故报告怎么写
8.2 但是我编译成功之后,在终端运行emulator命令,却提示:
No command 'emulator' found, did you mean:
Command 'qemulator' from package 'qemulator' (univer)
emulator: command not found
解决方法:
重新运行以下命令:
source build/envtup.sh
lunch full-eng