下载编译Android 2.3 源代码

    技术2022-05-20  39

    前期准备:

    $ 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.mkchangeLOCAL_CFLAGS += -m64LOCAL_LDFLAGS += -m64toLOCAL_CFLAGS += -m32LOCAL_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运行,还需要做如下修改:

     

    export PATH=$PATH:~/Android/mydroid/out/host/linux-x86/bin export ANDROID_PRODUCT_OUT=~/Android/mydroid/out/target/product/generic/ ln -sf /home/smrdn/Android/mydroid/prebuilt/android-arm/kernel/kernel-qemu /home/smrdn/Android/mydroid/out/target/product/generic/ 

     

     

     

    FAQ:

    issue "host C: libclearsilver-jni <= external/clearsilver/java-jni/j_neo_util.cIn 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)