编译android源码及遇到的问题

来源:互联网 发布:装修淘宝店铺需要钱吗 编辑:程序博客网 时间:2024/04/28 21:37

编译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.csdn.net/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

这个编译过程基本很顺利,没有遇到什么大问题
使用编译的内核
$ emulator -avd <avd name>  -kernel  ZIMAGE_PATH/zImage  
最后是运行起来的模拟器,我们查看手机信息
显示  Android Version 为AOSP
Kernel Version 为 2.6.27-dirty  还附有xxx@localhost    “xxx”是我的linux id

 

原创粉丝点击