Android源代码编译官方网站:http://source.android.com/source/initializing.html
一.安装JDK6
如果要用ubuntu编译android4.0源代码,那么,最好是安装64位的ubuntu系统.而且需要安装JDK。系统自带有OpenJDK,这个倒是不影响源码下载,但是在编译的某步会报缺少tool.jar的错误(jdklib内的包)。
关于Linux环境下Oracle JDK具体的安装配置,请看这里-->《Linux下安装配置JDK6》
二.换用gcc与g++的较低版本
但是如果使用4.4版本的gcc与g++,则不会出现这些错误,方法如下:
通过gcc -v命令可以发现gcc库在/usr/lib/gcc/i686-linux-gnu目录下,该目录下有当前系统支持的各种版本gcc库。在安装gcc 4.4前该目录下是没有4.4目录的,安装gcc 4.4后该目录下就会多出4.4这个目录,且该4.4目录下有各种相应库文件。
ubuntu系统下安装gcc 4.4的最好方法是仅用以下两条命令,不需要其它命令,否则编译时可能会出错。
1 $sudo apt-get install gcc-4.4
2 $sudo apt-get install g++-4.4
装完后进入到/usr/bin目录下
1 $ls -l gcc*
会显示以下结果
lrwxrwxrwx 1 root root 7 2011-10-29 09:11 gcc -> gcc-4.6
-rwxr-xr-x 1 root root 224544 2011-10-06 05:47 gcc-4.4
-rwxr-xr-x 1 root root 302104 2011-09-17 05:43 gcc-4.6
发现gcc链接到gcc-4.6,需要将它改为链接到gcc-4.4,方法如下:
1 $sudo mv gcc gcc.bak
2 $sudo ln -s gcc-4.4 gcc
同理,对g++也做同样的修改:
1 $ls -l g++*
lrwxrwxrwx 1 root root 7 2011-08-14 15:17 g++ -> g++-4.6
-rwxr-xr-x 1 root root 228640 2011-10-06 05:45 g++-4.4
-rwxr-xr-x 1 root root 306200 2011-09-17 05:39 g++-4.6
需要将g++链接改为g++-4.4:
1 $sudo mv g++ g++.bak
2 $sudo ln -s g++-4.4 g++
再查看gcc和g++版本号:
gcc -v
g++ -v
均显示gcc version 4.4.6,说明gcc 4.4安装成功。
1 执行的下面语句,安装git和python。如果提示一些包不存在,但已有一些相似的包,那么,如下的命令也相应改变原来已经存在的信赖包。
sudo apt-get install git-core gnupg flex bi zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z1-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc
2 接着, sudo apt-get install libx11-dev:i386
行完上面,就已经安装好了Git和Python,除了JDK,这两个也是必须的。下面就要准备下载源码了。。。
首先确保在你的home目录下面有一个bin目录,如果没有的话,执行下面命令:(注意是home目录下,进入终端时,可用 cd /home进入 然后 ls查看里面有什么)
$ mkdir /home/bin
$ PATH=/home/bin:$PATH
然后下载Repo脚本并确保它能够执行
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > /home/bin/repo
$ chmod a+x /home/bin/repo
4 初始化配置Repo客户端
首先创建一个空目录用来保存工作文件
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
5 然后初始化Repo
$ sudo repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
6 最后会叫你输入一个用户名和邮箱,然后选择颜色。下面所示,这个可以随便。
如果偶尔屏幕卡住了,没动了,而且也没有流量显示,或者感觉不到在下载,建议中断一下(按ctrl + z),然后重新执行第三步(repo sync),这时你会看到会有下载信息。发现,它不会重新下载,还会从中断的地方继续往下下载.第一次执行repo sync的时候,可能会有错误提示,记不清楚了,百度一下也会出来,重新运行一下repo sync命令就行了。。。
这是一个很漫长的过程,快的话几个小时,慢的话要几天也说不定,具体看电脑配置。耐心等吧。。。。
五. 编译Android4.0源代码
1 在编译Android源代码之前,为了使接下来的编译过程不发生错误,可以先确认你的电脑是否已经安装好了一些命令或者库。因为我编译的时候可能没前运行下面的命令,所以,刚一开始编译就出现了以下的问题,汗。
所以,如果你不想那么纠结,有一个比较好的办法,新建一个.sh文件(比如我的命名为layku.sh),将以下命令放入其中
sudo apt-get update
sudo apt-get-y install git-core
sudoapt-get -y install gnupg
sudoapt-get -y install sun-java6-jdk flex
sudoapt-get -y install bison
sudoapt-get -y install gperf
sudoapt-get -y install libsdl-dev
sudoapt-get -y install libesd0-dev
sudoapt-get -y install libwxgtk2.6-dev
sudoapt-get -y install build-essential
sudoapt-get -y install zip
sudoapt-get -y install curl
sudoapt-get -y install libncurses5-dev
sudoapt-get -y install zlib1g-dev
sudoapt-get -y install valgrind
保存,退出。
然后在终端中,执行这个文件。可能需要执行的权限。可以这样做,进入存放layku.sh的目录下,执行 chmod +x layku.sh 赋予执行权限
接着执行 ./ layku.sh (注意有一个点),就可以看到文件中的命令自动执行
等它执行完之后,我们就可以开始对我们下载回来的源代码进行编译了。
顺便说一声,这些方法都是实验室的师兄传授的,不然的话,那么问题真的不那么容易解决。所以,在此,表示强烈的感谢。
将下载好的目录解压(如果是压缩文件)。因为按以上的方法下载源代码速度很慢,加上现在很多网站已经提供android4的源代码下载,所以,我就从其他地方先弄来了源代码。(表示奸笑。。。)
好吧,我下载到的压缩文件是 android4.0.tar.gz,在终端在进入压缩文件所在目录,执行 sudo tar -Zxvf android4.0.tar.gz 将压缩文件解压出来。可以预先看一下解压得到的文件,里面有一大堆的东西,至少到底有什么用,我表示现在还无法告诉你,因为我从接触并安装Ubuntu到现在编译源代码,也就差不多一个星期左右。但有一个地方可以注意的是,解压出来的目录中,是没有OUT这个目录中,但等一下你编译后之后,你会发现多了这样一个目录,我们编译出来的东西全部在里面。
还有一个文件Makefile很重要,makefile控制整个android系统编译的make文件。用gedit打开,可以看到其内容如下:
### DO NOT EDIT THIS FILE###
include build/core/main.mk
### DO NOT EDIT THIS FILE###
可以看出,实际上控制编译的文件是:build/core/main.mk 具体工作流程,可以参考 http://lghjx.573114.com/Blog/Html/1E89/288515.html
2 开始编译
进入源代码根目录,执行 make -j2 (2表示你的电脑线程数,如果你的电脑配置好,cpu是四线程或者八线程的,可以相应把2改为4或者8,这样编译会快很多)
可以发现,当你按下回车键的时候,它就开始编译了。
这个过程会持续很久,即使是好一点的电脑至少也要三四个小时,而且可以发现,我的电脑两个cpu都是满载工作的,100% !!你可以打开系统监视器进行查看,按atl+F2,然后会命令框中输入gnome-system-monitor.如下图所示:
我当时是在晚上睡觉前让它开始编译的,第二天起来的时候它已经编译好了,所以我也不知道具体用了多少个小时。
可以看到android的源代码一共近17G,之前是4G多。
直接make android源码时,并没有make linux kernel,也没有编译sdk.由于接下来要运行模拟器,所以需要编译sdk.但并不用编译 linux kernel。如果要移值android,或增删驱动,则需要编译 linux kernel所以。
进入源代码目录,执行 make PRODUCT-sdk-sdk,开始编译sdk.这个过程不会太久,我在我的电脑上编译用了20多分钟。在此说一声,我的电脑很一般,不是神机。
至此,sdk编译好了之后,就有点跃跃欲试。想一睹阿四芳容了。(因为看别人都emulator出来了,很兴奋的样子)
于是,我迫不及待地在终端中输入 emulator,按理说,它就会弹出那个android的界面。但是,出错了,总是提示找不到emulator命令,这让我纠结了半天,网上的方法试了很多,但就是不行,想找个问,发现,永远是自己一个人,好吧。继续找,终于,试了一个方法,最后在按下回车弹出界面的那一瞬间,一股激动之情,油然而生,因为,成功了!!!!!!!!!!
那么,怎么成功的呢?我知道要配置环境变量,但试了好几种,结果总是提示找不到emulator命令。直到看了一篇文章,才知道问题出在哪里。这是它的链接,你们可以看一下。点击打开链接 http://blog.csdn.net/douzi168/article/details/5722949
$ cd~/android4.0/out/host/linux-x86/bin
增加环境变量
$ emacs ~/.bashrc
在.bashrc中新增环境变量,如下
#java 程序开发/运行的一些环境变量(具体路径配置要看你们自己把源代码放在哪里,我想,你们都懂的)
exportANDROID_PRODUCT_OUT=~/android4.0/out/target/product/g eneric
ANDROID_PRODUCT_OUT_BIN=~/android4.0/out/host/linux-x86/bin
exportPATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN}:${ANDROID_ PRODUCT_OUT};
最后,同步这些变化:
$ source ~/.bashrc
$ cd~/android4.0/out/target/product/generic
$ emulator -systemsystem.img -data userdata.img -ramdisk ramdisk.img (其实也可以直接 emulator 就行了)
回车,进入,进入android桌面,成功!
上图吧
传说中的android4.0,就长这个样子。
进入系统设置,切换成中文状态下的界面:
测试了一下,也可以上网。由于这些日子弄ubuntu弄到想吐,从一个从来没有接触到linux系统的菜鸟,到把ubuntu源代码编译出来,这个过程相当地惨不忍睹。
所以,当时就发誓,当我把它搞出来的时候,我一定要FUCK它。好吧,今天,我如愿了!
此刻,我想吃我挚爱的合味道!