参考:
http://source.android.com/source/initializing.html
编译Android源码的时候make有几十次了吧,一度还中断了几天不想再去调错误,当时觉得各种莫名其妙的错误,但是当编译通过之后,发现其实也没那么麻烦,关键要把一些环境和库配置好。
下面整理下编译Android2.3.3源码的整个流程,等我下次重新编译一次再附图。
操作系统:Ubuntu12.04 64位
一、开发环境
1.安装java并配置环境
我装的版本是java1.6.0,在官网上下载
2.安装一堆工具
sudo apt-get install git-core gnupg flex bison gperf zip curl libc6-dev lib32ncurse5-dev ia32-libs xllproto-core-dev libx11-dev g++-multilib mingw32 tofrodos python-markdown libxm12-utils valgrind \\ build-essential zlib1g-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev \\
这么多全装上吧,虽然不知道是不是都有用到。最烦的就是提示No such file or directory。
注:\\……\\中的软件属于有可能出问题的,包括名字输入不对(l1没分清楚),版本不对,或者版本不适用,根据提示修改就行。要特别注意的是build-essential,这个在我安装的时候默认装的是gcc4.7.2,可能Android2.3.3不能用这个版本编译,后来我改装4.4.3了,详见http://hi.baidu.com/designhouse/item/87c3568d091752c8b17154c3
二、下载源码
wget https://dl-太长不想打/repo
chmod a+x repo
sudp mv repo /bin/
创建一个目录用来放android源码,任意
mkdir xxx
cd xxx
进入自己建的文件夹准备下载
repo init -u https://android.太长/manifest -b android-2.3.3_r1
注:这里就要指定你要下的版本,不然默认就下最新版,版本好的名字可以网上查,或者等敲完命令会列出来
repo sync
开始下载,注:输入用户名,邮箱,支持断点续传,只要不改帐号。
文件大小大概是3.1G,一般下载几个小时。
三、编译源码
在下载的时间里可以做很多事,比如配置下环境,
官网上的配置:http://source.android.com/source/building.html,虽然不知道有没有用,不过还是照做了。
事实证明配置环境是非常重要滴,不然编译的时候会很痛苦,以下是我的/etc/profile文件,供大家参考一下
2 #JAVA
33 export JAVA_HOME=/home/administrator/develop/jdk1.6.0_38
34 export JRE_HOME=/home/administrator/develop/jdk1.6.0_38/jre
35 export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
36 export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
37
38 #ANDROID
39 export ANDROID_SDK_HOME=/home/administrator/develop/Android/adt-bundle-linux-x86_64/sdk
40 export PATH=$ANDROID_SDK_HOME/tools:$PATH
41
42 #NDK
43 export NDK_HOME=/home/administrator/develop/Android/android-ndk-r8d
44 export PATH=$NDK_HOME:$PATH
45
46 #C_INCLUDE
47 C_INCLUDE_PATH=$C_INCLUDE_PATH:/home/administrator/develop/Android/android-source/frameworks/base/include:/home/administrator/develop/Android/android-source/system/core/include:/usr/include
48 export C_INCLUDE_PATH
49
50 #export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mpc081/lib:/usr/local/gmp432/lib:/usr/local/mpfr242/lib
51 #export LD_RUN_PATH=LD_LIBRARY_PATH
52
其中有安装其他软件时配的,具体忘了哪些是编译android源码必要的。
下载完源码之后运行make -j4,编译完后提示:
……/system.img
……/installed-files.txt
可能出现的错误:
error.GitError: manifest rev-list(……):…
原因:源码文件夹有其他版本源码
解决:删除.repo中除repo文件夹的其他所有文件
error:'indexofkey' was not declared in this scope
原因:似乎是编译版本不对
解决:后来改用版本gcc4.4.3(4.4.7也可以)
fatal error: asm/byteorder.h no such file or directory
原因:编译的好几分钟后才出来的错误...原来只是链接文件出错
解决:ln -s /usr/include/x86_64-linux-gnu/asm /usr/include