Ubuntu12.04上编译Android2.3.7源码
缘起
今年技能学习的一大目标是研究安卓的系统框架,因此最近业余时间在折腾编译Android源码。至于为嘛去编译那么老的2.3.7的源码,主要是因为买的老罗的源代码情景分析是基于2.3.7的,直接用2.3.7的源码看的时候不会有差异。
编译过程
0、系统情况
开始是选择直接在MBP上编译的,奈何mac上的Android编译依赖于XCode,而2.3.7的源码依赖XCode很老的版本(3.x大约),这在我的mac上是不行的,因此选择了比较容易配置的ubuntu系统,配置如下。
系统版本:Ubuntu12.04 amd64@ VirtualBox虚拟机,宿主机就是MBP咯 磁盘情况:80G虚拟磁盘,注意不要使用NTFS之类的移动硬盘以及共享文件夹来放源码 内存情况:5G内存(此处太少内存会导致编译出现离奇错误)
1、编译过程
0)源码下载,这里我就不讲了,直接repo同步就好。由于众所周知的原因,这里推荐使用USTC镜像同步,速度杠杠的
1)按照安卓官方的build步骤,准备必备的工具,apt-get分分钟搞定,谷歌build步骤
$ sudo apt-get install git 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 $ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
2)直接开始构建咯
source build/envsetup.sh lunch full-eng make -j4
3)运行构建产物看看效果吧
执行out/host/linux_x86/bin/emulator就可以启动一个虚拟机运行编译好的系统啦
构建问题
构建中还是遇到不少问题的,总结下来有下面几个啦
0)gcc、g++版本问题
由于Ubuntu12.0.4系统中默认的gcc以及g++版本是4.6x,而Android2.3.7的编译需要gcc4.4版本,所以我们需要手工安装4.4版本并且链接,方法如下
sudo apt-get install gcc-4.4 g++-4.4 g++-4.4-multilib gcc-4.4-multilib sudo rm -f /usr/bin/gcc sudo ln -s gcc-4.4 gcc sudo rm -f /usr/bin/g++ sudo ln -s g++-4.4 g++
1)/usr/bin/ld: cannot find -lz问题
原因是系统中没有按照libz的库,可以用下面命令安装
apt-get install zlib1g-dev
2)repo同步问题
在代码同步的时候遇到一个奇怪的问题,error.GitError: platform/system/bluetooth rev-list ('^276070fe8d015f3f58a515511d69a26bf863d499', 'HEAD', '--'): fatal: Not a git repository (or any parent up to mount parent /media),看描述是物理文件不全导致的,下面是解决方法
1、删除源码目录下除了.repo文件夹的所有源码文件 2、再次运行repo sync同步,如果代码已经同步完的话此处是很快的,相当于从git的object对象文件中迁出当前的文件到磁盘
一个要特别注意的点
下面要说一个十分十分坑,而且容易被忽略的问题
一定不要把代码放在ntfs等不区分大小写的分区,一定不要使用经过不区分大小写分区之后压缩得到的源码包
一定不要把代码放在ntfs等不区分大小写的分区,一定不要使用经过不区分大小写分区之后压缩得到的源码包
一定不要把代码放在ntfs等不区分大小写的分区,一定不要使用经过不区分大小写分区之后压缩得到的源码包
如果用虚拟机一定不要用共享文件夹来放代码
如果用虚拟机一定不要用共享文件夹来放代码
如果用虚拟机一定不要用共享文件夹来放代码
重要的事情说6遍,当年被这个问题坑了很久没找到原因也是醉。。。。。。。。
顺便吐槽下,难道谷歌的代码库中又同一目录放大小写不同的2个同名文件???这是什么鬼的代码规范(纯吐槽,木有验证咯)
发表评论