一. 环境准备。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:~/Android$ repo 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/
这样就能够了。