编译android源码,首先当然是下载源码。
在source.android.com中可以方便的找到下载流程。
虽然有现成的方法(GIT&REPO)不过最好还是先熟悉一下这两个工具使用方法最好,否则也会走不少弯路。这里推荐Li Yanrui写的《git使用指南》。
好了,一步一步
$git init
$repo init -u git://android.git.kernel.org/platform/manifest.git -b eclair ---------下载 android-2.1版本
$repo sync --------- 第一次最好使用repo sync下载完所有的文件
正式开始编译,料想不会太复杂吧
$ source build/envsetup.sh
$ lunch
选 simulator ----------我是在emulator上跑的android
$ make
....
编译完成之后在 out/target/.../generic/目录下生成了 ramdisk.img system.img userdata.img
$ emulator -system system.img
-data userdata.img
-ramdisk -ramdisk.img
Q&A 下面仅仅记录我在编译之中遇到的问题
1. android根据版本推出的先后选择了 java1.5 和 java1.6, 我是直接选择的java 1.6
因此需要修改 build/core/main.mk中的关于java版本判断的部分 改 1.5 -> 1.6
2. 编译了一段时间之后出现错误
提示 将警告当成了错了
解决办法 将报错位置的编译选项 -Werror 删除
下面还遇到无法识别的选项 -Wno-override-init 同样删除
3. GLIBC_2.11 not found
解决办法 http://blog.youkuaiyun.com/zhenyongyuan123/archive/2010/12/16/6079717.aspx
4. issue "You are attempting to build on a 32-bit system"
How to fix:
$ vim build/core/main.mk
change
ifneq (64,$(findstring 64,$(build_arch)))
to
ifneq (i686,$(findstring i686,$(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
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
...
P.S. 交叉编译android kernel
下载android kernel源码
$ git clone git://android.git.kernel.org/kernel/common.git kernel-common
$ cd kernel-common
$ make ARCH=arm goldfish_defconfig .config
$ make ARCH=arm CROSS_COMPILE=PREBUILT_PATH/linux-x86/toolchain/arm-esbi/bin/
......
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready