【IT168 文档】本期将带着大家在Ubuntu 9.10的系统上源码编译一个Android系统和在VirtualBox中使用Android-x86项目安装一个Android的系统,如果你想体验Google手机操作系统Android的神奇魅力,但不想花几千元钱购买昂贵的Android手机,在没有硬件手机之前了解和使用Android系统。本文中介绍的两种方式将是不错的一个选择。
首先介绍一下什么是Android
Android 是Google开发的基于Linux平台的开源手机操作系统。它摩托罗拉的首款Android手机CLIQ包括操作系统、用户界面和应用程序 —— 移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。Google与开放手机联盟合作开发了 Android,这个联盟由包括中国移动、摩托罗拉、高通、宏达电和 T-Mobile 在内的 30 多家技术和无线应用的领军企业组成。Google通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,希望借助建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。
它采用了软件堆层(software stack,又名软件叠层)的架构,主要分为三部分:低层以Linux核心工作为基础,只提供基本功能,其他的应用软件则由各公司自行开发,以java作为编写程式的一部分。另外,为了推广此技术,Google和其它几十个手机公司建立了开放手机联盟(Open Handset Alliance)。 Android使用Linux2.6作为操作系统,Linux2.6是一种标准的技术,Linux也是一个开放的操作系统。Android对操作系统的使 用包括核心和驱动程序两部分,Android的Linux核心为标准的Linux2.6内核,Android更多的是需要一些与移动设备相关的驱动程序。
android官方网站 http://code.google.com/intl/zh-CN/android/
android开发网站 http://developer.android.com
再来了解一下Android-X86 任何手机都是要在专有的硬件中使用的,即便Android是Linux开源代码平台也不例外的要依赖专有的手机硬件平台,不过在几位华人软件工程师的努力下,Linux的用户已经可以享受到真正在上网本上可以安装使用的Android了,这就是Android-x86开源项目。此项目可以轻松的将Android系统安装在X86平台的上网本或者是老式的笔记本上,当然也可以在老式的台式机上运行,不过在选择是否使用Android系统在本本上运行之前,首先在VirtualBox进行体验式很好的方式。 Android-x86 - Porting Android to x86 http://www.android-x86.org/ Android源码编译和使用Android-X86项目是两个完全不同的体验Android方式,前者是编译后的镜像文件通过Android的模拟器在Linux系统上运行,后者是使用一个rebuild的Linux版本安装在电脑上。本文的目的就是为大家揭开一层Android的神秘面纱。
再来了解一下Android-X86
任何手机都是要在专有的硬件中使用的,即便Android是Linux开源代码平台也不例外的要依赖专有的手机硬件平台,不过在几位华人软件工程师的努力下,Linux的用户已经可以享受到真正在上网本上可以安装使用的Android了,这就是Android-x86开源项目。此项目可以轻松的将Android系统安装在X86平台的上网本或者是老式的笔记本上,当然也可以在老式的台式机上运行,不过在选择是否使用Android系统在本本上运行之前,首先在VirtualBox进行体验式很好的方式。
Android-x86 - Porting Android to x86 http://www.android-x86.org/
Android源码编译和使用Android-X86项目是两个完全不同的体验Android方式,前者是编译后的镜像文件通过Android的模拟器在Linux系统上运行,后者是使用一个rebuild的Linux版本安装在电脑上。
本文的目的就是为大家揭开一层Android的神秘面纱。
一、在Ubuntu 9.10上编译Android源码并使用模拟器运行
1、编译前的准备工作,通过git获取Android的源码
通过git获取Android的源码、配置JDK1.5环境(使用最新的JDK1.6反倒是编译不过去),准备Ubuntu 9.10必要的编译环境。
Android是由Kernel、Dalvik、Bionic、Prebuilt、build等多个项目组成,每个部分分别使用Git进行管理,当时如果使用git命令来逐个获取显得很麻烦,所以Android项目编写了一个名为Repo的Python的脚本来统一管理这些项目的仓库,使得项目的获取更加简单。
在Ubuntu 9.10上安装git管理工具,su - 切换到root账户下执行apt-get install git-core curl
通过curl工具从获取Android项目Repo脚本文件。curl http://android.git.kernel.org /repo>~/repo
chmod a+x ~/repo
下载repo脚本文件到当前用户的home目录下,并保存在文件repo中,并给repo文件可执行权限。
执行利用repo脚本和Git、curl软件获取Android的源代码,~/repo init –u git://android.git.kernel.org/platform/manifest.git ~/repo initialized in /android这样的提示,说明本地的版本库已经初始化完毕,并且包含了当前最新的sourcecode。~/repo sync
使用repo sync命令把整个Android代码树同步到本地
remote: Counting objects: 2015, done.
remote: Compressing objects: 100% (484/484), done.
Receiving objects: 72% (1451/2015), 1.88 MiB | 185 KiB/s
Initializing project platform/packages/apps/GlobalSearch ...
remote: Counting objects: 1779, done.
remote: Compressing objects: 100% (290/290), done.
remote: Total 1779 (delta 862), reused 1779 (delta 862)
Receiving objects: 100% (1779/1779), 345.14 KiB | 118 KiB/s, done.
Resolving deltas: 100% (862/862), done.
* [new tag] android-sdk-1.6_r1 -> android-sdk-1.6_r1
* [new tag] android-sdk-tools_r2 -> android-sdk-tools_r2
Initializing project platform/packages/apps/Launcher ...
Fetching projects: 100% (142/142), done.
Checking out files: 100% (16/16), done.ng out files: 50% (8/16)
Checking out files: 100% (8022/8022), done.ut files: 13% (1095/8022)
Checking out files: 100% (5254/5254), done.
Checking out files: 100% (3810/3810), done.out files: 6% (232/3810)
Checking out files: 100% (4398/4398), done.out files: 25% (1137/4398)
Checking out files: 100% (641/641), done.g out files: 17% (110/641)
Checking out files: 100% (9061/9061), done.out files: 22% (2056/9061)
Checking out files: 100% (7942/7942), done.out files: 0% (33/7942)
Checking out files: 100% (1947/1947), done. out files: 2% (44/1947)
Syncing work tree: 100% (142/142), done.
repo sync同步过程,Syncing work tree说明已经同步完成。如果编译后需要获取新版本再次编译,不要重复执行初始化和sync同步过程。
2、编译前的准备工作,配置JDK1.5环境(使用最新的JDK1.6反倒是编译不过去)
在Android中使用谷歌自己开发的Java虚拟机内核技术(JVM),称为Dalvik,该Java虚拟机在Android手机上执行Java程序. 谷歌表示,即使在手机的限制性硬件上,Dalvik也能使Java程序运行得很快.与我们通常使用的Java虚拟机的一个显著的区别就是, Android并不属于Sun公司在1999年成立的Java标准制定组织(Java Community Process, 简称JCP)的一部分. JCP负责处理和审批各种Java技术和技术规范,将新的Java特点系统化为应用程序编程接口(API).
在android/dalvik/libcore/dom/src/test/java/org/w3c/domts下有很多java源文件,这意味着编译Android之前需要先安装JDK。
下载jdk 1.5的地址 http://java.sun.com/products/archive/j2se/5.0_06/index.html
如果使用jdk1.6的版本将会出现如下的提示。
Checking build tools versions...
************************************************************
You are attempting to build with the incorrect version of java.
Your version is: java version "1.6.0_17".
The correct version is: 1.5.
Please follow the machine setup instructions at
将下载的jdk-1_5_0_06-linux-i586.bin复制到/usr/local/添加执行权限并执行安装
./jdk-1_5_0_06-linux-i586.bin
安装后出现jdk1.5.0_06文件夹,编辑/etc/profile文件添加JAVA_HOME变量和其他的编译变量
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME
export ANDROID_JAVA_HOME=$JAVA_HOME
执行source /etc/profile获取新的环境变量信息,执行java -version查看当前的JDK版本。
3、编译前的准备工作, 准备Ubuntu 9.10必要的编译环境
准备Ubuntu 9.10中的编译环境第一就是GCC的环境,需要安装build-essential这个软件包,同时要添加zlib1g-dev flex bison gperf libsdl-dev libesd0-dev libncurses5-dev libx11-dev等编译需要的软件包。
4、执行make命令开始编译
target thumb C: libwnndict <= packages/inputmethods/OpenWnn/libs/libwnnDictionary/engine/ndldic.c
target thumb C: libwnndict <= packages/inputmethods/OpenWnn/libs/libwnnDictionary/engine/ndrdic.c
target thumb C: libwnndict <= packages/inputmethods/OpenWnn/libs/libwnnDictionary/engine/necode.c
target thumb C: libwnndict <= packages/inputmethods/OpenWnn/libs/libwnnDictionary/engine/ndcommon.c
target thumb C: libwnndict <= packages/inputmethods/OpenWnn/libs/libwnnDictionary/engine/nj_str.c
target SharedLib: libwnndict (out/target/product/generic/obj/SHARED_LIBRARIES/libwnndict_intermediates/LINKED/libwnndict.so)
target Non-prelinked: libwnndict (out/target/product/generic/symbols/system/lib/libwnndict.so)
target Strip: libwnndict (out/target/product/generic/obj/lib/libwnndict.so)
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
Installed file list: out/target/product/generic/installed-files.txt
出现上面的提示信息说明编译已经完成,同时会发现在代码目录下多了一个out目录。
bianyi andorind.odt Desktop hardware prebuilt 模板 音乐
bionic development Makefile repo 视频 桌面
bootable examples.desktop myandroid system 图片
build external out vendor 文档
dalvik frameworks packages 公共的 下载
5、安装Android模拟器android-sdk-linux_x86
到google网站下载http://developer.android.com/sdk/index.html页面下载android-sdk_r04-linux_x86.tgz到/usr/local/并解压,加压后文件夹/usr/local/android-sdk-linux_86/tools/中包含有 emulator模拟器。
编辑/etc/profile添加模拟器执行环境变量
PATH=”$PATH:/home/lvs/out/host/linux-x86/bin”
ANDROID_PRODUCT_OUT=/home/lvs/out/target/product/generic
export ANDROID_PRODUCT_OUT
启动模拟器


二、在VirtualBox上体验Android-X86
到android-X86网站下载android-x86-1.6.iso,然后启动VirtualBox进入安装过程。模拟Linux环境推荐使用VirtualBox这个是一个开源的而Vmware Workstation是收费的建议还是少用。
安装过程截图如下:







在android-X86上面同样可以体验很多Android上面的产品特性同时和源码编译Android方式相比屏幕更加适合用户的体验。对于Linux的系统管理员来说在Android上面使用终端工具链接到Linux服务器上也是一个很有兴趣的体验。同时这两种方式对于Android开发者也是一个开发运行环境的参考。