Ubuntu下android源码下载与编译

用虚拟机来创建一个Ubuntu环境,在这里虚拟机用的是VMware,Ubuntu选择的是10.04版本,Android下载的是4.0.3编译时要确保系统的内存在1.2GM以上,且有足够的硬盘可用空间,否则会编译失败终止。Android官方提示:

Note:ItisalsopossibletobuildAndroidinavirtualmachine.IfyouarerunningLinuxinavirtualmachine,youwillneedatleast16GBofRAM/swapand30GBormoreofdiskspaceinordertobuildtheAndroidtree.(如果用虚拟机,要保证16G的swap空间和30G的硬盘空间)

一、获取Android源代码

因为Android是由Kernel、Dalvik、Bionic、Prebuilt、build等多个项目组成,如果我们分别使用Git来逐个获取显得很麻烦,所以Android项目编写了一个名为Repo的Python的脚本来统一管理这些项目的仓库,repo用Python脚本写的调用git的一个脚本,主要功能是下载、管理Android项目的软件仓库。使得项目的获取更加简单。在Ubuntu8.04上安装Git只需要设定正确的更新源,然后使用apt-get就可以了,apt-get是一条Linux命令,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。

1、安装git和curl

进入Linux,打开终端,在终端窗口敲下面的命令:

sudoapt-getinstallgit-corecurl

2、安装repo脚本

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

cd~

mkdirbin

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

exportPATH=$PATH:~/bin

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

curlhttps://android.git.kernel.org/repo>~/bin/repo

是通过cURL来下载Repo脚本,保存到~/bin/repo文件中

chmoda+x~/bin/repo

给~/bin/repo赋给repo执行权限

3、初始化repo

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

mkdirmydroid

cdmydroid

repoinit-ugit://android.git.kernel.org/platform/manifest.git

把Android当前主线上最新版本的所有的sourcecode拿下来

如果想拿某个branch而不是主线上的代码,我们需要用-b参数制定branch名字,比如:

repoinit-ugit://android.git.kernel.org/platform/manifest.git-bcupcake

4、同步版本

使用reposync命令,就可以把整个Android代码树做同步到本地

能还有经历下载中断的情况,这时只要重新执行reposync就可以了。

如果是第一次运行reposync,则这个命令相当于gitclone,会把repository中的所有内容都拷贝到本地。如果不是第一次运行reposync,则相当于gitremoteupdate;gitrebaseorigin/branch.reposync会更新.repo下面的文件。如果在merge的过程中出现冲突,这需要手动运行

gitrebase--continue

二、编译Android源代码

1、安装java

jdk6是通过手动解压安装的。先到官方网站下载一个jdk6的安装包,url如下:

http://download.oracle.com/otn/java/jdk/1.5.0_22/jdk-1_5_0_22-linux-i586.bin

1)下载完成后即安装

sudochmod+xjdk-6u30-linux-i586.bin

sudo./jdk-6u30-linux-i586.bin

2)设置java环境

#setjavaenvironment

exportJAVA_HOME=/home/mfcai/jdk1.5.0_22

exportJRE_HOME=$JAVA_HOME/jre

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

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

3)设置完成后重启

2、编译源码

切换到android源码根目录下,执行$sudomake即可。首次编译非常耗时,取决于机器配置,但这个过程真的很漫长。编译成功后,终端会如下提示:

Generated:(out/target/product/generic/android-info.txt)

Targetsystemfsimage:out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img

Installsystemfsimage:out/target/product/generic/system.img

Targetramdisk:out/target/product/generic/ramdisk.img

Targetuserdatafsimage:out/target/product/generic/userdata.img

Installedfilelist:out/target/product/generic/installed-files.txt

完成后镜像生成在/mfcai/mydroid/out/target/product/generic下

编译完成后会生成了一个out目录,编译成功会会再源码目录下生成一个out文件夹,大小有12G,所有所在的挂载区剩余空间最好大于20G。

主要的两个目录为host和target

1)前者表示在主机(x86)生成的工具

2)后者表示目标机(模认为ARMv5)运行的内容。

镜像文件生成在/home/mfcai/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目录下

make编译的并不是所有内容,不包含内核和SDK。

三、编译、配置AndroidSDK

makePRODUCT-sdk-sdk

编译完成后会在/home/mfcai/mydroid/out/host/linux-x86/sdk/目录生成sdk

问题1

有可能会出现:“Permissiondenied(权限拒绝的提示)”异常。请命令

解决办法:赋予权限

$sudochmod-Ra+rwx*

四、运行android模拟器

1、在~/.bashrc加环境变量。

gedit~/.bashrc

打开.bashrc,在.bashrc文件的最后面加入如下3行(Android工具的路径)

exportPATH=/home/mfcai/myandroid/out/host/linux-x86/bin:$PATH

exportANDROID_PRODUCT_OUT=/archer/external/android/out/target/product/generic

exportANDROID_SWT=/android/out/host/linux-x86/framework

2.创建Android虚拟设备

./androidcreateavd-t15-ng15

-t指定TargetID(Android4.0.3SDK的ID为15),-n指定创建的Android虚拟设备名字。

3.运行emulator

./emulator-avdg15

进入模拟器程序所在目录,我的模拟器所在目录是:/home/mfcai/myandroid/out/host/linux-x86/bin

cd~/myandroid/out/host/linux-x86/bin

使用androidlisttargets命令来查看当前系统中的android模拟器,

./androidlisttarget

问题1:

有可能会出现如下异常:SWTfolder'/root/dsk/android/out/host/linux-x86/framework/x86'doesnotexist.

PleaseexportANDROID_SWTtopointtothefoldercontainingswt.jarforyourplatform.

意思是需要指向SWT.jar所在的目录。

解决办法:在.bashrc文件中加入下面一行:

exportANDROID_SWT=/home/mfcai/icecreamsu/out/host/linux-x86/framework

转载请注明出处与作者。

欢迎访问http://blog.sina.com.cn/staratsky

相关推荐