ubuntu11.10下载并编译android4.0源代码

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++的较低版本 

Ubuntu11.10自带的gcc与g++版本为4.6,可用 gcc -v 查看。

用该版本编译android时会遇到一些错误,如:
 
1 host Prebuilt: monkeyrunner (out/host/linux-x86/obj/EXECUTABLES/monkeyrunner_intermediates/monkeyrunner) 
 
2 host C++: obbtool <= frameworks/base/tools/obbtool/Main.cpp 
 
3 <命令行>:0:0: 错误: “_FORTIFY_SOURCE”重定义[-Werror] 
 
4 <built-in>:0:0: 附注: 这是先前定义的位置 
 
5 cc1plus:所有的警告都被当作是错误

但是如果使用4.4版本的gccg++,则不会出现这些错误,方法如下:
 
通过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++
 
再查看gccg++版本号:
gcc -v
g++ -v
均显示gcc version 4.4.6,说明gcc 4.4安装成功。

三.安装开发包

      1   执行的下面语句,安装gitpython。如果提示一些包不存在,但已有一些相似的包,那么,如下的命令也相应改变原来已经存在的信赖包。

     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

行完上面,就已经安装好了GitPython,除了JDK,这两个也是必须的。下面就要准备下载源码了。。。

 3 安装Repo

首先确保在你的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 最后会叫你输入一个用户名和邮箱,然后选择颜色。下面所示,这个可以随便。

 

四.开始下载Androd源文件

万事具备,执行$repo sync这一句时,它就开始下载android源代码了。如下图所示

如果偶尔屏幕卡住了,没动了,而且也没有流量显示,或者感觉不到在下载,建议中断一下(按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

  1. 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.如下图所示:


    我当时是在晚上睡觉前让它开始编译的,第二天起来的时候它已经编译好了,所以我也不知道具体用了多少个小时。


 好了,那么,我们回过头来看看之前解压出来的源代码目录,发现此时多了一个out文件夹,如下所示,查看一下属性,居然10多G。这个估计就是我们编译出来的东西所存放的目录了。里面的东西,具体有什么用,我现在也不清楚。但上网搜了一下,在out/target/product/generic这个目录下,生成了3个img镜像文件 ramdisk.img 、system.img、 user.img,听说很重要,至于怎么个重要法,恕我现在没办法告诉你。假以时日吧。。。


可以看到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它。好吧,今天,我如愿了!

此刻,我想吃我挚爱的合味道!


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值