Mac OS X Lion下编译Android Source错误连连,无奈还得用Ubuntu,最近ubuntu发布了LTS版本12.04,于是乎就用12.04了。由于Mac OS本身就源于BSD Unix,装ubuntu多系统有点浪费硬盘,就用虚拟机VMware Fusion装了ubuntu。
一、增大虚拟硬盘
但是麻烦又来了,VMware Fusion默认分给ubuntu的最大虚拟硬盘空间只有20G,而Android官网上说,“The source download is approximately 6GB in size. You will need 25GB free to complete a single build,and up to 90GB (or more) for a full set of builds”,于是还得增大虚拟硬盘的空间。方法如下:1、虚拟机->设置->硬盘,然后将磁盘大小改到你想要的大小,这里我的是120G。
2、将新增的部分格式化。
这里我在ubuntu里直接用了GParted这个工具,你可以使用如下命令安装:
sudoapt-getinstallgparted
剩下的操作就简单了,需要将未格式化的部分格式化为ext4格式,然后挂在就行了。其实就相当于你原先只有C盘的Windows增添了一个D盘。
二、设置编译环境
解决了空间的问题,就需要按照Android官网上的教程一步一步做了。在ubuntu12.04下,只需三步:
1、安装依赖包,其实就是官网上那一步:
sudoapt-getinstallgit-coregnupgflexbisongperfbuild-essential
zipcurllibc6-devlibncurses5-dev:i386x11proto-core-devlibx11-dev:i386
libreadline6-dev:i386libgl1-mesa-dev:i386g++-multilibmingw32openjdk-6-jdktofrodos
python-markdownlibxml2-utilsxsltproczlib1g-dev:i386
2、安装sun-java
按照官网上说的,openjdk编译有问题,所以必须得安装sun官方的JDK。先从sun官网上下载JDK,2.3或者更新的版本用java6,2.2及以前的版本用java5。我们的版本是4.0.3,所以应该下载jdk6,这里我们用的是jdk-6u22-linux-i586.bin。先将jdk-6u22-linux-i586.bin copy到/opt,然后安装即可。
cpjdk-6u22-linux-i586.bin/opt
cd/opt
./jdk-6u22-linux-i586.bin
然后
修改环境变量:
sudovim/etc/environment
//将/opt/jdk1.6.0_22/bin:/opt/jdk1.6.0_22/lib:/opt/jdk1.6.0_22添加到PATH最前面,结果类似于
PATH="/opt/jdk1.6.0_22/bin:/opt/jdk1.6.0_22/lib:/opt/jdk1.6.0_22:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
注意:必须把路径加载最前面,以防止系统使用openjdk,或者你把openjdk卸载也行。
3、将默认的gcc4.6换成gcc4.4,太高的gcc版本导致出现各种
错误,比如error: “_FORTIFY_SOURCE” redefined [-Werror]。
sudoapt-getinstallgcc-4.4
sudoapt-getinstallg++-4.4
cd/usr/bin
sudoln-sgcc-4.4gcc
sudoln-sg++-4.4g++
三、下载编译 剩下的就是下载Android Source,这个按官网上照做就行,可以参照
前面的一篇博客。编译源
代码:
.build/envsetup.sh
lunchfull_x86-eng
make-j8
那么怎么下载Android内核呢?我的测试机为Nenux S,因此以S为例:
gitclonehttps://android.googlesource.com/kernel/samsung.git
//查看版本
gitbransh-a
//这里我选择了remotes/origin/android-samsung-3.0-ics-mr1
gitcheckout-bandroid-samsung-3.0-ics-mr1origin/android-samsung-3.0-ics-mr1
最后编译内核,按照官网说的做就行。
//设置交叉编译工具路径,具体看你把prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin放哪了
exportPATH=$(pwd)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH
exportARCH=arm
exportSUBARCH=arm
exportCROSS_COMPILE=arm-eabi-
makeherring_defconfig
make