Blackrose's Blog Blackrose's Blog

ubutnu10.04下编译android-2.2_r1

in technologyread (2632) 文章转载请注明来源!

奋战5天了,终于在这个夜晚,编译完成了,看着emulator运行镜像,显示"ANDROID"字符的时候,我肉牛满面啦!
网上有很多编译的文章,但大多已经过时了,下面就来说下,我编译android的整个过程。

编译环境:ubuntu10.04 jdk=1.5.0

我的系统之前已经安装过gcc,g++了,还要说明的是我用的都是4.3的,在后边我会说明的!!!

<1>编译之前要先安装很多必要的软件

sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev

官方推荐的就是上面这些,如果在编译过程中发现某些命令找不到,就apt-get它。可能需要的包还有:

$ sudo apt-get install libc6-dev
$ sudo apt-get install patch
$ sudo apt-get install texinfo
$ sudo apt-get install zlib1g-dev
$ sudo apt-get install valgrind

由于ubuntu自带python,而且版本很高,就不再安装了
关于gcc,g++的问题,可以参考本文“问题三”(在尾部)

下面就是重要的了,官方说JDK1.6也没问题,但我一直没过,就装了1.5的,由于10.04已经没有1.4了,所以要把下面的地址添加到/etc/apt/sources.list中

deb http://cn.archive.ubuntu.com/ubuntu/ jaunty multiverse
deb http://cn.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse

然后apt-get updata
现在就可以安装java1.5-sun了
初次编译的最好把1.6的卸载了,这样就不用设置优先级了

<2>下面设置环境变量:

这个是我的~/.bashrc文件中后面添加的,稍加修改后可以COPY到自己的.bashrc文件中

JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
JRE_HOME=${JAVA_HOME}/jre
export ANDROID_JAVA_HOME=$JAVA_HOME
export CLASSPATH=.:${JAVA_HOME}/lib:$JRE_HOME/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export JAVA_HOME
export JRE_HOME
export CLASSPATH
HOME_BIN=~/bin/
export ANDROID_PRODUCT_OUT=~/android/out/target/product/generic
ANDROID_PRODUCT_OUT_BIN=~/android/android-sdk-linux_86/tools
export PATH=${PATH}:${JAVA_PATH}:${HOME_BIN}:${ANDROID_PRODUCT_OUT_BIN}:${ANDROID_PRODUCT_OUT}

注:ANDROID_PRODUCT_OUT_BIN=~/android/android-sdk-linux_86/tools这一句,是因为我下载了SDK,而不是编译之后生成的,因为初次编译,怕有问题,所以借用了官方的SDK中的emulator来用的

保存.bashrc文件后,要更新配置文件

source ~/.bashrc

<3>安装repo

创建~/bin目录,主要是用来存放repo程序,如下:

$ cd ~
$ mkdir bin

并加到环境变量PATH中,在第2步中已经加入
下载repo脚本并使其可执行:

$ curl http://android.git.kernel.org/repo >~/bin/repo
$ chmod a+x ~/bin/repo

<4>初始化repo

repo是android对git的一个封装,简化了一些git的操作。
创建工程目录:

$ mkdir android
$ cd android

repo初始化

$ repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.2_r1

在此过程中需要输入名字和email地址。初始化成功后,会显示:
repo initialized in /android
在~/android下会有一个.repo的隐藏目录。

注:我之前一直是manifest.git,但一直都没有编译成功,直到看了篇文章,感觉,初学者主要是了解过程,用android的分支就可以了,用主干,反而会出现不必要的麻烦。网上的很多文章都直接是manifest.git,但为了成功用分支也不错的,毕竟编译原理相同。希望大家也和我一样吧!!!

<5>同步源代码

$ repo sync

这一步要很久很久,我用了40分钟左右才将android-2.2_r1的代码下载下来

<6>编译android源码,并得到~/android/out目录

$ cd ~/andoird
$ make -j3

这一过程很漫长,建议泡杯咖啡,看看报纸之类的。这里的使用了-j3这个选项,我来解释下,j是选择电脑CPU的个数,如果你的是双核,那就是2+1,我的是T1600(是不是很老啊,都用3年了),属于CORE双核,所以用-j3,具体情况自己来定!!

注:编译有错误的,请回复,我会及时查看和解答,并更新编译问题部分!!!

<7>在模拟器上运行编译好的android

编译好android之后,/out/target/product/generic下会出现如下文件
android-info.txt
ramdisk.img
clean_steps.mk
install-files.txt
perivous_build_config.mk
system.img
userdata.img
我们运行emulator只需要ramdisk.img,system.img和userdata.img这三个文件。
由于之前我们已经下载官方的SDK包了,并且把路径添加到配置文件了,所以把三个文件复制到/android-sdk-linux_x86下即可,然后运行如下命令即可

emulator -system system.img -data userdata.img -ramdisk ramdisk.img

这时候android模拟器的界面就出现了。
等5~6分钟左右,模拟器就进入了android界面了
到此,编译就算完成了!!
下面来上一张,小弟我编译好后的图


下面来说说我遇到的问题:

问题一:

前几次编译出现了错误1,文件是j_neo_util.o

Install: out/host/linux-x86/framework/droiddoc.jar
target Generated: libclearsilver-jni <= out/host/common/obj/JAVA_LIBRARIES/clearsilver_intermediates/javalib.jar
host C: libclearsilver-jni <= external/clearsilver/java-jni/j_neo_util.c
In 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] 错误 1

解决办法:

sudo apt-get install lib64z1-dev libc6-dev-amd64 g++-multilib lib64stdc++6

问题二:

这个问题是我在用1.6编译的时候遇到的,看国外的论坛说是javadoc引起的

Could not load 'clearsilver-jni'
java.library.path = out/host/linux-x86/lib
make: *** [out/target/common/docs/api-stubs-timestamp] 错误 45

这个错误到现在为止还没有解决,所以,

如果有那位高手解决了,麻烦您回复一下,我会立即联系您的,如果您不介意的话,可以把解决方法写在回复当中,谢谢啦!!!


问题三

我在编译的时候,之前一直是使用的gcc,g++都是4.4的,但后来换到4.3了
首先要安装gcc-4.3 g++-4.3
然后在/usr/bin下把gcc g++连接到gcc-4.3 g++-4.3即可

经过测试发现,gcc-4.4 g++-4.4也可以通过,所以安装ubuntu10.04的童鞋,可以不必安装4.3版本的了。


问题四

make若提示找不到-lncurses,则需要做以下链接

ln –s /lib/libncurses.so.5 /lib/libncurses.so
文章二维码

扫描二维码,在手机上阅读!

发表新评论
已有 12 条评论
  1. seraph758
    seraph758
    回复

    find: drm/java': No such file or directory find:drm/java': No such file or directory
    external/qemu/Makefile.android:1107: warning: overriding commands for target external/qemu/android/avd/hw-config-defs.h' external/qemu/Makefile.android:939: warning: ignoring old commands for targetexternal/qemu/android/avd/hw-config-defs.h'
    Copy: dx (out/host/linux-x86/obj/EXECUTABLES/dx_intermediates/dx)
    Install: out/host/linux-x86/bin/dx
    target Dex: core 请问make的时候报这个错误,怎么解决呢

  2. seraph758
    seraph758
    回复

    重新弄了一遍,完全按照你的教程上说的弄,结果提示 Checking build tools versions... You are attempting to build with the incorrect version
    of javac. Your version is: /bin/bash: javac: command not found.
    The correct version is: 1.5. Please follow the machine setup instructions at
    http://source.android.com/download build/core/main.mk:133: *** stop. Stop.

    1. Blackrose
      Blackrose
      回复

      @seraph758 @seraph785这是由于java版本的问题,编译这个版本的android最好用1.5的,不要用1.6的

    2. Blackrose
      Blackrose本文作者
      回复

      @seraph758 @seraph758,提示说You are attempting to build with the incorrect version of javac。意思是你的javac的版本不正确。你只设置了java,没有设置javac

      1. kjsolo
        kjsolo
        回复

        @Blackrose 怎么设置javac 阿??

        1. Blackrose
          Blackrose本文作者
          回复

          @kjsolo @kjsole, 设置环境变量的时候用jdk的,当然你的系统要是有多个java,还要选择版本的

  3. droid x case
    droid x case
    回复

    All in all I do not make comments on blogs, but I have to mention that this post really forced me to do so. Really fantastic post.

  4. droid x case
    droid x case
    回复

    I just subscribed to your RSS feed, not sure if I did it correctly though? Fine article by the way.

    1. Blackrose
      Blackrose本文作者
      回复

      @droid x case @droid x case,i use feedsky server to RSS feed,you can add this link http://feed.feedsky.com/blackrose.It's support Google Reader and Yahoo!

  5. Kristal Campa
    Kristal Campa
    回复

    But, what occurs when you are unable to create your regularly scheduled dentist's appointment? You could usually consider the next step and work having a helpful and high quality home teeth whitening kit. The exact same end outcomes could be achieved with a lot less of the hassle.

  6. Blackrose
    Blackrose本文作者
    回复

    @Nyat,thank you!

  7. Blackrose
    Blackrose本文作者
    回复

    @droid x case, welcome to my blog,thank you.i can

博客已萌萌哒运行
© 2018 由 Typecho 强力驱动.Theme by Yodu
前篇 后篇
雷姆
拉姆