一
.PC
工作环境准备
1.
从
Ubuntu
官方主页
www.ubuntn.com.cn
下载
Ubuntu8.04
桌面版,然后完全安装。
2.
打开
ubuntu
终端,输入
sudo
apt-get install
命令来通过
ubuntu
服务器在线安装需要使用的软件,这里不需要选
择软件版本,
ubuntu
服务器会做自动的版本匹配。待安装的软件有
flex
,
bison
,
gperf
,
libsdl-
dev
,
libesd0-
dev
,
libwxgtk2.6-dev
,
build-essential
,
python
,
valgrind
,
curl
,
git
。执行命令后使用
which
命令验证是否
安装成功,注意,如果缺少部分软件,或者安装没有成功,编译通常都会遇到问题,无法完成。
3.
从
www.java.sun.com
下
载
JDK_1.5.0_18.bin
,在
ubuntu
终端中直接执行该程序,默认会被安装
到
/usr/JDK_1.5.0_18
路径下。在终端中输入
#java–version,
如果显示出
java
版本信息,说明
java
安装成功。
这里没有选择
ubuntu
的自动安装,原因主要是有时候下载速度很慢,而且安装过程有时候会出现问题,反正这样从
SUN
的官网下载安装也很简单,呵呵。
4
.使用
export
来设置环境变量:
#export JAVA_HOME=/usr/jdk1.5.0_18
#export
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#export PATH=$PATH:$JAVA_HOME/bin
由于因为其它工作需要的原因,这里我还安装了
1.6
的
JDK
,所以使用
export
的方式来动态改变环境变量,而没有直
接写到
/etc/bash.bashrc
中,这个大家可以根据自己的具体情况来选择。
#export
PATH=/usr/local/git/bin:/usr/local/git/libexec/git-core:$PATH(
对
git
工具进行设置,否则无法正
常使用
)
二
.
代码下载
这里的所有代码指定为
Android
的
cupcake
版本,更新日期为
2009
年
4
月
8
日,这个版本是
Android
一个相对比较新的
版本。
1.
创建工作目录:
#mkdir /home/android
#cd /home/android
#mkdir bin
2
.下载安装
repo
版本管理工具:
#curl http://android.git.kernel.org/repo
> /home/android /bin/repo
#cd bin
#chmod a+x repo
由于
Android
项目官方采用
repo
来做同步管理,所以这里只有使用
repo
才可以做代码同步。
3.
准备下载
Android
:
#cd /home/android
#./bin/repo init -u
git://android.git.kernel.org/platform/manifest.git –cupcake
通常情况下会出现
error
提示(如果是以前没有创建过
repo
账户的话),这个错误可以忽略。最后的
-cupcake
就是
为了下载
cupcake
版本,如果不加的话,下载的是
master
版本,
master
版本属于开发测试版本,很多功能还不稳定
4
.配置
repo
帐户:
#git config --global user.email "xxxxx@xxxxxxx
"
#git config --global user.name
"xxxxxx"
邮箱地址填有效邮箱即可,我试过,其实这步跳过也没有问题。
5
.下载源码:
#repo sync
这个操作就是下载整个
Android
的源码到本地,具体花费时间和网速有关,
cupcake
版本源码大概
1.3G
左右。进
入
/home/android/
可以看到
Android
的源码目录如下:
--repo --
主要是同步管理所用到的一系列文件
--bionic --Android
编译过程所需要的一些库
--bootable --
负责启动和备份的一些文件
--build --
最主要的一些
makefile
和编译配置文件
--dalvik --
经过
Google
优化了的
java
虚拟机
--development --
开发用的一些文件夹,包括模拟器和工具等
--external --Android
工程中引入的外部功能库
--frameworks --
中间件部分
--hardware --
和硬件有关的一些支持文件,包括
wifi
,电信模块等
--kernel --
经过了优化和修改的
linux
内核
--packages --
所有的上层应用包
--prebuild --Android
编译工具所在目录
--system --
一些系统级文件
三
.
系统和开发工具编译
1.
系统编译
Android
文件系统由于已经自带了经过优化的交叉编译工具,并且为所有的源码都提供了经过验证的
makefile
,所
以系统的整体编译相对简单,官方发布的版本中基本功能都已经包含进了
makefile
中,但是我下载的版本的中文
的输入法没有被引入,这里做适当修改:
#cd /home/android/build/target/product/
#gedit
generic.mk
打开这个文件后,在
PRODUCT_PACKAGES
中,加入
PinyinIME,
然后保存退出。这样在整体编译的时候就会把中文输入
法也编译进
system
中了。
修改完成后:
#cd /home/android/
#make
第一次进行整体编译,这个过程大概持续
2
到
3
小时,默认情况下,会在
/home/android/
目录下生成一个
out
文件夹
,所有的编译生成物都在这一目录下。如果想更改生成文件的目录,请参考
/build/buildspec.mk.default
文件中
的说明和选项,很简单,相信大家都能看懂。如果编译过程中出现问题,请自行检查上面
PC
工作环境准备部分中是
否哪里 出了问题,就不要在论坛里反复问了,因为这样的问题应该是自己参考这个帖子后可以完全自己解决的。
2.
开发工具的编译
Android
提供了完整的开发工具和交叉编译工具,这些都包含在了源码内,所以只要对源码正确编译,就可以获得
丰富的开发工具,并且
Android
的移植工作也需要这些工具的支持。
编译
Android
开发工具的步奏如下:
#cd /home/android/
#make sdk
如果出现无法正常编译的情况,请检查
JDK1.5.0_18
的环境变量配置是否成功。正常情况下最后在
/home/android/
目录下会生长一个
out
文件夹。
#cd /out/host/linux-x86/sdk/
可以看到这里有了一个名叫
android-sdk_eng.root_linux-x86
的文件夹,这个文件夹基本包含了
Android
的模拟器
和所有的开发调试工具。打开这个文件夹,可以看到这里主要由以下几部分组成:
--add-ones --
需要增加的新工具路径
--docs --
关于模拟器和各种开发工具的说明等
--platform --
模拟器和开发工具需要的文件
--tools --
模拟器和开发工具的应用程序
四
.
模拟器使用和文件系统提取
1.
模拟器使用
进入
~/android-sdk_eng.root_linux-x86/tools
目录下,这里有很多
Android
的工具,其中模拟器对应的应用程
序是
emulator
。下面是正确使用模拟器的步奏:
#./android create avd –n NO1 –t 1
这个命令会进入创建
avd
的过程,按自己的需要做出一些选择后,名称为
NO1
的
avd
就创建成功了,以后可以通过这
个创建的
avd
来使用模拟器。
1.4
之前的版本不需要这样创建,
1.5
版本后不正确创建是无法使用的。
#./android list avd
输入命令来检查创建是否成功
,
如果成功会列出来。
#./emulator./android create avd –n NO1 –t 1 –avd NO1
启动刚才创建的名为
NO1
的模拟器,使用的内核,文件系统等均使用默认的,即
~/android-sdk_eng.root_linux-
x86/platform/
路径下的内核和文件系统。没什么问题的话,我们就可以看到
Android
操作系统的虚拟界面了。
2.
使用自己编译的系统
Android
可以运行在开发板上的文件系统的提取需要依靠模拟器,具体的操作步奏如下:
#cd /home/android/out/ android-sdk_eng.root_linux-x86/tools/
#./mksdcard –l 200M /home/sdcard.img
这里使用
mksdcard
开放工具在
/home
目录下建立一个
200M
的
sdcard.img
,用于模拟器中数据和外部数据的交互,虚
拟
SD
卡的大小不应该小于
100M
,否则在后期的文件系统打包过程中,有可能会有
SD
卡存储空间不够的问题。
#./android create avd –n cupcake –t –c /home/sdcard.img 1
创建一个名为
cupcake
的,附带有
sdcard
的虚拟设备。
#./emulator –avd cupcake –sysdir
/home/android/out/target/product/generic –data
/home/android/out/target/product/generic/userdata.img
-ramdisk
/home/android/out/target/product/generic/ramdisk.img –kernel
/home/android/prebuild/android-
arm/kernel/kernel-qemu
使用名为
cupcake
的虚拟设备启动模拟器,并规定系统,数据等的映象文件路径,模拟器内核采用
prebuild/android-arm/kernel/kernel-qemu
。当然也可以使用自己编译的内核镜像,关于如果编译内核的问题
会 在以后陆续发贴说明。
打开一个新的终端进行操作:
#cd /home/android/out/ android-sdk_eng.root_linux-x86/tools/
#./adb remount
这里使用
adb
工具的
remount
选项来使模拟器中的
system
目录权限改为可读写。
#./adb push tar /system/bin
这里使用
adb
工具的
push
指令将提前使用
busybox
做好的
tar
应用程序加入到模拟器的
/system/bin
目录下。关于
busybox
的使用这里不作介绍,网上太多了,呵呵
#./adb shell
这里使用
adb
工具进入到模拟器的
shell
中。
进入到
Android
模拟器的
shell
中操作如下:
#tar xvf /sdcard/system.tar /system
#tar xvf
/sdcard/userdata.tar /data
这里使用前面加入到模拟器中的
tar
应用程序来对
system
和
data
目录下所有内容进行打包,并存储到
sdcard
里。操
作结束后,进入
sdcard
目录下查看是否有了
system.tar
和
userdata.tar
文件,如果有,则证明打包成功。
#exit
退出
shell
,并关闭模拟器。
#mount –o loop sdcard.img /mnt
#cd /mnt
这里将虚拟
SD
卡挂载在
/mnt
目录下,进入
/mnt
目录后,就可以将
system.tar
和
userdata.tar
拷贝出来,文件系统的
提取完成。
经过测试,发现其实使用
android
提供的
mkyaffsimage
直接对
/out/target/product/generic/system
目录
进行打包
,制作出
system.img
也完全可以使用,不过不知道
userdata.img
如何制作,希望有人可能指点。使用
mkyaffs2image
制作文件系统映像时要注意的是一些配置文件的权限问题,比如
/system/usr/keylayout
下的文件
权限就有问题,需要修改,否则生成的映像在模拟器中加载后,键盘等无法正常使用。
最后,要说的是,新加入
android
的朋友们遇到问题我个人建议最好不要立刻就问,毕竟是个
80
%以上都开源的系
统,不妨自己尝试解决问题,到论坛逛逛,在网上搜索下,或者自己读下源码,都是一种提高。拿到的资源其实都
是一样的,学到的东西,得到的锻炼却是不同的。
昏天暗地的花了两天时间
,
终于在
Fedora
8
上成功编译了
android
1.5,
和大家分享一下编译的经验
一
准备编译环境
Fedora 8
已经包含了编译
android
时所需的大部分开发包
,
我们还需要安装
git
和
gperf.
开始终端
,
敲入下面的命令
:
$
yum install git-core
$
yum install gperf
Fedora 8
自带的
java
开发包是
JDK6,
而编译
nadroid
时需要
JDK5,
否则在
make
sdk
时会出现错误
.
可以从
sun
网站下载
jdk-1_5_0_18-linux-i586-rpm.bin
,
我下载到了
opt
目录下
.
在终端上敲入如下命令
:
$
cd /opt
$ chmod
a+x jdk-1_5_0_18-linux-i586-rpm.bin
$ ./jdk-1_5_0_18-linux-i586-rpm.bin
文件会在
/opt
下自动生成
jdk1.5.0_18
子目录
,
并解压
.
然后需要设置
JAVA
主目录
,
编辑
/etc/bashrc
文件
:
$ vi
/etc/bashrc
点击
insert
或
i
键
,
进入
insert
模式
,
在文件末尾添加
,
export
JAVA_HOME=/opt/jdk.1.5.0_18
export
PATH=$JAVA_HOME/bin:$PATH
export
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
点击
esc,
进入命令模式
,
输入
":wq",
然后敲入
reboot
重新启动
.
启动后
,
开启终端
,
输入
"java
-version",
如果提示当前版本为
1.5.0_18,
则安装成功
.
二 下载源代码
先要下载
repo,
如果以
root
用户登陆
,
则可以将
repo
下载
/root/bin
目录下
(
也可以下载
/home/bin
目录下
,
但要将目
录加入到
PATH
中
):
$ curl
http://android.git.kernel.org/repo > /root/bin/repo
$ chmod
a+x /root/bin/repo
然后在
home
下建立
mydroid
文件夹
,
当然可以在其他你喜欢的目录下建立
:
$ cd
/home
$ mkdir
mydroid
$ cd
mydroid
输入以下命令
:
$ repo
init -u git://android.git.kernel.org/platform/manifest.git
不出意外的话
,
完成后应该显示
"repo
initialized in /mydroid".
最后输入
"repo
sync"
开始下载源代码
.
工程很大
,
只是下载代码的话需要留出
2G
以上的空间
,
如果还要编译那就需要留出
6G
以上的空间
.
三 编译
下载完成后进入源代码目录
,
开始编译
,
如下
:
$ cd
/home/mydroid
$ make
完成后会生成
system.img
等文件
.
由于
android1.5
版本
SDK
的目录结构有所变化
,
所以
ADT0.8.0
不能再使用了
,
我们需要自己编译
ADT:
$ ./development/tools/eclipse/scripts/build_server.sh
/home
"/home"
是编译好
ADT
后的输出目录
,
可以指定其他你喜欢的目录
,
在这个过程中可能会自动下载
eclipse,
貌似是由于没有设定
ECLIPSE_HOME
环境变量的原因
,
不过没有细究
:).
最后需要
生成
linux
下
的
SDK,
如下
:
$ make
sdk
成功后
,
会在
./out/host/linux-x86
下生成
sdk
文件夹
,
其中包含了我们需要的
SDK.
注意将
SDK
目录加入到
PATH
下
,
修改
/etc/bashrc,
加入
export
PATH=/home/mydroid/out/host/linux-x86sdk/android-sdk_eng.root_linux-x86/tools:$PATH
四
linux
上运行
需要卸载
eclipse
上原来的
ADT0.8.0(
如何卸载就不说了
,
不过要注意卸载干净
,ADT
Editor
也一并卸载
).
启动
android1.5
的
emulator
时需要
avd
文件
,
先输入
"android
list targets"
取得
target
ID,
例如为
1,
然后
,
$ android
create avd -n my_avd -t 1
创建
avd
文件后
,
即可启动
emulator,
$ emulator
-avd my_avd
启动很慢
,
要耐心等待
.
五 生成
window
下
SDK
需要将
mydroid
目录和编译的
ADT,
复制到
windows
下
,
我是在
window
xp
下使用
explore2fs
读取
linux
分区进行的
复制
.
然后安装
cygwin,
注意默认的文本类型要设置为
DOS/text,
这些开发包
autoconf,
bison, curl, flex, gcc,
g++,git,gnupg,
make, mingw-zlib, python, zip, unzip
都要选上
,
不要选择
readline.
打开
development/build/tools/make_windows_sdk.sh
文件
,
找到
"SDK_NUMBER=`echo
$filename | sed -n 's/^.*_/([^_./]/+/)_[^_.]*/..*$//1/p'`",
修改为
#SDK_NUMBER=`echo
$filename | sed -n 's/^.*_/([^_./]/+/)_[^_.]*/..*$//1/p'`
SDK_NUMBER=1.5
然后在
cygwin
中输入以下命令
:
$ cd mydroid
$ mkdir
-p out/host/windows-x86/sdk
$ development/ build /
tools / make_windows_sdk.sh out / host / linux - x86 / sdk /
android-sdk_eng.root_linux-x86.zip out / host / windows - x86 /
sdk
同样在
eclipse
中安装我们编译的
ADT,
指定
sdk
目录
.
启动
emulator
之前还要生成
avd
文件
.
六 我上传了
,
可以下载
我将我编译的版本
android1.5
压缩后上传到了
rayfile
中
,
大家可以下载
.
文件中的
android-eclipse-v200904252140.zip
就是编译好的
ADT.