在花费了N天的下载源码后,android5的源码终于被我下完了。这篇文章就来记录一下,我遇到的一些问题,供后人参考。
首先我的环境是mac+VirtualBox安装Ubuntu14.04LTS 64位系统。编译之前稍作准备的就是一些依赖库和工具的安装。首先一开始就会检测java的版本,我一开始安装的是Oracle官网的JDK7,但是它编译提示错误,截图忘截了,大概意思是需要Openjdk7的版本,于是就在环境变量中取消原来的JDK7,转而下载Openjdk7。安装openjdk挺简单的,主要就是先将源换成对应Ubuntu版本的源,像我的Ubuntu14.04用的是网易163的源:
deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
然后执行
sudo apt-get install openjdk-7-jdk
这样就可以了,接下来就是一些依赖库了,主要是一个32位库的安装这里给出一个安装集合:
sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl
还有一些其他的:
还可能会遇到一个问题类似这样:
error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
这个也是32库的原因,查原因的时候百度查了半天没找到,最后代理上了下谷歌才找到其解决办法:http://askubuntu.com/questions/147400/problems-with-eclipse-and-android-sdk。其中大概的解决办法是,Ubuntu12.10之前的版本,可以通过
sudo apt-get install ia32-libs
直接安装,而如果是之后的版本,可以尝试使用如下命令:
sudo apt-get install lib32stdc++6
这个也是我上面有提到的,不过我是Ubuntu14.04,似乎没用。但下面还有个大神有其他的解决办法:
sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
这几个安装完,基本就应该没什么问题了。
以上是目前遇到的问题,现在正在编译中,有问题我会持续更新~
出现下面的问题:
/bin/bash: xmllint: 未找到命令
安装如下两条命令:
sudo apt-get install xsltproc
sudo apt-get install libxml2-utils
-----------------------------------------------分割线--------------------------------------------------
一般来说,上面的步骤后,已经能够编译成功了,接下来就尝试运行下模拟器:
要注意的是,安卓4.1.1之后貌似需要export一个环境变量:
export ANDROID_BUILD_TOP=$ANDROID($ANDROID为你的安卓源码路径)
不然会出现如下错误:emulator: ERROR: You did not specify a virtual device name, and the system directory could not be found.
我编译Android5后,在out目录下并没有生成tool下emultor文件,但是直接把prebuilts/tools/linux-x86/emulator加入环境变量就好了。
在虚拟机环境下,运行emulator时有可能会出现一大堆OpenGL的问题,这个情况只要关闭3D加速即可。
另外如果出现如下错误:
emulator: WARNING: system partition size adjusted to match image file (550 MB > 200 MB)
emulator: WARNING: data partition size adjusted to match image file (550 MB > 200 MB)
只需要在emulator后面加跟参数:emulator -partition-size 1024 即可。
已经把Android源码拉下来并成功编译了,也成功运行了emulator模拟器,但是由于我是虚拟机中运行,开启了3D加速,导致OpenGL一堆错误,但是关闭3D后Ubuntu又很卡,所以还有个办法就是可以吧out目录下的三个img文件拷贝覆盖sdk下的system-image下的某个模拟器(比如android 5.0 的目录是android-21)下,然后使用sdk运行ADT就可以了。