在一切开始之前,先说一下达到的目标(以下的内容部分来自网络,部分为自己摸索得到),欢迎拍砖:
a)编译android源码
b)得到编译后的sdk
c)收集source以便在eclipse中查看android源码
e)编译adt插件
准备必要的软件包:
| 1 | sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev sun-java6-jdk pngcrush schedtool |
1.先下载Google改进的使用git的Python脚本文件
| 1 |
2.使用repo初始化
1)初始化为下载所有版本的android源码
| 1 | ./repo/repo init -u git://android.git.kernel.org/platform/manifest.git |
2)初始化为下载指定版本的源码
| 1 | repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo |
3.下载源码
| 1 | ./repo/repo sync |
4.编译源码
a.修改部分文件来消除指定的错误
在编译的过程中遇到下面的错误:
| 1 | ************************************************************ |
2
| 3 | You are attempting to build on a 32-bit system. |
4
| 5 | Only 64-bit build environments are supported beyond froyo/2.2. |
6
| 7 | ************************************************************ |
这是因为在Makefile中检测了CPU的字长。直接把build/core/main.mk中下面的话注释掉:
| 1 | #ifneq (64,$(findstring 64,$(build_arch))) |
| 2 | #$(warning ************************************************************) |
| 3 | #$(warning You are attempting to build on a 32-bit system.) |
| 4 | #$(warning Only 64-bit build environments are supported beyond froyo/2.2.) |
| 5 | #$(warning ************************************************************) |
| 6 | #$(error stop) |
| 7 | #endif |
接下来又遇到下面的错误:
| 01 | Docs droiddoc: out/target/common/docs/api-stubs |
02
| 03 | Could not load‘clearsilver-jni’ |
04
| 05 | java.library.path = out/host/linux-x86/lib |
06
| 07 | make: *** [out/target/common/docs/api-stubs-timestamp] Error 45 |
08
| 09 | make: *** Waiting for unfinished jobs…. |
10
| 11 | Could not load‘clearsilver-jni’ |
12
| 13 | java.library.path = out/host/linux-x86/lib |
14
| 15 | make: *** [out/target/common/docs/doc-comment-check-timestamp] Error 45 |
这是由于clearsilver在编译时如果检测到使用Java JDK 6,就使用64位编译。要避开此错误,需要修改下面四个文件:
| 1 | external/clearsilver/cgi/Android.mk |
| 2 | external/clearsilver/java-jni/Android.mk |
| 3 | external/clearsilver/util/Android.mk |
| 4 | external/clearsilver/cs/Android.mk |
把这四个Makefile中的下列语句注掉即可:
| 1 | # This forces a 64-bit build for Java6 |
| 2 | # Comment by Easwy |
| 3 | # LOCAL_CFLAGS += -m64 |
| 4 | # LOCAL_LDFLAGS += -m64 |
当然也可以把64改为32!
若有此错误:
/media/master/external/webkit/WebCore/css/CSSParser.cpp:4533:undefined reference to `WebCore::CSSParser::lex()'
collect2:ld returned 1 exit status
则执行touchexternal/webkit/WebCore/css/tokenizer.flex
b)然后执行make-j2(因为我的电脑是双核,使用j2来加快编译速度,如果实在不知道电脑是几核的,那么执行:
| 1 | make -j`grep '^processor' /proc/cpuinfo | wc -l`) |
要说明的是make -jn也不是万能的,如果你使用它出现了编译错误(例如由于什么不能生成什么,而不是缺少什么不能生成什么)的时候,最好只使用make
c)make编译完之后,当编译完成时,生成的image文件放在out/target/product/generic目录中,直接执行:
| 1 | emulator -system system.img -data userdata.img -ramdisk ramdisk.img |
来启动一个编译成功的模拟器
d)生成sdk?执行make-j2 sdk
生成的sdk文件在源码顶层目录的out/host/linux-x86/sdk下:android-sdk_eng.archermind_linux-x86.zip.解压后跟从http://developer.android.com/sdk/index.html下载到的sdk并无二致,唯一的区别是我们编译好的sdk至少是含有一个版本的android,比如这个里面含有一个android2.3.3可以直接进行开发.
e)收集源码?collectsource?在源码的顶层目录的sdk/eclipse/scripts下有个collect_sources_for_sdk.py就是我们要找的,这个Python脚本要两个参数:一个是源码所在的顶层目录,一个是目标目录。
执行
| 1 | ./collect_sources_for_sdk.py <source_dir> <dest_dir> |
搞定!
f)生成ADT?这个比较变态的是:它在编译前先下载eclipse,并且还是3.4的,我勒个去,如果愿意编译的,自己去做吧!方法很简单:执行源码的顶层目录的sdk/eclipse/scripts下的build_plugins.sh
或者build_server.sh
1万+

被折叠的 条评论
为什么被折叠?



