您的位置:首页 > 移动开发 > Android开发

Ubuntu 10.04环境下载&编译Android-2.2.1 (froyo) 源代码

2011-05-12 09:57 796 查看
应一个在电信做android开发的哥们要求,帮忙把Goole未在sdk中打包的API(即:mms彩信功能),打包到自己编译的
sdk里面。偶用了差 不多5天+5夜的时间,虽然没有成功。但对于Ubuntu 10.04环境下载&编译Android-2.2.1
(froyo)源代码这个过程是相当熟悉啦,来来回回,在虚拟机里面做了5遍!其中的辛苦与开心只有自己才有深刻的体会。现在分享给大家,同时也感谢网络
上的筒子们。

1.
前言

本文叙述了如何从零开始搭建基于Google官方Android
2.2.1(froyo)源码的开发环境,包括如何下载源代码、编译源代码,以及在模拟器中运行编译生成的镜像。文中开发机是基于Ubuntu
10.04的,同样适用于其他版本的Ubuntu。现在需要弄清楚一下几点,防止后面出现误操作: 下载源代码是用参数:repo init -u
git://android.git.kernel.org/platform/manifest.git -b froyo
(下载的是2.2.1
版本,编译环境操作系统必须
32
位的,
jdk1.5
版本

—jdk1.5没有64位版本)。如果是没有带参数的下载源代码,将会下载所有的源代码,编译环境要求:操作系统64位,jdk1.6,(偶是2010年
10月15日做)但很有可能会出现交叉编译工具错误:“ /bin/bash:
prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-gcc: 没有那个文件或目录
”(实际上是有arm-eabi-gcc这个文件的,偶怀疑是版本问题–32位的,而环境要求是
64
位的
—–
下载全部代码


2.
下载
JDK 1.5

(不建议此下载方式,防止配置环境参数出错。建议用
apt-get install
方式,请跳转到:第
4



编译Android源码需要JDK1.5版(主要是需要其中的javadoc),1.6版是 不兼容的。JDK1.5已经停止支持,其最 终的版本是JDK 5.0 Update 22。

可从Sun官网上下载:

http://java.sun.com/javase/downloads/5u22/jdk

选择平台Linux,勾选同意许可协议:

单击Continue,在弹出的页面中一共有两个下载,选第一个jdk-1_5_0_22-linux-i586.bin下载:

3.
部署
JDK 1.5

3.1
解压缩
JDK

以下命令均在root账户上执行,非root账户执行某些命令可能需要加sudo。

将jdk-1_5_0_22-linux-i586.bin放在root目 录下。进入该目录:

cd ~

然后赋予该bin文件可执行属性:

chmod +x jdk-1_5_0_22-linux-i586.bin

再执行安装(注意前面有./):

./jdk-1_5_0_22-linux-i586.bin

跳过协议阅读。

最后一行:

Do you agree to the above license terms? [yes or no]

键入yes,然后回车,开始解压。默认会解压到当前目录下的jdk1.5.0_22目录下(此处是~/ jdk1.5.0_22)。

3.2 JDK
版本切换

如果同时需要使用JDK1.6版做应用开发,则系统中将同时存在JDK1.5和JDK1.6。 因此需要实现能够在不同版本间切换。如果不使用JDK1.6,请做完1.5版 的设置后跳至3.3节。

这里使用update-alternatives命令实现。

首先为JDK1.5版生成可选配置选项:

update-alternatives –install /usr/bin/jdk jdk /root/jdk1.5.22 255

(sudo update-alternatives –install /usr/bin/jdk jdk /home/ynb/jdk1.5.0_22 255)

/usr/bin/jdk是符号链接,它指 向/etc/alternatives/jdk(由第2个参数
给出的),/root/jdk1.5.22(/home/ynb/jdk1.5.0_22)是 实际目的链接,255是优先级(任意整数,
在automatic mode自动模式 时,数字大的优先级较高,被选为默认配置选项)。

然后再为JDK1.6版生成(如果有JDK1.6的话。不使用JDK1.6的请跳至3.3节):

update-alternatives –install /usr/bin/jdk jdk /root/jdk1.6.20 0

这样,默认jdk版本即为1.5版。 需要切换到1.6版时,请使用update-alternatives –config jdk

3.3
配置
JDK
环境变量

下面开始配置环境变量。

在终端中执行:sudo gedit ~/.bashrc

修改.bashrc文件,添加下面语句:

#set java environment

export JAVA_HOME=/usr/bin/jdk

export JRE_HOME=JAVA_HOME/jre

export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

该段代码最好设置在文件的尾部。

保存文件。在终端中执行source ~/.bashrc

重启系统请使用java –version检查JDK是否 配置正确。

4.

apt-get install
方式安装
JDK1.5


Android 要求的 jdk 1.5,而Ubuntu10.4的源里只有JDK1.6. 如果安装了jdk1.6请先卸载:

$sudo apt-get remove remove openjdk-6-jdk

$sudo apt-get remove remove openjdk-6-jre

$sudo apt-get remove remove openjdk-6-jre-headless

安装jdk1.5目前网上解决方法有两种:

解决方法一
(
建议
)

安装JDK1.5

1) 根据官方文档里所说,源代码的编译必须使用JDK5才能编译的了,所以这里偶使用jdk5

2) 需要先更新源,在终端里执行 sudo vim /etc/apt/sources.list

3) 在source.list里把以下2行拷贝到文档最后面:

deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse

deb-src http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse

deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse

deb-src http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse

保存退出。

4) 执行 sudo apt-get update 更新源.

5) 配置编译环境并下载JDK5:sudo apt-get install sun-java5-jdk

解决方法二: 安装JDK 1.6 , 修改Android源文件。

1) 安装jdk 1.6,修改<src_top/build/core/make.mk>(如果2.0版本源码请修改<src_top/build/core/main.mk>)

在文件中搜索并分别把:

java_version := $(shell java -version 2>&1 | head -n 1 | grep ‘[ "]1.5[. "$$]‘)

javac_version := $(shell javac -version 2>&1 | head -n 1 | grep ‘[ "]1.5[. "$$]‘)

两行改成:

java_version := $(shell java -version 2>&1 | head -n 1 | grep ‘[ "]1.6[. "$$]‘)

javac_version := $(shell javac -version 2>&1 | head -n 1 | grep ‘[ "]1.6[. "$$]‘)

即可。

推荐使用第一种解决方法。

5
.
安装其他必备组件

在终端上,使用下面的命令安装:(前面的1、2、3步骤都可以省略啦)

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

因为JDK1.5在前面已经单独安装过了,因此此处apt-get install命令行中没有加入sun-java5-jdk。

6
.
下载
Android
源代码

6
.1
安装
repo
脚本

首先安装repo。在当前用户:~目 录下新建一个bin目录。在终端中执行:

cd ~

mkdir bin

然后,向PATH中添加bin路 径:

export PATH=$PATH:~/bin

然后执行下面两行指令,下载repo脚本并修改可执行属性:

curl https://android.git.kernel.org/repo
>~/bin/repo

chmod a+x ~/bin/repo

6
.2
初始化
repo

首先建立一个目录用来存放Android源代码:

mkdir mydroid

cd mydroid

然后用最新的列表执行初始化。这里偶下载android 2.2.1(froyo),因此加了参数 –b froyo:(android 2.2.2(froyo)源码下载:2G多

repo init -u git://android.git.kernel.org/platform/manifest.git

-b froyo
)

(下载2.1_r2源码

repo init -u git://android.git.kernel.org/platform/manifest.git –b android-2.1_r2

下载全部源码:repo init -u git://android.git.kernel.org/platform/manifest.git)

(下载2.0源码:

repo init -u git://android.git.kernel.org/platform/manifest.git –b eclair )

(上面下载2.0时有个莫名其妙的问题:

ynb@ynb-pc:~/bin$ repo init -u git://android.git.kernel.org/platform/manifest.git –b eclair

Usage: repo init -u url [options]

出现上面问题,删除mydroid目录:rmdir mydroid ; mkdir mydroid2.0 ; cd mydroid2.0;

再:repo init -u git://android.git.kernel.org/platform/manifest.git -b eclair 就可以了)

(如果能通过浏览器浏览到android源码的主页,但运行repo init或repo sync的时候,却没法下载源码,形如:

只需要把git开头的地址改为http即可:

[1]

repo init -u http://android.git.kernel.org/platform/manifest.git -b froyo

[2]修改manifest.git里的地址,也是把git://改为http://

vim .repo/manifest.git

如:

<?xml version=”1.0″ encoding=”UTF-8″?>

<manifest>

<remote name=”korg”

fetch=”http://android.git.kernel.org/”

review=”review.source.android.com” />

<default revision=”froyo”

remote=”korg” /> )

这中间会问到你的名字和Email。如果你打算上传代码,Email须是一个Google账户。

repo初始化成功后会看到类似于下面的提 示:

repo initialized in /home/(当前用户名)/mydroid

最后执行$repo sync开始同步代码。过程比较漫长,下载速度取决于你的网速(偶的3-4小时左右),中间有可能遇到断线,重新执行repo sync即可断点续传。

7
.
编译
Android
源代码

7
.1
编译生成镜像

$ cd ~/directory

$ source build/envsetup.sh

$ lunch # select 1- generic-eng when the menu popup

$ make -j4 # 4 means the number of concurrent jobs the build can do. This is to speed up the building process

首次编译非常耗时,取决于机器配置,大约需要2-3小时。有可能会出现:“Permission denied (权限拒绝的提示)”
请命令赋予权限:$cd 无权限文件的当前目录 回车; $sudo chmod -R +rwx * 回车;
完成后镜像生成在/root/mydroid/out/target/product/generic下:android源码编译后得到system.img
,ramdisk.img
,userdata.img

像文件。其中,
ramdisk.img是emulator的文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数
据,emulator加载这3个映像文件后,会把 system和 userdata分别加载到 ramdisk文件系统中的system和
userdata目录下。

7.2
编译、配置
Android SDK

$sudo make sdk

生成对应于该版本源代码的sdk,此过程用的时间偶的是10多分钟。

$sudo make PRODUCT-sdk-sdk

生成对应于该版本源代码的用于生产环境的sdk,此过程用的时间偶的是1个多小时。

自己编译的SDK位置是:~/mydroid/out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86


8
.
在模拟器中运行编译的镜像

打开终端,执行android脚本:

$android

出现下图所示窗口:

选择左边第一项Virtual Devices,然后在右边选择New,新建一个AVD。

Name:AVD的名称,随便取,但只能包含字母和数字以及点、下划线和连字符, 这里取名test。

Traget:目标SDK版本,这里选自己编译的2.1-r1版Android SDK。

SD Card:SD卡。暂且不填,待需要时再设置。

Skin:皮肤(模拟器屏幕分辨率)。

Hardware:使用默认即可

然后点Create AVD,就创建好了一个AVD。点击Start即 可启动模拟器,其运行的是自己编译的镜像。

若以后要再次启动此AVD,请在终端中运行:

emulator –avd test 或 者emulator @test
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐