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这个工具,你可以使用如下命令安装:
- sudo apt-get install gparted
剩下的操作就简单了,需要将未格式化的部分格式化为ext4格式,然后挂在就行了。其实就相当于你原先只有C盘的Windows增添了一个D盘。
二、设置编译环境
解决了空间的问题,就需要按照Android官网上的教程一步一步做了。在ubuntu12.04下,只需三步:
1、安装依赖包,其实就是官网上那一步:
- 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-dev:i386 g++-multilib mingw32 openjdk-6-jdk tofrodos
- python-markdown libxml2-utils xsltproc zlib1g-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,然后安装即可。
- cp jdk-6u22-linux-i586.bin /opt
- cd /opt
- ./jdk-6u22-linux-i586.bin
然后修改环境变量:
- sudo vim /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]。
- sudo apt-get install gcc-4.4
- sudo apt-get install g++-4.4
- cd /usr/bin
- sudo ln -s gcc-4.4 gcc
- sudo ln -s g++-4.4 g++
三、下载编译
剩下的就是下载Android Source,这个按官网上照做就行,可以参照前面的一篇博客。编译源代码:
- . build/envsetup.sh
- lunch full_x86-eng
- make -j8
那么怎么下载Android内核呢?我的测试机为Nenux S,因此以S为例:
- git clone https://android.googlesource.com/kernel/samsung.git
- //查看版本
- git bransh -a
- //这里我选择了remotes/origin/android-samsung-3.0-ics-mr1
- git checkout -b android-samsung-3.0-ics-mr1 origin/android-samsung-3.0-ics-mr1
最后编译内核,按照官网说的做就行。
- //设置交叉编译工具路径,具体看你把prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin放哪了
- export PATH=$(pwd)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH
- export ARCH=arm
- export SUBARCH=arm
- export CROSS_COMPILE=arm-eabi-
- make herring_defconfig
- make