32位Ubuntu 11.10下android2.3.7源码下载与编译小结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

32位Ubuntu 11.10下android2.3.7源码下载与编译小结

1、我是在vmware下安装ubuntu 11.10的,这个网上资料很多,不多说了。我给ubuntu分了25g硬盘和1g内存。

2、请参照/source。

初始化编译环境

检查一下包是否安装:

Python 2.4-2.7

Git 1.5.4 或更高版本

没有话可以sudo apt-get install..安装一下

JDK 6 因为是编译android2.3以上,如果编译2.2以下需要JDK5

安装JDK6:

$ sudo add-apt-repository"deb / lucid partner"

$ sudo apt-get update

$ sudo apt-get install sun-java6-jdk

如果下载速度不行,可以先把ubuntu的更新源改成网易的源,可参考:http://bolg.malu.me/html/2010/279.html。

其他需要安装的包:

我安装了如下包:官网上那是64位需要安装的包,我是32位的有些不一样。

$ sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev x11proto-core-dev libx11-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils

3、下面开始下载源码

首先安装repo(是一个便于git管理的工具)

$ mkdir~/bin

$ PATH=~/bin:$PATH

$ curl https:///dl/googlesource/git-repo/repo > ~/bin/repo

$ chmod a+x~/bin/repo

初始化repo client

$ mkdir android2.3.7

$ cd android2.3.7

初始化repo,我是使用的下面的地址,使用官网地址时出现了网络错误

$ repo init-u /platform/manifest.git -b android-2.3.7_r1

按照提示输入用户名和邮箱。

接着

$ repo sync

开始同步源码,根据你的网速,我的持续了50分钟左右。

还有一步验证git tags可参照官网。下完后就可以在刚才创建的android2.3.7文件夹下看见已下载的源码。

4、开始编译

初始化:

$ source build/envsetup.sh

$ lunch full-eng

上面代表编译的一个target,full是针对emulator编译全部包括app、输入法等,eng是指针对开发者编译,有最高权限。具体可参见官网。

接着就可以编译了,在源码目录下直接make就行,需要一段时间。

编译过程中有几个问题需要指出一下:

问题1:

由于我们是32位系统,所以有些文件需要修改一下:将

./external/clearsilver/cgi/Android.mk

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

./external/clearsilver/util/Android.mk

./external/clearsilver/cs/Android.mk

四个文件中的

LOCAL_CFLAGS+= -m64

LOCAL_LDFLAGS+= -m64

注释掉,或者将“64”换成“32”

LOCAL_CFLAGS+= -m32

LOCAL_LDFLAGS+= -m32

然后,将./build/core/main.mk 中的

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

改为:

ifneq (i686,$(findstring i686,$(build_arch)))

问题2:

frameworks/base/libs/utils/RefBase.cpp:483:67: error: passing …const android::RefBase::weakref_impl‟as …this‟argument of …void

android::RefBase::weakref_impl::trackMe(bool, bool)‟discards qualifiers [-fpermissive] make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] error 1

如下解决:

$ gedit frameworks/base/libs/utils/Android.mk

将下面一行

LOCAL_CFLAGS+= -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)

改成

LOCAL_CFLAGS+= -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) –fpermissive

问题3:

:0:0: warning: "_FORTIFY_SOURCE" redefined [enabled by default]

:0:0: note: this is the location of the previous definition cc1plus: all warnings being treated as errors

make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 1

这是由于11.10的gcc版本过高造成的,可参考这篇文章修改:/designhouse/blog/item/fec5cdbf8d6a231618d81fc1.html。

至此编译完毕。

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

映像生成在out/target/product/generic下:android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。其中,ramdisk.img是一个分区映像文件,在kernel启动时,ramdisk被用来调用init,以及把真正的root file system mount起来。system.img 包括了主要系统,系统app等,会被挂载到/下,可对应查看./system该目录,可以发现在其下app/下有一些系统自带的应用程序。userdata.img包括了一些用户数据,被挂载到/data下,对应可查看./data/目录,emulator加载这3个映像文件。

5、编译SDK

编译SDK可以得到与源码同步的SDK,还会生成一些tools,在源码根目录下:

$ sudo make PRODUCT-sdk-sdk

编译生成的SDK在out/host/linux-x86/SDK下。之后如果在ubuntu下使用eclipse进行开发,可以使用你编译的SDK。

下面就在模拟器中运行镜像,建议切到root用户下,首先配置几个环境变量,将自己编译的SDK设为优先级最高,在源码根目录下执行:

相关文档
最新文档