技术开发 频道

独辟蹊径系列 带着大家玩Android

   【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代码树同步到本地

Initializing project platform/packages/apps/Browser ...
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/添加执行权限并执行安装

chmod +x jdk-1_5_0_06-linux-i586.bin
.
/jdk-1_5_0_06-linux-i586.bin

  安装后出现jdk1.5.0_06文件夹,编辑/etc/profile文件添加JAVA_HOME变量和其他的编译变量

JAVA_HOME=/usr/local/jdk1.5.0_06
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等编译需要的软件包。

apt-get -y install build-essential zlib1g-dev flex bison gperf libsdl-dev libesd0-dev libncurses5-dev libx11-dev

  4、执行make命令开始编译

root@ubuntu:~# 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目录。

lvs@ubuntu:~$ ls
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添加模拟器执行环境变量

# Android  emulator
PATH
=”$PATH:/home/lvs/out/host/linux-x86/bin”
ANDROID_PRODUCT_OUT
=/home/lvs/out/target/product/generic
export ANDROID_PRODUCT_OUT

   启动模拟器

root@ubuntu:~/out/target/product/generic# /usr/local/android-sdk-linux_86/tools/emulator -image system.img -data userdata.img -ramdisk ramdisk.img

  二、在VirtualBox上体验Android-X86

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

  安装过程截图如下:

 

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

0
相关文章