zoukankan      html  css  js  c++  java
  • Ubuntu12.04编译Android4.0.1源码全过程-----附wubi安装ubuntu编译android源码硬盘空间不够的问题解决

    昨晚在编译源码,make一段时间之后报错如下:

    # A fatal error has been detected by the Java Runtime Environment:
    #
    #  SIGSEGV (0xb) at pc=0x40362d33, pid=12195, tid=2835454784
    #
    # JRE version: 6.0_45-b06
    # Java VM: Java HotSpot(TM) Server VM (20.45-b01 mixed mode linux-x86 )
    # Problematic frame:
    # V  [libjvm.so+0x158d33]
    [error occurred during error reporting (printing problematic frame), id 0xb]

            经过研究是 硬盘空间不够的问题,大爷的。也难怪,我原先用wubi安装的ubuntu12.04,分了一个单独的硬盘30G大小。本以为空间够用,下载好源码后空间只剩6G了,也难怪。参考点击打开链接http://www.eoeandroid.com/forum.php?mod=viewthread&tid=245968这里内存要1G,硬盘空间要大于40G最好。

          为卸载了ubuntu,然后xp下划了70G的硬盘给ubuntu,但wubi安装时最大仍然是只能选择30G.我擦,这什么意思。为吗不能弄大点。后来看资料说有个LVPM可以修改ubuntu的大小,但根据资料显示LVPM只能支持ubuntu早期的版本,好像是10.04就不中了。后来找到ubuntu有个自己的工具 链接:https://help.ubuntu.com/community/ResizeandDuplicateWubiDisk  叫wubi-resize-1.7.tar.gz 就是修改硬盘空间大小的,原理和LVPM一样。兴致勃勃下好后,想分个60G空间大小,结果显示最大参数为32G. 我擦,太坑爹了!看来wubi安装缺点有很多啊,幸好找到http://www.eoeandroid.com/forum.php?mod=viewthread&tid=192736&page=1#pid1738873    可以把android源码放到xp下的其他盘然后编译,在/media/..........目录。

               为此,从头开始记下编译步骤:

    1,由于重弄的ubuntu原来的android开发环境么有了,因此第一步安JDK吧,必须是1.6版本的,1.7的不中。下载链接:http://www.oracle.com/technetwork/java/javase/archive-139210.html  参考南都布衣的文章,选用1.6.0_29版本。新建/usr/local/android目录,为以后安装android作准备。JDK也解压缩到这里。修改/etc/profile文件里添加

    export JAVA_HOME=/usr/local/android/jdk1.6.0_29
    export PATH=$PATH:$JAVA_HOME/bin

    然后source /etc/profile一下。输入java -version来检查java装成功了么有。一般出现1.6.0_29就表示成功了。但文档里还说要安javac 和 jar。我猜测原因可能是,尽管java装好了,但执行update-alternatives --config java的时候会说无java的选项,所以要update-alternatives --install再install一下。

    root@ubuntu:/usr/local/android# update-alternatives --install /usr/bin/java java /usr/local/android/jdk1.6.0_29/bin/java 300

    会提示:update-alternatives: 使用 /usr/local/android/jdk1.6.0_29/bin/java 来提供 /usr/bin/java (java),于 自动模式 中。

    对javac和jar做相同的处理,命令为:

    update-alternatives --install /usr/bin/javac javac /usr/local/android/jdk1.6.0_29/bin/javac 300

    update-alternatives --install /usr/bin/jar jar /usr/local/android/jdk1.6.0_29/bin/jar 300

    此时,在update-alternatives --config java就会显示有版本信息了,当同时有多个jdk版本时,这个设置就是非常重要的。

    2,下载需要的包:我主要是参考这个  

    sudo apt-get install git-core gnupg flex bison gperf build-essential 
      zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev 
      libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 
      libgl1-mesa-dev g++-multilib mingw32 tofrodos 
      python-markdown libxml2-utils xsltproc zlib1g-dev:i386

    但奇怪的是如果我整个贴到终端会啥东西都装不了,如果一行一行的粘贴过去则还能安装,这点要注意啊。

    3,下载android源码,参考前篇,我已经下载好了。压缩后1.9G大小,有时间上传到网盘。解压后是4.7G大小。现在将它放在/media/娱乐/盘符下面,这是xp下的F盘,有50G大小。

    4,默认的gcc g++版本为4.6.3,  将其改为4.4.步骤:

    sudo apt-get install gcc-4.4
    sudo apt-get install g++-4.4
    cd /usr/bin
    ls -l gcc*
    sudo mv gcc gcc.bak
    sudo ln -s gcc-4.4 gcc
    ls -l g++*
    sudo mv g++ g++.bak
    sudo ln -s g++-4.4 g++
    gcc -v
    g++ -v

    5,python的版本是2.5-2.7,默认的是2.7 没问题。JDK版本为1.6也么问题。

    6,参考这里http://www.59a.cn/1182.html设置ccache加快编译速度。默认的ccache在~/.ccache文件夹下。默认的是1G大小。我在/home/yan/目录下新建一个cache文件夹用来做缓存。gedit ~/.bashrc里面新增的内容是:

    export USE_CCACHE=1
    export CCACHE_DIR=/home/yan/cache

               然后设置cache的大小,在androidSource文件夹下,也即工程文件夹下要make的地方终端输入命令:prebuilts/misc/linux-x86/ccache/ccache -M 5G 官方推荐的是50-100G,但我wubi安装的ubuntu总共才30G,剩余空间也就24G,因此设为5G.我想这里也可以把ccache的目录设置在xp下的盘上。【后记,这一步我忘了运行最后那个设置ccache的大小的命令,结果编译时/home/yan/cache文件夹下的内容大约为1G,由此我推测默认的cache为1G大小。通过设置这个应该可以提高编译速度

    关于ccache的使用提高编译速度,可以参考如下2篇:

    1,http://blog.csdn.net/liucheng2009/article/details/7874331

    2,http://blog.csdn.net/qq295445028/article/details/7776299

    7,参考这里http://www.eoeandroid.com/forum.php?mod=viewthread&tid=192736&page=1#pid1738873 安装两个软件:

    sudo apt-get install ntfs-3g      //这个12.04已经有了。
    sudo apt-get install ntfs-config  //这个是个图形界面的NTFS权限配置程序。

         然后终端输入:sudo ntfs-config,oh shit!出现了https://bugs.launchpad.net/ubuntu/+source/ntfs-config/+bug/1044028上面的bug,大爷的!不管了,这一步咱略过吧。后来我又把ntfs-config给卸载了,因为它总是报错。apt-get remove ntfs-config。事实上,在系统自带了ntfs-3g的情况下,就可以对xp下的盘进行读写了。因此这一步可以省略。

    8,按照官方的提示,在androidSource路径下,终端依次执行如下命令:
    source build/envsetup.sh
    lunch full-eng
    make -j4
    强烈建议:原文说最后一条命令使用 make showcommands,这样可以显示编译命令,使得编译的时候,屏幕没有输
    出的时候,不会感觉无聊。但我测试,我就是用了make showcommands结果编译了整整10个小时才编译完。因此最好用make -j4这个命令进行编译,这个4等于cpu内核数*2.如果是2核就写-j4,如果是4核就-j8.这样可以大幅度提高编译速度。

           然后就是漫长的等待了,我大约编译了10个多小时,半夜4点起来看才编译完,头一天下午5点开始编译。快12个小时了大爷的,之所以时间这么长,我想是两方面的失误造成的:

    1,设置了ccache,但是忘了设置大小了,默认的1G来处理的

    2,最后的编译用的是make showcommands命令,没有用make -j4

    终端在编译完成后最后的输出是:

    echo "board=" > out/target/product/generic/android-info.txt
    Installed file list: out/target/product/generic/installed-files.txt
    build/tools/fileslist.py out/target/product/generic/system > out/target/product/generic/installed-files.txt
    Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
    out/host/linux-x86/bin/mkyaffs2image -f  out/target/product/generic/system out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
    Install system fs image: out/target/product/generic/system.img
    out/host/linux-x86/bin/acp -fp out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img out/target/product/generic/system.img
    true
    out/host/linux-x86/bin/mkbootfs out/target/product/generic/root | out/host/linux-x86/bin/minigzip > out/target/product/generic/ramdisk.img
    out/host/linux-x86/bin/mkyaffs2image -f  out/target/product/generic/data out/target/product/generic/userdata.img
    true


    编译完成后在out/target/product/generic 文件夹下有3个镜像文件:ramdisk.img system.img userdata.img,截图如下:

           这里记录下编译前后相关文件夹的大小,编译前源码文件夹的大小是4.7G,压缩后是2G.编译完成后out文件夹的大小是12.3G,整个源码文件夹的大小是16.7G.真耗空间啊!难怪http://www.eoeandroid.com/forum.php?mod=viewthread&tid=245968这里说,内存大于1G,硬盘大于40G.

           看来wubi安装的ubuntu在无法实质扩大安装空间的前提下,只能在挂载的xp盘下进行编译。终端输入命令:df -h查看磁盘使用情况:

             这里已经自动挂载好了,其中的/dev/sda1是我的c盘,然后sda5 sda6 sda7 分别是D E F盘,sda8是我的最后一个盘也是装ubuntu的盘。我把源码放到了娱乐(F盘)进行编译的。之前还担心文件夹有中文会不会报错,看来多虑了。

            终端切换到root,可以通过如下命令自由卸载和挂载:

    root@ubuntu:~# umount /dev/sda7 /media/娱乐
    umount: /media/娱乐 未挂载
    root@ubuntu:~# mount /dev/sda7 /mnt/
    root@ubuntu:~# cd /mnt/
    root@ubuntu:/mnt# ls
    androidSource  androidSource_4_0_1.tar.gz  RECYCLER  System Volume Information

    这样用xp下的盘就跟用linux下的文件夹一样,尽情编译!

    编译过程没出啥问题,但还是将相关问题的解决方案附录如下:

    1,下载编译android源码(4.0.3)内核(ubuntu11.04)

    2,Ubuntu11.10(32位)编译android常见错误(30种常见的)

    3,android4.0源码编译调试出错/bin/bash: prebuilt/linux-x86/toolchain/arm...

    4,南都布衣——[Android]Ubuntu12.04下编译和下载Android4.0.3源码:http://wenku.baidu.com/view/626d4a2258fb770bf78a552f.html

    5,Ubuntu 12.04 编译Android 4.2 源码 --http://www.59a.cn/1182.html

           根据上面的链接2,镜像生成在out/target/product/generic下:android源码编译后得到system.img,ramdisk.img,userdata.img映像文件。其中, ramdisk.img是emulator的文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,emulator加载这3个映像文件后,会把 system和 userdata分别加载到 ramdisk文件系统中的system和 userdata目录下。

          根据链接1还要下载kernel代码,下一步就是下载内核代码,并将编译的镜像安到模拟器上!

  • 相关阅读:
    js语言基础练习(二)---------------函数的基础知识
    js语言基础练习
    js基本语法总结(一)
    HTML基础知识总结
    参考资料
    css基础知识的复习总结(三)
    css基础知识的复习总结(二)
    css基础知识的复习总结
    旋转数组
    CSS 之 position
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3177777.html
Copyright © 2011-2022 走看看