下载编译Android 2.3 源代码

前期准备:

$ cd ~

$ mkdir mydroid

安装Java 6 (在之前的日志里写到过在Ubuntu上安装Java6,这里就不再记录)

 

安装好Git和curl, Ubuntu 下用apt-get安装:

sudo apt-get install git-core curl

 

用curl 下载repo

$ cd ~ && mkdir bin

# export PATH=$PATH:~/bin/

curl http://android.git.kernel.org/repo >~/bin/repo

$ chmod a+x ./bin/repo

 

下载android源代码

(这里以下载android 2.3的brunch分支上的代码为例)

$cd ~/mydroid

$repo init -u git://android.git.kernel.org/platform/manifest.git -b gingerbread

$repo sync

 

(可以使用repo 的-j参数来增加下载线程,比如repo sync -j 10)

 

下载完后,编译 HOW TO BUILD ON 32-BIT SYSTEM

(因为android 2.2以上Google是用64位的机子编译的,所以对一些mk文件做了修改,如果想在32位机子上编译,需要作如下修改:

1.

$ find . -name '*.mk' | xargs sed -i 's/-m64//g'

//这一步用来删除当前目录下(包括子文件)中包行的-m64字段 或者也可以手工修改  {

external/clearsilver/cgi/Android.mk,
external/clearsilver/java-jni/Android.mk,
external/clearsilver/util/Android.mk,
external/clearsilver/cs/Android.mk

change
LOCAL_CFLAGS += -m64
LOCAL_LDFLAGS += -m64
to
LOCAL_CFLAGS += -m32
LOCAL_LDFLAGS += -m32

$ export TARGET_BUILD_VARIANT=user

 

修改 build/core/main.mk 注释一下内容
ifneq (64,$(findstring 64,$(build_arch)))
$(warning ************************************************************)
$(warning You are attempting to build on a 32-bit system.)
$(warning Only 64-bit build environments are supported beyond froyo/2.2.)
$(warning ************************************************************)
$(error stop)
endif

)

$ . build/env_setup.sh

$ lunch

(选择需要的编译目标)

$ make

 

(我试着用make -j2去编译,但是因为运行移动硬盘上的虚拟机,最后卡死,无奈之下只能用make).

 

编译完后,会生成

 

Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img

Install system fs image: out/target/product/generic/system.img

Installed file list: out/target/product/generic/installed-files.txt

可以将system.img和ramdisk.img拷贝到SDK的images/目录中,然后启动模拟器测试。

 

或者用sdk中的 emulator运行,还需要做如下修改:

 

 

 

 

 

FAQ:

issue "host C: libclearsilver-jni <= external/clearsilver/java-jni/j_neo_util.c
In file included from /usr/include/features.h:378,
                 from /usr/include/string.h:26,
                 from external/clearsilver/java-jni/j_neo_util.c:1:
/usr/include/gnu/stubs.h:9:27: error: gnu/stubs-64.h: 没有那个文件或目录
make: *** [out/host/linux-x86/obj/SHARED_LIBRARIES/libclearsilver- jni_intermediates/j_neo_util.o]错误"

How to fix:
sudo apt-get install lib64z1-dev libc6-dev-amd64 g++-multilib lib64stdc++6

 

Issue: make: *** No rule to make target `out/debug/host/linux-x86/pr/sim/obj/lib/libdl.so', needed by `out/debug/host/linux-

 

x86/pr/sim/obj/SHARED_LIBRARIES/libnfc_intermediates/LINKED/libnfc.so'.  Stop.

 

frameworks/base/media/libmedia/MediaScanner.cpp: In function ‘bool android::fileMatchesExtension(const char*, const char*)’:

frameworks/base/media/libmedia/MediaScanner.cpp:84: error: invalid conversion from ‘const char*’ to ‘char*’

frameworks/base/media/libmedia/MediaScanner.cpp:90: error: invalid conversion from ‘const char*’ to ‘char*’

make: *** [out/debug/host/linux-x86/pr/sim/obj/SHARED_LIBRARIES/libmedia_intermediates/MediaScanner.o] Error 1

make: *** Waiting for unfinished job.

 

>> add (char*) strrchr 

$ find . -name '*.cpp' | xargs sed -i 's/strrchr/(char*)strrchr/g'

不过之后还需要将*Q_strrchr被错误修改为*Q_(char*)strrchr做修改,不太了解sed的具体用法

or 需要将gcc编译环境设置为4.3版本,否则会出现const char* 到  char*无法转换的问题。

 

参考:

1. http://www.android123.com.cn/kaifafaq/801.html

2. http://blog.csdn.net/tuhuolong/archive/2010/12/16/6079661.aspx

3. http://www.williamhua.com/2009/04/29/git-and-repo-for-dummies/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值