搭建Android源码编译环境.docx

上传人:b****9 文档编号:23322764 上传时间:2023-05-16 格式:DOCX 页数:12 大小:20.13KB
下载 相关 举报
搭建Android源码编译环境.docx_第1页
第1页 / 共12页
搭建Android源码编译环境.docx_第2页
第2页 / 共12页
搭建Android源码编译环境.docx_第3页
第3页 / 共12页
搭建Android源码编译环境.docx_第4页
第4页 / 共12页
搭建Android源码编译环境.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

搭建Android源码编译环境.docx

《搭建Android源码编译环境.docx》由会员分享,可在线阅读,更多相关《搭建Android源码编译环境.docx(12页珍藏版)》请在冰豆网上搜索。

搭建Android源码编译环境.docx

搭建Android源码编译环境

Android2.3.1的源代码并在Ubuntu10.04(32位)上编译通过。

这篇文章简要记录了下载、编译的过程。

关于搭建Android开发环境的文章已经有很多,本文只简要介绍一下,做为备忘。

[编译前的准备]

这一步安装获取源代码以及编译所需要的软件,使用如下命令:

$sudoaptitudeinstallgit-coregnupgflexbisongperflibsdl-devlibesd0-devlibwxgtk2.6-devbuild-essentialzipcurllibncurses5-devzlib1g-dev

另外,参考别人编译Android2.3的经验,安装了下列软件包:

$sudoapt-getinstalllib64z1-devlibc6-dev-amd64g++-multiliblib64stdc++6

虽然Android官方网站上讲不支持Java6,不过我使用Java6也可以编译通过,所以在这里Easwy安装的是Java6。

首先去掉/etc/apt/sources.list中这两行的注释,使能Java6源:

deblucidpartner

deb-srclucidpartner

然后安装Java6JDK:

$sudoaptitudeinstallsun-java6-jdk

接下来下载repo工具,这是Google提供的一个Python脚本,方便管理多个Git版本库:

$cd~

$mkdirbin

$curlhttp:

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

$chmoda+x~/bin/repo

记得把repo加到你的路径中,方便以后使用。

编辑~/.bashrc,加入下面一行:

PATH=$PATH:

~/bin

exportPATH

然后用命令.~/.bashrc,以后就可以直接使用repo命令了。

接下来获取Android2.3.1的源代码:

$mkdirmydroid

$cdmydroid

$repoinit-ugit:

//android.git.kernel.org/platform/manifest.git-bandroid-2.3.1_r1

$reposync

[编译Android]

接下来开始编译:

$make-j`grep'^processor'/proc/cpuinfo|wc-l`

上面的命令中,-j参数告诉make启动多个并行任务进行编译,在支持多核的CPU上能加快编译速度。

如果你知道你CPU是几核的,可以直接把这部分替换成-j2(双核)。

我在编译的过程中遇到下面的错误:

************************************************************

Youareattemptingtobuildona32-bitsystem.

Only64-bitbuildenvironmentsaresupportedbeyondfroyo/2.2.

************************************************************

这是因为在Makefile中检测了CPU的字长。

我直接把build/core/main.mk中下面的话注释掉:

#ifneq(64,$(findstring64,$(build_arch)))

#$(warning************************************************************)

#$(warningYouareattemptingtobuildona32-bitsystem.)

#$(warningOnly64-bitbuildenvironmentsaresupportedbeyondfroyo/2.2.)

#$(warning************************************************************)

#$(errorstop)

#endif

接下来又遇到下面的错误:

Docsdroiddoc:

out/target/common/docs/api-stubs

Couldnotload‘clearsilver-jni’

java.library.path=out/host/linux-x86/lib

make:

***[out/target/common/docs/api-stubs-timestamp]Error45

make:

***Waitingforunfinishedjobs….

Couldnotload‘clearsilver-jni’

java.library.path=out/host/linux-x86/lib

make:

***[out/target/common/docs/doc-comment-check-timestamp]Error45

这是由于clearsilver在编译时如果检测到使用JavaJDK6,就使用64位编译。

要避开此错误,需要修改下面四个文件:

∙external/clearsilver/cgi/Android.mk

∙external/clearsilver/java-jni/Android.mk

∙external/clearsilver/util/Android.mk

∙external/clearsilver/cs/Android.mk

把这四个Makefile中的下列语句注掉即可:

#Thisforcesa64-bitbuildforJava6

#CommentbyEaswy

#LOCAL_CFLAGS+=-m64

#LOCAL_LDFLAGS+=-m64

然后在external/clearsilver目录中执行一下makeclean,然后回到项目根目录,继续make即可。

当编译完成时,生成的image文件放在out/target/product/generic目录中。

更多内容,请阅读易水博客上的其它文章。

 

/**

版本:

1.0

日期:

2009-03-18

作者:

HKjinzhao

备注:

初始版本

*/

/**

版本:

1.1

日期:

2009-03-27

作者:

HKjinzhao

备注:

增加makesdk,修改一些内容

*/

本次编译过程主要参考官方文档(

编译环境:

Ubuntu8.10

1、安装一些环境

sudoapt-getinstallbuild-essential

sudoapt-getinstallmake

sudoapt-getinstallgcc

sudoapt-getinstallg++

sudoapt-getinstalllibc6-dev

sudoapt-getinstallpatch

sudoapt-getinstalltexinfo

sudoapt-getinstalllibncurses-dev

sudoapt-getinstallgit-coregnupg

sudoapt-getinstallflexbisongperflibsdl-devlibesd0-devlibwxgtk2.6-devbuild-essentialzipcurl

sudoapt-getinstallncurses-dev

sudoapt-getinstallzlib1g-dev

sudoapt-getinstallvalgrind

sudoapt-getinstallpython2.5

安装java环境

sudoapt-getinstallsun-java6-jresun-java6-pluginsun-java6-fontssun-java6-jdk

注:

官方文档说如果用sun-java6-jdk可出问题,得要用sun-java5-jdk。

经测试发现,如果仅仅make(make不包括makesdk),用sun-java6-jdk是没有问题的。

而makesdk,就会有问题,严格来说是在makedoc出问题,它需要的javadoc版本为1.5。

因此,我们安装完sun-java6-jdk后最好再安装sun-java5-jdk,或者只安装sun-java5-jdk。

这里sun-java6-jdk和sun-java5-jdk都安装,并只修改javadoc.1.gz和javadoc。

因为只有这两个是makesdk用到的。

这样的话,除了javadoc工具是用1.5版本,其它均用1.6版本:

sudoapt-getinstallsun-java5-jdk

修改javadoc的link

cd/etc/alternatives

sudormjavadoc.1.gz

sudoln-s/usr/lib/jvm/java-1.5.0-sun/man/man1/javadoc.1.gzjavadoc.1.gz

sudormjavadoc

sudoln-s/usr/lib/jvm/java-1.5.0-sun/bin/javadocjavadoc

2、设置环境变量

vim~/.bashrc

在.bashrc中新增或整合PATH变量,如下

#java程序开发/运行的一些环境变量

JAVA_HOME=/usr/lib/jvm/java-6-sun

JRE_HOME=${JAVA_HOME}/jre

exportANDROID_JAVA_HOME=$JAVA_HOME

exportCLASSPATH=.:

${JAVA_HOME}/lib:

$JRE_HOME/lib:

$CLASSPATH

exportJAVA_PATH=${JAVA_HOME}/bin:

${JRE_HOME}/bin

exportJAVA_HOME;

exportJRE_HOME;

exportCLASSPATH;

HOME_BIN=~/bin/

exportPATH=${PATH}:

${JAVA_PATH}:

${JRE_PATH}:

${HOME_BIN};

#echo$PATH;

最后,同步这些变化:

source~/.bashrc

3、安装repo(用来更新android源码)

创建~/bin目录,用来存放repo程序,如下:

$cd~

$mkdirbin

并加到环境变量PATH中,在第2步中已经加入

下载repo脚本并使其可执行:

$curlhttp:

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

$chmoda+x~/bin/repo

4、下载android源码并更新之

建议不要用repo来下载(android源码超过1G,非常慢),直接在网上下载cupcake下也有.repo文件夹,可以通过reposync来更新cupcake代码:

tar-xvfcupcake.tar.gz

reposync(更新很慢,用了3个小时)

5、编译android源码,并得到~/project/android/cupcake/out目录

进入android源码目录:

make

这一过程很久(2个多小时)

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

androidSDK的emulator程序在android-sdk-linux_x86-1.0_r2/tools/下,emulator是需要加载一些image的,默认加载android-sdk-linux_x86-1.0_r2/tools/lib/images下的kernel-qemu(内核)ramdisk.imgsystem.imguserdata.img

编译好android之后,emulator在~/project/android/cupcake/out/host/linux-x86/bin下,ramdisk.imgsystem.imguserdata.img则在~/project/android/cupcake/out/target/product/generic下

cd~/project/android/cupcake/out/host/linux-x86/bin

增加环境变量

vim~/.bashrc

在.bashrc中新增环境变量,如下

#java程序开发/运行的一些环境变量

exportANDROID_PRODUCT_OUT=~/project/android/cupcake2/out/target/product/generic

ANDROID_PRODUCT_OUT_BIN=~/project/android/cupcake2/out/host/linux-x86/bin

exportPATH=${PATH}:

${ANDROID_PRODUCT_OUT_BIN};

最后,同步这些变化:

source~/.bashrc

emulator-imagesystem.img-datauserdata.img-ramdiskramdisk.img

最后进入android桌面,就说明成功了。

out/host/linux-x86/bin下生成许多有用工具(包括androidSDK/tools的所有工具),因此,可以把eclipse中androidSDK的路径指定到out/host/linux-x86/bin进行开发

7、编译linuxkernel

直接makeandroid源码时,并没有makelinuxkernel。

因此是在运行模拟器,所以不用编译linuxkernel。

如果要移值android,或增删驱动,则需要编译linuxkernel

linuxkernel的编译将在以后的文章中介绍。

8、编译模块

android中的一个应用程序可以单独编译,编译后要重新生成system.img

在源码目录下执行

.build/envsetup.sh(.后面有空格)

就多出一些命令:

-croot:

Changesdirectorytothetopofthetree.

-m:

Makesfromthetopofthetree.

-mm:

Buildsallofthemodulesinthecurrentdirectory.

-mmm:

Buildsallofthemodulesinthesupplieddirectories.

-cgrep:

GrepsonalllocalC/C++files.

-jgrep:

GrepsonalllocalJavafiles.

-resgrep:

Grepsonalllocalres/*.xmlfiles.

-godir:

Gotothedirectorycontainingafile.

可以加—help查看用法

我们可以使用mmm来编译指定目录的模块,如编译联系人:

mmmpackages/apps/Contacts/

编完之后生成两个文件:

out/target/product/generic/data/app/ContactsTests.apk

out/target/product/generic/system/app/Contacts.apk

可以使用makesnod重新生成system.img

再运行模拟器

9、编译SDK

直接执行make是不包括makesdk的。

makesdk用来生成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。

注意,我们是先执行2),再执行3)。

因为在执行./build_server.sh时,会把生成的SDK清除了。

用上了新的源码,adt这个调试工具也得自己来生成,步骤如下:

进入cupcake源码的development/tools/eclipse/scripts目录,执行:

exportECLIPSE_HOME=你的eclipse路径

./build_server.sh你想放ADT的路径

3)执行makesdk。

注意,这里需要的javadoc版本为1.5,所以你需要在步骤1中同时安装sun-java5-jdk

makesdk

编译很慢。

编译后生成的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、我们用makesdk编译出来的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请参考官方文档

6)创建AndroidVirtualDevice

编译出来的SDK是没有AVD(AndroidVirtualDevice)的,我们可以通过android工具查看:

androidlist

输出为:

AvailableAndroidtargets:

[1]Android1.5

APIlevel:

3

Skins:

HVGA-P,QVGA-L,HVGA-L,HVGA(default),QVGA-P

AvailableAndroidVirtualDevices:

表明没有AVD。

如果没有AVD,eclipse编译工程时会出错(FailedtofindaAVDcompatiblewithtarget'Android1.5'.Launchaborted.)

创建AVD:

androidcreateavd-t1-c~/sdcard.img-nmyavd

可以android–help来查看上面命令选项的用法。

创建中有一些选项,默认就行了

再执行androidlist,可以看到AVD存放的位置

以后每次运行emulator都要加-avdmyavd或@myavd选项,这里eclipse才会在你打开的emulator中调试程序

 

注意:

这样,SDK和ADT就生成了,就按照官方文档把他们整合到Eclipse,这里不再细说了。

建个android的新工程,试试你自己编译的sdk。

 

本文来自CSDN博客,转载请标明出处:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1