本文一部分参考老罗android之旅
一. 环境准备。
1. 磁盘空间预留20G左右,内存最好8G,因为一边要跑主机,一边要跑虚拟机,内存要求还是比较高的,这样才会比较流畅。
2. 但是我是在物理盘上装得ubuntu, 非虚拟机,4G内存就够了.
3. 至于Ubuntu安装这个就不说了.
4. 安装Git工具。Android源代码采用Git工具来管理,与SVN相比,这是一种分布式的源代码管理工具,而SVN是集中式的源代码管理工具。要安装Git工具,在Ubuntu上执行以下命令即可:
USER-NAME@MACHINE-NAME:~$ sudo apt-get install git-core gnupg
5. 安装Java SDK。在Ubuntu上执行以下命令:
USER-NAME@MACHINE-NAME:~$
sudo add-apt-repository ppa:ferramroberto/java
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/
这样就可以了。