当前位置:易讯网络 >> 服务中心 >> 培训知识 >> 浏览文章

是什么Android

    来源:互联网 作者:未知 日期:2011年05月21日 访问次数: 【字体: 】 tag:
关于Android的技术介绍文章,最有名的当然是Android开发网站的What is Android。不过下面这篇来自Google工程师Tim Bray的介绍性文章What Android is同样引入如胜,尤其是如果你不喜欢Android开发网站那幅架构图的话。此外本文同样可以做为那篇文章的辅助读物。

首先,让我引用Dan Morrill在他的一篇文章中的一段话来做为Android的定义。

 

Android不是一个规范,或者一个传统意义上的Linux发行版,它也不是一些可替换的组件集合。Android是一些软件,可以让你移植到某个设备上。

点击浏览下一页

Linux

在所有组件的最下面毫无疑问是Linux kernel(我的Nexus One手机运行的是Android Froyo,它使用的Kernel版本是2.6.32),以及一些我们特制的用来省电的扩展;当然我们会尽量让这些扩展能够合并到主kernel版本中去,实际上这个进程已经开始了(译者注:据Greg K-H的一篇blog,Android相关的Kernel代码已经从Kernel中删掉了,原因简单来说,就是没有人真正关心这些代码)。

虽然Android运行在Linux之上,但是我并不同意将Android称作是Linux发行版。因为那些你期望从一个Linux发行版里找到的东西,Android里几乎一个也没有。比如共享库,Shell,编辑器,GUI以及编程框架等。如果你在Android设备上用过shell的话,你会发现你能找到的熟悉的东西只有那个漂亮的裸露的kernel。

当然如果Android是一个发行版的话,它肯定也是使用最多的发行版,因为现在它一天的出货量就能达到20万台。当然没人关心这些数据,并且还有更多嵌入式Linux运行在各种你注意不到的电子产品里,所以并没有人宣称Android是最流行的Linux。

Dalvik

下一个重要的东西就是Dalvik了,它由一个Java虚拟机以及一些基本的运行库组成。它的设计相当独特,通过最近的历史来看,Dalvik做为应用程序的地基运行的还不错。

所有用来生成Android应用程序所需要的标准API都定义为Dalvik类,接口,对象以及方法。当然有些接口只是在原生实现(native implementation)的基础上用Dalvik代码包了一层。

有时候在Dalvik与Native代码之间通过JNI协议互相调用是可能的,甚至是通用的做法,因为在Dalvik上运行的并不是通常JVM上所运行的Java字节码,所以这可以看作是一个漂亮的技巧。

应用程序是怎么生成的

Native代码现在只能通过编译C/C++代码生成,当然没有规定一定要这样做。Dalvik代码现在是通过生成Java字节码,然后再翻译这些字节码生成的,当然也没有规定一定要这么做。

我想就这一点稍稍强调一下。Android应用程序是那些运行在这个平台之上并使用这些API的代码,只要应用程序正确的做到了这一点,我们不应该关心它是怎么生成的。

特殊的应用程序

上面这幅图有一点令人误解,因为有些基于Dalvik的程序是由Google提供的,但它们通常被认为是Android的一部分。比如拨号程序,通讯录,日历,Gmail等等。这些程序大部分是开源的,并且可以被替换(实际上很多制造商也确实换成了他们自己的定制);少数程序没有开源并且是专有的,比如Google地图,应用商店。

关于开源

在上面的这幅图里,绿色的大部分使用的是开源的Apache协议。剩下的有GPL,LGPL,BSD以及Apache协议。当然这里面得排除那些底层的驱动,以及大部分非Google出品的应用程序,他们是非开源的。

点击浏览下一页

框架

这是唯一能够标识Android的东西;所有的组件或多或少都是Google实现的,并且你不可能在其它Linux盒子里找到。如何使用这个框架是developer.android.com的主题,当然还有其它大量的站点也提供这方面的内容。因为你已经了解这些内容了,所以我就不细说了。

点击浏览下一页

单词standard在这里表示“程序员在开源环境下工作可以使用的东西”。这幅图并没有完全包含所有的一切。

有相当多的人,也包括我在内,都曾经过于强调Harmony库的角色。在最初开始时,Android并没有选择其它类似的包,比如 AWT,Swing以及OMG CORBA,因为它们提供的复杂的功能对于应用程序来说有点过剩了。

同样,如果只是统计代码的话,那么在上面这幅图里,Harmony代码并不到总量的一半。我并不想贬低Harmony(他们是一个非常棒的项目),但如果说Android就是Dalvik加Harmony的话也是不准确的。

点击浏览下一页

点击浏览下一页

应用程序里有什么?

一个Android应用程序通常包含在一个APK文件里,这实际上是一个ZIP文件,只不过内部有特殊的文件布局,可以在运行的时候不用解压缩。其它没有任何神奇的地方,你可以用邮件把某个APK文件邮寄给朋友,或拷到U盘里,或者直接用unzip解开。

Android Manifest是应用程序与Android系统的接口,也是我在这儿要说的地方,因为它是最容易让人困惑的并且关键的东西,所以值得讨论。

Resource bundle包含了你的音频,视频以及图像等不需要从网络下载的东西。

是否使用Native

大多数应用程序都是基于Dalvik。当我说大多数的时候,我指得是所有除了游戏的应用,游戏开发者通常会使用C/C++来开发代码。Dalvik虽然也提供了一个比较快的访问OpenGL的接口以及所有硬件的接口,但游戏开发者通常不喜欢Java虚拟机,所以他们使用Android NDK。

如果你用Java语言来写代码,那么你可以使用Eclipse以及一个工具链来进行开发,这个工具链非常好用,因此你可以快速入门。如果你打算用NDK来编码,你需要自己动手来完成一些编译时的机制,并且不得不忍受没有好的编译及调试支持,以及日后可能的移植到其它CPU架构所隐藏的麻烦。当然游戏开发者都喜欢在苦中做乐。

这就是Android,希望你能喜欢这些图片。

© CopyRight 2006-2011 易讯网络|成都驰锐科技有限公司 联系地址:成都市洗面桥街33号艺墅花乡8F 邮编:610041
联系电话:028-81876590 66018672 66018673 66018676 66018678 传真:028-66018689 电子邮件:etion@etion.cn 蜀ICP备08002688号