• Fedora 13 下编译Android 2.2


    http://m.oschina.net/bbs/thread/10303
     

    先到官网根据提示做点准备。
    source.android.com/source/download.html

    源码2.1G,加上编译后的文件需要6G左右的空间。CPU内存越快越多越好。如果在虚拟机里要求会更高些,CPU频率少于2G,内存少于2G的到后面估计会比较痛苦。

    官网上只给了ubuntu的源代码下载、编译方法。前面的准备工作可以参考一下。

    $ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl sun-java5-jdk zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev

    上面这些是要提前安装的软件包。其中sun-java5-jdk要换最新的JDK6,其他的自己用yum检查吧。Fedora的yum源里有些东西没有, 还有一些名称和ubuntu的不一样,上面那些东西如果能找到对应的Fedora名称提前安装更好,找不到也不怕,后面痛苦点,make时根据错误提示去 找自己系统中还缺什么。

    官网上说要用JDK5,JDK6不支持。
    JDK 5.0, update 12 or higher.Java 6 is not supported, because of incompatibilities with @Override.
    不理它,应该是说Android2.1,我在8月初下载的2.2版源代码编译时要用JDK6才行。

    但实际上用JDK6编译时被强制要求用64位系统,用32位系统的解决方法在后面。

    这是官网对ubuntu以外的linux发行版的要求,除了JDK5之外其他两项都要满足。Python一般装好系统后都有,没有的话yum获取也比较方便。Git要去上面的地址下载。

    可以下载RPM包安装,我下载的源代码编译安装的。make时记得也有一些错误,根据提示把缺少的东西yum补上就行。

    再接下来就是按照官网安装配置repo获取当前最新版本的Android源码。根据网速,慢慢等吧。

    下好源代码可以make了,下面是我make时遇到的错误和解决方法,也算是走过的弯路,这些软件包如果提前都安装好了基本上可以一次make搞定。

    make时用Fedora便签做的简单记录,懒得再整理了,直接粘贴过来。

    1.  /bin/bash: bison: command not found

    解决:yum install bison*

    2. /bin /bash: g++: command not found

    解决:yum install gcc-c++


    3. external/qemu/Makefile.android:1101: 警告:覆盖关于目标“external/qemu/android/avd/hw-config-defs.h”的命令
    external/qemu/Makefile.android:933: 警告:忽略关于目标“external/qemu/android/avd/hw-config-defs.h”的旧命令

    两个警告,估计可以忽略

    4. 一大堆关于java的警告错误,难道真的要把JDK降到5.0?
    其实可以不用降级,用JDK6编译的方法在最下边
    解决:
    先卸载原来的6.0:yum -e jdk-1.6.0_21-fcs.i586
    进入JDK5的下载目录运行:
    ./jdk-1_5_0_22-linux-i586-rpm.bin
    安装完后设置环境变量,要在/etc/profile中设置,.bashrc里设置的不起作用。注销重新登录。

    重新make,警告一大堆,不过看似还可以继续进行下去。。。

    5. /bin/bash: flex: command not found
    解决:
    yum -y install flex

    6. /usr/bin/ld: cannot find -lncurses
    解决:
    yum install ncurses-devel

    7. prebuilt/linux-x86/sdl/include/SDL/SDL_syswm.h:55:22: 错误:X11/Xlib.h:没有那个文件或目录
    prebuilt/linux-x86/sdl/include/SDL/SDL_syswm.h:56:23: 错误:X11/Xatom.h:没有那个文件或目录
    In file included from external/qemu/android/main.c:30:
    prebuilt/linux-x86/sdl/include/SDL/SDL_syswm.h:73: 错误:expected specifier-qualifier-list before ‘XEvent’
    prebuilt/linux-x86/sdl/include/SDL/SDL_syswm.h:86: 错误:expected specifier-qualifier-list before ‘Display’
    external/qemu/android/main.c: 在函数‘main’中:
    external/qemu/android/main.c:1281: 警告:隐式声明函数‘audio_check_backend_name’
    make: *** [out/host/linux-x86/obj/EXECUTABLES/emulator_intermediates/android/mai

    解决:
    yum install libX11-devel.i686
    顺便再根据http://scfofo.javaeye.com/blog/696676 的提示再安装gperf(yum install gperf)

    8. /usr/bin/ld: cannot find -lhistory
    看来fedora中缺的东西不算少
    解决:
    yum install readline-devel

    这次make了两个多小时,中间时不时的从网页切换的控制台看看怎么还不出错,最后竟然make完成了。。。。先睡一小会2010年08月02日 星期一 16时29分51秒


    启动模拟器查看编译好的Android:

    先设置环境变量,在/etc/profile中加入:
    export ANDROID_PRODUCT_OUT=/home/xx/work/mydroid/out/target/product/generic
    注销重新登录
    打开终端,切换到root,进入out/host/linux-x86/bin
    运行./emulator
    关于emulator参数可参考 http://book.51cto.com/art/200912/173721.htm


    重新make

    上次make是在root下,向eclipse里面导入源代码,还有运行模拟器时也都要root权限。删了out文件夹重新make

    这次make中重新认识了编译android2.2源代码对java版本的要求。
    官网中的说明是针对android2.1的,编译android2.2需要jdk1.6而不是1.5,但它只检查一次,下次make只要不clean就不 会再检查,这也是上回可以用jdk1.5编译完场的原因。但用jdk1.6编译要求OS是64位的,是在extemal下clearsilver模块中的 Android.mk中做了强制限定。这个模块看起来是开发网页模板的,具体可以看其文件夹下的README文件。但为什么用JDK1.6就一定要用64 位版本编译就不清楚了。

    解决方法:
    1)  先设置系统默认JDK为1.6,make到external/clearsilver/java-jni/文件夹下会出错退出,这时换JDK1.5(换好后需要注销重新登录),再次直接make,不要make clean。
    2)  如果一定要用JDK1.6则需要改几个Android.mk文件。如下:
    参见:http://androidforums.com/android-developers/115959-ubuntu-10-04-android-open-source-make-error.html

    把external/clearsilver/cgi/Android.mk, external/clearsilver/java-jni/Android.mk, external/clearsilver/util/Android.mk, external/clearsilver/cs/Android.mk.

    下面脚本中的ifneq改为ifeq可暂时规避问题
    # This forces a 64-bit build for Java6
    ifneq ($(filter 1.6%,$(java_version)),)
    LOCAL_CFLAGS += -m64
    LOCAL_LDFLAGS += -m64
    endif

  • 相关阅读:
    android开发系列之gradle认识
    angularjs+nodejs+mongodb三件套
    我对服务端开发的一些认识
    近几个月的技术总结
    IOS设计模式的六大设计原则之单一职责原则(SRP,Single Responsibility Principle)
    第二阶段第八次站立会议
    第二阶段第七次站立会议
    第二阶段第六次站立会议
    第二阶段第五次站立会议
    第二阶段第四次站立会议
  • 原文地址:https://www.cnblogs.com/leaven/p/1909930.html
Copyright © 2020-2023  润新知