本文转至 http://blog.csdn.net/yanzi1225627/article/details/9263097
昨晚在编译源码,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代码,下一步就是下载内核代码,并将编译的镜像安到模拟器上!