本人在Ubuntu 10.04 LTS系统 32位机上安装编译Android2.3源码,其步骤和注意事项如下:

 

1.安装JDK6

对于Android2.3系统,不要安装JDK5,应该安装最新的JDK6。

如果安装了JDK6,Android会自动按64位编译,如果系统是32位的,会有编译错误,后面会说如何修改这个错误。

$ sudo vim /etc/apt/sources.list
添加deb http://us.archive.ubuntu.com/ubuntu/ hardy multiverse到文件末尾
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk
出现如下信息,选择Y.开始安装
Reading package lists... Done
Building dependency tree      
Reading state information... Done
The following extra packages will be installed:
 gsfonts-x11 java-common odbcinst odbcinst1debian1 sun-java6-bin
 sun-java6-jre unixodbc
Suggested packages:
 default-jre equivs sun-java6-demo sun-java6-doc sun-java6-source
 sun-java6-fonts sun-java6-plugin ia32-sun-java6-plugin ttf-kochi-gothic
 ttf-sazanami-gothic ttf-kochi-mincho ttf-sazanami-mincho ttf-wqy-zenhei
 libmyodbc odbc-postgresql tdsodbc unixodbc-bin
The following NEW packages will be installed:
 gsfonts-x11 java-common odbcinst odbcinst1debian1 sun-java6-bin
 sun-java6-jdk sun-java6-jre unixodbc
0 upgraded, 8 newly installed, 0 to remove and 219 not upgraded.
Need to get 43.6MB of archives.
After this operation, 131MB of additional disk space will be used.
Do you want to continue [Y/n]?

中途会出现menu_config界面,通过“TAB”键选择YES继续,直到安装完成

最后会发现安装在:/usr/lib/jvm/java-6-sun/目录下面

安装完后,需要手动设置JAVA_HOME, JRE_HOME, CLASS_PATH为JDK6的安装路径。

JAVA_HOME=/usr/lib/jvm/java-6-sun
JRE_HOME=${JAVA_HOME}/jre
export ANDROID_JAVA_HOME=$JAVA_HOME
export CLASSPATH=.:${JAVA_HOME}/lib:$JRE_HOME/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export JAVA_HOME;
export JRE_HOME;
export CLASSPATH;
HOME_BIN=~/bin/
export PATH=${PATH}:${JAVA_PATH}:${JRE_HOME}:${HOME_BIN};

2.安装开发过程中需要的一此开发包,命令如下所示:

$ sudo apt-get install git-core gnupg valgrind flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev

3.安装Repo

$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
刚开始执行curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo会出现如下错误:
root@ubuntu:~ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
--2013-04-21 04:30:42-- https://dl-ssl.google.com/dl/googlesource/git-repo/repo
Resolving dl-ssl.google.com... 74.125.128.91, 74.125.128.93, 74.125.128.136, ...
Connecting to dl-ssl.google.com|74.125.128.91|:443... failed: Connection refused.
Connecting to dl-ssl.google.com|74.125.128.93|:443... failed: Connection timed out.
Connecting to dl-ssl.google.com|74.125.128.136|:443... failed: Connection timed out.
Connecting to dl-ssl.google.com|74.125.128.190|:443... failed: Connection timed out.
Connecting to dl-ssl.google.com|2404:6800:4005:c00::5d|:443... failed: Network is unreachable.

解决办法:

打开 gedit /etc/hosts

添加如下红色加粗内容:

127.0.0.1localhost

127.0.1.1     ubuntu

74.125.237.1   dl-ssl.google.com

然后重复上述操作,出一如下,说明下载成功

root@ubuntu:~#curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
--2013-04-21 05:52:13-- https://dl-ssl.google.com/dl/googlesource/git-repo/repo
Resolving dl-ssl.google.com... 74.125.237.1
Connecting to dl-ssl.google.com|74.125.237.1|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 22889 (22K) [application/octet-stream]
Saving to: `repo'

100%[==============================================================================================================================>] 22,889     95.1K/s  in 0.2s   

 

2013-04-21 05:52:15 (95.1 KB/s) - `repo' saved [22889/22889]

4.下载android源码

USER-NAME@MACHINE-NAME:~$ mkdir Android
USER-NAME@MACHINE-NAME:~$ cd Android
USER-NAME@MACHINE-NAME:~/Android$
repo init -u https://android.googlesource.com/platform/manifest -b android-2.3.1_r1 USER-NAME@MACHINE-NAME:~/Android$ repo sync
$ mkdir ~/bin
$ export PATH=~/bin:$PATH
$ curl http://Android.git.kernel.org/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
在执行repo init -u https://android.googlesource.com/platform/manifest -b android-2.3.1_r1
时出现如下错误:
fatal: git 1.7.2 or later required
解决办法:
执行如下操作:
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git

重新执行repo init -uhttps://android.googlesource.com/platform/manifest -b android-2.3.1_r1又出现如下错误

error.GitError: manifests var:
*** Please tell me who you are.

Run

 git config --global user.email "you@example.com"
 git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'root@ubuntu.(none)')

根据提示,如下执行:

root@ubuntu:/opt/work/android/source# git config --global user.email "qiuyigui@126.com"
root@ubuntu:/opt/work/android/source# git config --global user.name "qiuyigui"
重新执行repo init -uhttps://android.googlesource.com/platform/manifest -b android-2.3.1_r1出现如下提示,选择y
Your identity is: qiuyigui <qiuyigui@126.com>
If you want to change this, please re-run 'repo init' with --config-name
 
Testing colorized output (for 'repo diff', 'repo status'):
 black   red      green   yellow   blue    magenta  cyan     white 
 bold    dim      ul      reverse 
Enable color display in this user account (y/N)? y
这回初始化成功了,最后会显示:
repo has been initialized in /opt/work/android/source
输入:repo sync开始下载源代码
error: Failed to connect to 2404:6800:4008:c00::52: Network is unreachable while accessing https://android.googlesource.com/platform/manifest/info/refs?service=git-upload-pack
fatal: HTTP request failed
error: Failed to connect to 2404:6800:4008:c00::52: Network is unreachable while accessing https://android.googlesource.com/platform/manifest/info/refs?service=git-upload-pack
fatal: HTTP request failed
 
curl: (7) Failed to connect to 2404:6800:4008:c00::52: Network is unreachable
 
curl: (7) Failed to connect to 2404:6800:4008:c00::52: Network is unreachable
 
curl: (7) Failed to connect to 2404:6800:4008:c00::52: Network is unreachable
 
curl: (7) Failed to connect to 2404:6800:4008:c00::52: Network is unreachable
error: Failed to connect to 2404:6800:4008:c00::52: Network is unreachable while accessing https://android.googlesource.com/platform/bootable/bootloader/legacy/info/refs?service=git-upload-pack
fatal: HTTP request failed
error: Failed to connect to 2404:6800:4008:c00::52: Network is unreachable while accessing https://android.googlesource.com/platform/bootable/recovery/info/refs?service=git-upload-pack
fatal: HTTP request failed
解决办法:

1.浏览器登录https://android.googlesource.com/new-password,并用gmail帐号登录(去谷歌注册);

2.点击网页上的“允许访问”,得到类似

1 machine android.googlesource.com login git-<userName>.gmail.com password <password>  2 machine android-review.googlesource.com login git-<userName>.gmail.com password <password>

3.把上面那段信息追加到~/.netrc文件结尾(请检查当前用户的权限,如果不存在此文件则自己新建一个);

4.下载地址的URI更改为https://android.googlesource.com/a/platform/manifest(中间加上了“/a”)。

5. repo init -u https://android.googlesource.com/a/platform/manifest -b android-2.3.3_r1

6. repo sync

即可下Android源码。

官方的说法是:因为访问基本是匿名的,为了防止连接过多(指内网/虚拟机),对同一IP地址的连接数做了一定的限制。看来是用gmail帐号进行认证。

这样的话,在公司网络内或者用虚拟机下载的话,会经常遇到这问题。

 

下载期间经常会出现如下错误:

android源码环境 makefile添加三方库 安卓源码编译环境搭建_android



出现这样情况时,等回到命令提示符时,继续输入(android支持断点续传):

repo sync

重复上述操作

最后出现如下显示,表明下载成功了:

android源码环境 makefile添加三方库 安卓源码编译环境搭建_git_02

这一步持续时间很长,整个源码+SDK共5G左右,我是下载了一个晚上才搞定,网速不给力啊。。。

5.编译Android2.3

先export Android_JAVA_HOME=$JAVA_HOME
$ cd ~/Android2.3
$ make -j4
 
 
在make的时候会提示出错:
(一)
************************************************************
You are attempting to build on a 32-bit system.
Only 64-bit build environments are supported beyond froyo/2.2.
************************************************************
因为Android2.3默认是64位的系统上编译,需要手动修改build/core/main.mk,把这个判断部分注释掉:
#ifneq (64,$(findstring 64,$(build_arch)))
#$(warning ************************************************************)
#$(warning You are attempting to build on a 32-bit system.)
#$(warning Only 64-bit build environments are supported beyond froyo/2.2.)
#$(warning ************************************************************)
#$(error stop)
#endif
(二)
重新make,如果是安装了JDK6版本,会又报错:
Docs droiddoc: out/target/common/docs/api-stubs
Could not load ‘clearsilver-jni’
java.library.path = out/host/linux-x86/lib
make: *** [out/target/common/docs/api-stubs-timestamp] Error 45
make: *** Waiting for unfinished jobs….
Could not load ‘clearsilver-jni’
java.library.path = out/host/linux-x86/lib
make: *** [out/target/common/docs/doc-comment-check-timestamp] Error 45
这是由于clearsilver在编译时如果检测到使用Java JDK 6,就使用64位编译,因为Google的一个员工更新了几个文件。这里可以看到详细的修改记录:http://android.git.kernel.org/?p=platform/external/clearsilver.git;a=commitdiff;h=d36910a8110d8377b22301274d2b5131a732a72b
修改这几个文件,该回到32位编译环境即可:
external/clearsilver/cgi/Android.mk
external/clearsilver/java-jni/Android.mk
external/clearsilver/util/Android.mk
external/clearsilver/cs/Android.mk

把编译选项-m64改成-m32即可

重新make,大概不到一个小时就make完了。