在Ubuntu上下载、编译和安装Android源码

本文一部分参考老罗android之旅java

一. 环境准备。python

     1. 磁盘空间预留20G左右,内存最好8G,由于一边要跑主机,一边要跑虚拟机,内存要求仍是比较高的,这样才会比较流畅。linux

     2. 可是我是在物理盘上装得ubuntu, 非虚拟机,4G内存就够了.android

     3. 至于Ubuntu安装这个就不说了.git

     4. 安装Git工具。Android源代码采用Git工具来管理,与SVN相比,这是一种分布式的源代码管理工具,而SVN是集中式的源代码管理工具。要安装Git工具,在Ubuntu上执行如下命令便可:ubuntu

 USER-NAME@MACHINE-NAME:~$ sudo apt-get install git-core gnupgcurl

     5. 安装Java SDK。在Ubuntu上执行如下命令:分布式

     USER-NAME@MACHINE-NAME:~$ 工具

sudo add-apt-repository ppa:ferramroberto/javaflex

     

USER-NAME@MACHINE-NAME:~$ 

sudo apt-get update

     USER-NAME@MACHINE-NAME:~$ 

sudo apt-get install sun-java6-jre sun-java6-plugin

     USER-NAME@MACHINE-NAME:~$ 

sudo apt-get install sun-java6-jdk

       

     

     6. 依赖的其它包。在Ubuntu上执行如下命令:

     USER-NAME@MACHINE-NAME:~$ sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl

     7. 调试工具。在Ubuntu上执行如下命令:

     USER-NAME@MACHINE-NAME:~$ sudo apt-get install valgrind


    二. 下载Android源代码工程。

     1. 下载repo工具。在Ubuntu上执行如下命令:

     USER-NAME@MACHINE-NAME:~$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ./repo

     USER-NAME@MACHINE-NAME:~$ chmod 777 repo

     USER-NAME@MACHINE-NAME:~$ cp repo /bin/

     2. 下载Android最新版本源代码。在Ubuntu上执行如下命令:

     USER-NAME@MACHINE-NAME:~$ mkdir Android

     USER-NAME@MACHINE-NAME:~$ cd Android

     USER-NAME@MACHINE-NAME:~/Androidrepo init -u https://android.googlesource.com/a/paltform/manifest -b android-2.3.1_r1

     USER-NAME@MACHINE-NAME:~/Android$ repo sync

     通过漫长的等待(我下载了两三天)后,就能够把Android源代码下载下来了。其间可能还有经历下载中断的状况,这时只要从新执行repo sync就能够了。

      有个问题要说一下,就是下载的战线拉的很长,因此不免有时候断网,这个写一个python程序断网或者中断的时候从新继续下载,在WORKING_DIR目录下 新建一个down,sh

      内容以下所示

      若是显示以下,则说明sync repo 已经完成,源码已经下好了

      这时能够看到WORKING_DIR目录下面已经有东西了,没错,就是android源码文件:

     三. 编译Android源代码。

     1. 编译。在Android目录下执行如下命令:

        固然,能够在make后面加上  -jn  开几个线程去make。(n好比我cpu是双核的  那就写4)

        第一次编译确定不会成功的,老是在历经很错失败时候,仍是不能成功。。。(坑爹啊=.=)

        我想,在输入make以后,出现的第一个错误就是下面这个错误了

        缘由是由于谷歌默认android编译是在64位系统上才能编译的,可是哥哥是32位系统啊,不会再让我再装一个吧,很苦逼的呢。别担忧,所谓上有政策,下有对策吗,哈哈。那么就让咱们看看./build/core/main,mk文件,哈哈 找到了就是这一句:

        将 ifneq (64,$(findstring 64,$(build_arch)))    修改为  ifneq (i686,$(findstring i686,$(build_arch)))

        还有几处要改

        找到下列文件:

     /external/clearsilver/cgi/Android.mk

     /external/clearsilver/cs/Android.mk

     /external/clearsilver/java-jni/Android.mk

     /external/clearsilver/util/Android.mk

     修改LOCAL_CFLAGS和LOCAL_LDFLAGS变量:

     # This forces a 64-bit build for Java6

     # Change the following two lines for building on a 32-bit system.

     # LOCAL_CFLAGS += -m64

     # LOCAL_LDFLAGS += -m64

     LOCAL_CFLAGS += -m32

     LOCAL_LDFLAGS += -m32

      好了,这个错误解决了以后,咱们还会碰到错误的,OK,我就碰到了下面这个问题

    就是out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/RefBase.o] Error 1这个错误,在百度上搜了一下,是由于gcc版本过高了。因为Android对Ubuntu12.04编译平台的支持不是很推荐,有些库的兼容方面会有一下问题,在编译的过程当中不免会产生一写错误,就好比上面的和图片中的“_RORTIFY_SOURCE” 这个。因此,要从新下载gcc-4.4

sudo apt-get install gcc-4.4 
sudo apt-get install g++-4.4

    进入/usr/bin 删除gcc对gcc-4.6的连接,建立到4.4的连接

cd /usr/bin
sudo rm -r gcc
sudo ln -s gcc-4.4 gcc
sudo rm -r g++
sudo ln -s g++-4.4 g++

    OK,这一步完成以后,在继续make。若是还出错的话十一下这个命令

sudo apt-get install g++-4.4-multilib        #从新安装一下

    好了,就通过漫长的等待吧(本人是make -j4) 编译了两个多小时,大概两个半小时

    编译完成的后提示以下

    哈哈,若是你也编译完成了,那就恭喜你哈。

    对了,顺便再说一个问题,就是编译过程当中权限不够的问题。本人将源码下载在/usr/local下面,对这里的文件操做须要root权限的,若是使用sudo来提升权限的话,不少编译所须要的环境变量就找不到(好比java)。因此,简单一点就把这个文件夹下全部的文件夹和文件的own变成普通用户。

sudo chown -hR root /usr/local/androidSource/WORKING_DIR/

    这样就能够了。

相关文章
相关标签/搜索