在Ubuntu7.10上编译android
转自老大blog:http://blog.csdn.net/fmddlmyy/archive/2008/10/29/3178462.aspx1 概述上个星期看到android开放源代码的消息,虽然觉得Google的这个动作会对业界产生很大影响,但没有时间仔细看,只浏览了 Project layout。今天上午一个网友在mail中说已经编译、运行过android。我趁着中午休息时间,在一个Ubu
转自老大blog:http://blog.csdn.net/fmddlmyy/archive/2008/10/29/3178462.aspx
1 概述
上个星期看到android开放源代码的消息,虽然觉得Google的这个动作会对业界产生很大影响,但没有时间仔细看,只浏览了 Project layout。今天上午一个网友在mail中说已经编译、运行过android。我趁着中午休息时间,在一个Ubuntu7.10的虚拟机上编译、运行了一下。
我在这个虚拟机上编译过openmoko、poky。相对于这两个使用OpenEmbedded的平台,android的编译要简单一些,快一些。 我在编译openmoko和poky时,将所有下载包都保存在一个目录中,将编译目录的sources子目录指向这个目录。这样做,一方面即使以后有些链 接失效,也还可以编起来(其实编译时都不需要连接外网);另一方面在重新编译时,不用重新下载,可以加快编译速度。即使这样,完全编译一次poky也要一 个晚上。编译android时,下载用了1个小时,编译也只需要1个小时。
2 编译中的两个小问题
2.1 python和JDK
Google网站对编译过程的介绍还是很清晰的。不过在介绍其它软件包时,都给出了apt-get命令,却单独给出了python和JDK的链接地 址,容易对读者产生误导,以为要手工安装这两个软件。其实这两个软件也应该通过apt-get安装。特别是python,如果从源代码安装,可能因为依赖 其它软件,导致一些组件编译失败,影响android的编译。而且python 2.6的源代码包没有提供make uninstall,卸载比较麻烦。其实我们只需要一个apt-get命令,就可以安装所有依赖的软件。
2.2 "fatal: git 1.5.4 or later required"
在Ubuntu7.10上执行repo init时,会出现"fatal: git 1.5.4 or later required"的错误提示。在Ubuntu8.04上编译没有这个问题。下面的流程里会介绍怎样解决这个问题。
3 在Ubuntu7.10上的编译流程
3.1 安装依赖的软件
执行
sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl python sun-java5-jdk valgrind
3.2 安装脚本repo
cd ~
mkdir bin
export PATH=$PATH:~/bin
curl http://android.git.kernel.org/repo >~/bin/repo
chmod a+x ~/bin/repo
将repo所在目录加到PATH后就可以在其它目录直接执行。
3.3 初始化代码仓库
我把/ui/mydroid作为工作目录,创建目录后在这个目录执行:
repo init -u git://android.git.kernel.org/platform/manifest.git
如果返回"fatal: git 1.5.4 or later required",就执行3.4。否则执行3.5。
3.4 “fatal: git 1.5.4 or later required”的解决
3.4.1 删除git-core,添加apt源
首先执行
sudo apt-get remove git-core
再编辑apt的源文件
sudo vi /etc/apt/sources.list
在最后添加
deb http://www.backports.org/debian/ etch-backports main
deb-src http://www.backports.org/debian/ etch-backports main
然后执行
sudo apt-get update
更新源。这时如果出现没有公钥的错误提示:“由于没有公钥,下列签名无法进行验证: NO_PUBKEY EA8E8B2116BA136C”,就执行3.4.2。否则执行3.4.3。
3.4.2 安装公钥
执行gpg命令下载公钥:
sudo gpg --keyserver wwwkeys.pgp.net --recv-keys EA8E8B2116BA136C
sudo gpg --export -a EA8E8B2116BA136C > /tmp/key
添加公钥:
sudo apt-key add /tmp/key
3.4.3 更新git-core
执行:
sudo apt-get update
sudo apt-get install debian-backports-keyring
sudo apt-get update
sudo apt-get -t etch-backports install git-core
然后再执行:
repo init -u git://android.git.kernel.org/platform/manifest.git
应该就可以了。
3.5 下载代码
执行
repo sync
下载代码。我从13:30执行这条命令,14:30完成下载。
3.6 编译
执行
make
编译。我从14:30开始编译,15:40左右完成。编译的最后输出是:
Install system fs image: out/target/product/generic/system.img
Target ram disk: out/target/product/generic/ramdisk.img
Target userdata fs image: out/target/product/generic/userdata.img
4 执行
可以用模拟器运行一下刚才编译的映像。从网上下载一个android-sdk-linux_x86-1.0_r1.zip,我将其放到~/android目录解压。在路径中增加sdk的tools目录:
export PATH=${PATH}:~/android/android-sdk-linux_x86-1.0_r1/tools
通过环境变量告诉模拟器映像所在的目录:
export ANDROID_PRODUCT_OUT=/ui/mydroid/out/target/product/generic
最后执行:
emulator
就可以了。可以用-skin参数选择皮肤。sdk的tools/lib/images/skins目录中是sdk自带的皮肤。下面是两个运行的截图:
相对于android的java框架,我更喜欢GTK和C。但不得不承认android的UI比openmoko做得强多了。
5 结束语
可以在~/.bashrc的最后添加:
export PATH=${PATH}:~/bin:~/android/android-sdk-linux_x86-1.0_r1/tools
export ANDROID_PRODUCT_OUT=/ui/mydroid/out/target/product/generic
自动设置编译、运行环境。
这两天晚上正在改gsmd的中文短信bug,没时间仔细看android的编译系统,感觉上应该比OpenEmbedded简单。其实 OpenEmbedded用习惯了也不错,就是不够精简,速度慢一些,占用空间大一些。编译android的工作目录有3.5个G。我编译poky的目录 有10.59个G,编译openmoko的目录有11.6个G。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)