Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 565|回复: 0

Ubuntu12.04编译Android4.0.1源码全过程-----附wubi安装ubuntu编译android源码硬盘空间不够的问题解决

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-8-28 11:26:26 | 显示全部楼层 |阅读模式

    本文转至  http://blog.csdn.net/yanzi1225627/article/details/9263097

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

     

    1. # A fatal error has been detected by the Java Runtime Environment:  
    2. #  
    3. #  SIGSEGV (0xb) at pc=0x40362d33, pid=12195, tid=2835454784  
    4. #  
    5. # JRE version: 6.0_45-b06  
    6. # Java VM: Java HotSpot(TM) Server VM (20.45-b01 mixed mode linux-x86 )  
    7. # Problematic frame:  
    8. # V  [libjvm.so+0x158d33]  
    9. [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

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

     

    1. echo "board=" > out/target/product/generic/android-info.txt  
    2. Installed file list: out/target/product/generic/installed-files.txt  
    3. build/tools/fileslist.py out/target/product/generic/system > out/target/product/generic/installed-files.txt  
    4. Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img  
    5. out/host/linux-x86/bin/mkyaffs2image -f  out/target/product/generic/system out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img  
    6. Install system fs image: out/target/product/generic/system.img  
    7. out/host/linux-x86/bin/acp -fp out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img out/target/product/generic/system.img  
    8. true  
    9. out/host/linux-x86/bin/mkbootfs out/target/product/generic/root | out/host/linux-x86/bin/minigzip > out/target/product/generic/ramdisk.img  
    10. out/host/linux-x86/bin/mkyaffs2image -f  out/target/product/generic/data out/target/product/generic/userdata.img  
    11. 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代码,下一步就是下载内核代码,并将编译的镜像安到模拟器上!

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-28 12:42 , Processed in 0.069635 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表