编译android源码及遇到的问题

    技术2022-05-20  57

    编译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

     


    最新回复(0)