Ubuntu 10.10下Android源码编译环境的搭建

一、基于上一篇文章《Ubuntu10.10下Android开发环境的搭建》安装好JDK1.5,并配置好环境变量

java -version
  显示信息:
  java version "1.5.0_22"
  Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03)
  Java HotSpot(TM) Server VM (build 1.5.0_22-b03, mixed mode)
  则安装成功。


二、安装必备工具

1、GIT工具

        Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的分布式版本控制软件,它不同于Subversion、CVS这样的集中式版本控制系统。在集中式版本控制系统中只有一个仓 库(repository),许多个工作目录(working copy),而像Git这样的分布式版本控制系统中(其他主要的分布式版本控制系统还有BitKeeper、Mercurial、GNU Arch、Bazaar、Darcs、SVK、Monotone等),每一个工作目录都包含一个完整仓库,它们可以支持离线工作,本地提交可以稍后提交到服务器上。分布式系统理论上也比集中式的单服务器系统更健壮,单服务器系统一旦服务器出现问题整个系统就不能运行了,分布式系统通常不会因为一两个节点而受到影响。

2、Curl

        Curl是一个利用URL语法在命令行方式下工作的文件传输工具,它支持很多协议,包括FTP、FTPS、HTTP、HTTPS、TELENT等,我们需要安装它从网络上获取Repo脚本文件。

3、Repo

       因为Android是由kernel、Dalvik、Bionic、prebuilt、build等多个Git项目组成,所以Android项目编写了一个名为Repo的Python的脚本来统一管理这些项目的仓库,使得Git的使用更加简单。


在终端上,使用下面的命令安装:

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


安装repo脚本


在终端中执行:

cd ~

mkdir bin

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

export PATH=$PATH:~/bin

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

curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo

chmod a+x ~/bin/repo

三、获取Android源码

1、首先建一个目录,用于保存源码

mkdir ~/myandroid

2、使用下面命令获取源码:

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

这个过程会持续很长的时间(笔者下载了一天),下载完毕后会看到repo initialized in /android这样的提示,说明本地的版本库已经初始化完毕,并且包含了当前最新的sourcecode。

如果我们想拿某个分支版本的代码,而不是主线代码,需要使用-b参数指定branch的名字,比如:

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

如果我们只是想获取某一个project的代码,比如kernel/common,就不需要repo脚本了,直接使用Git工具即可,如果仔细研究 repo脚本会发现,repo脚本其实就是组织Git工具去获取各个Project并把它们组织到同一个项目Android内。

git clone git://android.git.kernel.org/kernel/common.git

我们上面使用repo脚本获取了各个项目,那么接下来就需要把整个Android代码树同步到本地,如下:

repo sync project1 project2 …

3、同步代码

repo sync。

四、编译Android源代码
进入android源码目录执行如下命令:
$make
这将显示如下信息:

xiongmc@xiongmc-pc:~/android/bin$  cd src-2.2/
xiongmc@xiongmc-pc:~/android/bin/src-2.2$ ls
bionic    cts          device      hardware  out       sdk
bootable  dalvik       external    Makefile  packages  system
build     development  frameworks  ndk       prebuilt
xiongmc@xiongmc-pc:~/android/bin/src-2.2$ make
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.2
TARGET_PRODUCT=generic
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=MASTER
。。。。。。。
。。。。
。。。
。。。。。
。。。。。。
这一过程很久(大概2个多小时,与自己cup有关)

五、在模拟器上运行编译好android

android SDK的emulator程序在android-sdk-linux_x86-1.0_r2/tools/下,emulator是需要加载一些后缀为.image 的文件,默认加载android-sdk-linux_x86-1.0_r2/tools/lib/images下的kernel-qemu(内核) ramdisk.img system.img userdata.img  这三个

编译好android之后,
emulator    程序在~/project/android/cupcake/out/host/linux-x86 /bin下,
ramdisk.img system.img userdata.img    文件则在~/project/android/cupcake/out/target/product/generic下

我们增加模拟器的环境变量
$vim ~/.bashrc
在.bashrc中新增环境变量,如下
#java 程序开发/运行的一些环境变量
export ANDROID_PRODUCT_OUT=~/project/android/cupcake2/out/target/product/generic
ANDROID_PRODUCT_OUT_BIN=~/project/android/cupcake2/out/host/linux-x86/bin
export PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN};

最后,同步这些变化:
$source ~/.bashrc

启动模拟器:
$emulator -image system.img -data userdata.img -ramdisk ramdisk.img
最后进入android桌面,就说明成功了。
out/host/linux-x86/bin下生成许多有用工具(包括android SDK/tools的所有工具),因此,可以把eclipse中android SDK的路径指定到out/host/linux-x86/bin进行开发了

================================================================

六、编译linux kernel(可选,主要是系统移植需要)
直接make android源码时,并没有make linux kernel。因此是在运行模拟器,所以不用编译 linux kernel。如果要移值android,或增删驱动,则需要编译 linux kernel
linux kernel的编译将在以后的文章中介绍。

七、编译单个模块(如果需要修改系统某些应用,那么就需要单个应用编译)
android中的一个应用程序可以单独编译,编译后要重新生成system.img
在源码目录下执行
$. build/envsetup.sh (注意:.后面有空格)
就多出一些命令:
- croot:   Changes directory to the top of the tree.
- m:       Makes from the top of the tree.
- mm:      Builds all of the modules in the current directory.
- mmm:     Builds all of the modules in the supplied directories.
- cgrep:   Greps on all local C/C++ files.
- jgrep:   Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- godir:   Go to the directory containing a file.
可以加—help查看用法
我们可以使用mmm来编译指定目录的模块,如编译联系人,具体操作如下:
$. build/envsetup.sh
$mmm packages/apps/Contacts/    
编完之后生成两个apk文件:
out/target/product/generic/data/app/ContactsTests.apk
out/target/product/generic/system/app/ Contacts.apk
可以使用make snod重新生成system.img
再运行模拟器

八、android SDK源码的编译【直接执行make命令是不包括make sdk的。make sdk用来生成SDK,这样,我们就可以用与源码同步的SDK来开发 android了】步骤如下:

1)修改/frameworks/base/include/utils/Asset.h
‘UNCOMPRESS_DATA_MAX = 1 * 1024 * 1024’ 改为 ‘UNCOMPRESS_DATA_MAX = 2 * 1024 * 1024’
原因是Eclipse编译工程需要大于1.3M的buffer

2)编译ADT(记住我们先编译adt后编译sdk)
    若下载的是cupcake源码需进入:development/tools/eclipse/scripts目录,如果下载的是主线代码,需要进入:sdk/eclipse/scripts目录(才会有build_server.sh脚本命令),执行如下命令

$export ECLIPSE_HOME=你的eclipse路径
$./build_server.sh 你想放ADT的路径

注意:在执行./build_server.sh命令时,会将out/host/linux-x86/目录下生成的sdk及我们之前make后生成的文件(ramdisk.img,userdata.img,system.img)给清除掉,这也就是我们为什么要先编译adt后编译sdk的原因。

3)执行make sdk。
$make sdk

编译很慢。编译后生成的SDK存放在out/host/linux-x86/sdk/目录下,此目录下有android-sdk_eng.xxx_linux- x86.zip文件和android-sdk_eng.xxx_linux-x86目录。android-sdk_eng.xxx_linux-x86就是SDK目录
注意:当用mmm命令编译模块时,一样会把SDK的输出文件清除,因此,最好把android-sdk_eng.xxx_linux-x86移出来

4)关于环境变量、android工具的选择
目前的android工具有:
A、我们从网上下载的SDK( tools下有许多android工具,lib/images下有img映像)
B、我们用make sdk编译出来的SDK( tools下也有许多android工具,lib/images下有img映像)
C、我们用make编译出来的out目录( tools下也有许多android工具,lib/images下有img映像)
那么我们应该用那些工具和img呢?
首先,我们不会用A选项的工具和img,因为一般来说它比较旧,也源码不同步。测试发现,如果使用B选项的工具和img,android模拟器窗口变小(可能是skin加载不了),而用C选项的工具和img则不会有此问题。
有些android工具依赖android.jar(比如android),因此,我们在eclipse中使用B选项的工具(SDK),使用C选项的 img。其实,从emulator -help-build-images也可以看出,ANDROID_PRODUCT_OUT是指向C选项的img目录的
不过,除了用A选项的工具和img,用B或C的模拟器都不能加载sdcard,原因还不清楚。

5)安装、配置ADT
安装、配置ADT请参考官方文档

(1) Eclipse IDE下载地址:http://www.eclipse.org/downloads/
(2) ADT安装地址:https://dl-ssl.google.com/android/eclipse ,注意安装时与eclipse的版本一致,通常JEE版本无法更新ADT,最好使用java Base版。

6)创建Android Virtual Device
编译出来的SDK是没有AVD(Android Virtual Device)的,我们可以通过android工具查看:
android list
输出为:
Available Android targets:
[1] Android 1.5
     API level: 3
     Skins: HVGA-P, QVGA-L, HVGA-L, HVGA (default), QVGA-P
Available Android Virtual Devices:
表明没有AVD。如果没有AVD,eclipse编译工程时会出错(Failed to find a AVD compatible with target 'Android 1.5'. Launch aborted.)
创建AVD:
android create avd -t 1 -c ~/sdcard.img -n myavd
可以android –help来查看上面命令选项的用法。创建中有一些选项,默认就行了
再执行android list,可以看到AVD存放的位置
以后每次运行emulator都要加-avd myavd或@myavd选项,这里eclipse才会在你打开的emulator中调试程序


注意:
这样,SDK和ADT就生成了,就按照官方文档把他们整合到Eclipse,这里不再细说了。
建个android的新工程,试试你自己编译的sdk。





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值