如果选择比较新的Linux版本(例如Fedora 10),则编译Android将比较顺利,一般直接make就可以成功生成所需要的文件和系统内核。(最多需要安装gperf), 但在比较旧的Linux内核上编译Android将遇到很多错误,本文以Fedora Core 5为例讲解所安装的步骤,供大家参考。
1. 因为Android SDK需要JDK 5或JDK 6支持, 但是Fedora Core 5的默认Java版本为JDK 4 (1.4.2), 不能满足需求,因此首先需要升级JAVA.
从如下地址可以得到最新的JDK
将下载的jdk-6u11-linux-i586.bin文件用chmod +x 设为执行,执行该文件将会自动解开为jdk1.6.0_11子目录,将该目录复制到合适的位置(例如/usr), 然后需要在启动文件中修改默认的JAVA主目录。
下面的修改以/usr目录做为存放路径
修改/etc/bashrc, 增加下面的内容
export JAVA_HOME=/usr/jdk1.6.0_11
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
这样重新启动后,相应配置将激活,运行 java -version将出现下面提示:
[root@Neil java]# java -version
java version "1.6.0_11"
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode, sharing)
[root@Neil java]#
说明java已经成功被安装了
2. 安装gperf
如果本机不存在gperf时,需要安装gperf. (Fedora 10下也有可能需要该文件)
yum install gperf
安装完成后,运行gperf --help将会有提示信息显示
3. 因为Android需要gcc编译器所包含的include文件至少是2.6版本的, 但是Fedora Core 5自带的gcc 头文件所用的版本为2.4版本,将造成Android编译时找不到相应的定义。
cat /usr/include/linux/version.h
#define UTS_RELEASE "2.4.20"
#define LINUX_VERSION_CODE 132116
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
[root@Neil java]#
此时我们可以采用移植的方法暂时将 /usr/include/linux目录改为我们需要的版本,下面以一个已经配置过的Linux-2.6.18.1作为移植头文件版本,用户可以自行设定。
cd /usr/include
mv linux old-linux
ln -s /usr/linux-2.6.18.1/include/linux
此时/usr/include/linux将使用Linux-2.6.18.1的Linux 头文件了。
4. make
如果顺利的话,将在out目录下产生出我们所需要的SDK和相关的Kernel文件了。
Generated: (out/target/product/generic/android-info.txt)
Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_unopt_intermediates/system.img
Install system fs image: out/target/product/generic/system.img
Target ram disk: out/target/product/generic/ramdisk.img
Target userdata fs image: out/target/product/generic/userdata.img
[root@Neil mydroid]
5. 修改/etc/bashrc, 增加相应的声明信息.(用户可自行修改到相应Android目录)
export PATH=/usr/mydroid/out/host/linux-x86/bin:$PATH
export ANDROID_PRODUCT_OUT=/usr/mydroid/out/target/product/generic
6. 运行emulate就会出现Android的启动画面了。
Android 主画面:
Android 浏览器(基于Webkit)
Android的一个3D演示: (魔方)
一个小经验:
当出现下面的错误信息时,一般都是因为make出错后,才另外安装的gperf, 此时只要执行make clean, 再make就可以了。
external/webkit/WebCore/css/CSSGrammar.y: In function 'int WebCore::getPropertyID(const char*, int)':
external/webkit/WebCore/css/CSSGrammar.y:81: error: 'findProp' was not declared in this scope
external/webkit/WebCore/css/CSSGrammar.y:85: error: invalid use of incomplete type 'const struct WebCore::props'