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

时间:2022-12-24 15:52:00

本文转至  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,截图如下:

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

       这里记录下编译前后相关文件夹的大小,编译前源码文件夹的大小是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查看磁盘使用情况:

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

         这里已经自动挂载好了,其中的/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代码,下一步就是下载内核代码,并将编译的镜像安到模拟器上!