What Android Is/初识安卓

Tim Bray是Google的一位工程师,近日发布了一篇博文非常清楚的描述了Android系统架构。原文地址:

http://www.tbray.org/ongoing/When/201x/2010/11/14/What-Android-Is


原载于CSDN,仅是节译版,出于兴趣就自己翻译了一下。这是我第一篇翻译的文章,个人也是初学android。如有错误,希望园友们不吝指正。(CSDN上写作者是Sans Serif...- -)


What Android Is

 

(第一部分不提,大致讲了他为什么写作此文,因为觉得官网上的文章(What is Android?)里头的图太丑了……?)

——————————————正文的分割线——————————————————

 

首先,正如Dan Morrill在On Android Compatibility里明确说明的那样,“Android并不是传统意义上的Linux规范或是发行版,也不仅仅只是一个可替换组件的集合,(事实上,)Android是一个你用来连接设备的软件组团(块)。”

Linux

(Android的)底层是一个在合理地不断更新的Linux内核(在我现在运行在Nexus One上的Froyo的内核是版本2.6.32),并包括了一些我们编写的的电源管理扩展。但(我们)试图将这个模块合并至主流Linux的事情被放大并成为了公众事件,结果最后果断被和谐了(is byno means over)。

Android运行于Linux内核上,但我并不认为它能称为一个发行版,因为它并没有很多大家认为一个发行版该有的东西:如库,Shells,编辑器,GUI及编程框架等。事实上,当你第一次在一个Android设备上使用shell(?)的时候,你就会发现,它很明显是一个相当意义上的“裸核”。

如果它是一个发行版,它将是发行量相当大的版本之一,在2010年的晚些时候大概一天20万份。但是没人会去数这些东西,并且还有巨量的嵌入式Linux在难以计数的消费电子产品中被分发。所以它明显不像某些人所宣称的那样是“最流行的Linux发行版”。

Dalvik

另一个重要部分则是Dalvik,包括虚拟机和整个的运行时基件(群)(basic runtime essentials),它们被设计得精巧独特。鉴于最近的测试,作为移动设备的应用底层,它们运行得相当良好。

所有你用于创建Android应用的标准API都是依照Dalvik类,接口,对象和方法等来定义的。实际上,它们中的一部分只是Dalvik码与本地执行中简单的中间层而已(thin layers of Dalvik code over native implementations)。

使用JNI(协议)来回调用Dalvik和本地代码是可行的并且是个惯例,由于运行在Dalvik上的东西与运行在Java虚拟机上的字节码并没有半丁点的相像,所以这就是一个灵巧的把戏(a neat trick)(译者:这句话没看很懂…)。

代码如何生成

目前本地代码或多或少只能靠编译C或C++代码实现,你不必知道太多。Dalvik码目前靠生成Java字节码并翻译它们产生,你也不必知道太多。

我再稍微强调一下这点,Android应用是被定义为运行在平台上并且调用系统API的的代码。只要一个应用做好这些事情,没人会关心它是如何生成的。

特殊程序

有的图片(应该是指官方手册里的那幅图)有点误导性,因为有些应用是由Google提供的并且有时被视为Android的一部分,如:拨号程序、电话、联系、日历和Gmail等。他们中的大部分是开源并且可替换的(有的已经被手机厂商替换了),其余的小部分是商业且私有的,如Google地图和电子市场等。

关于开源

在上面那张大图里,大部分绿色的东西是基于Apache许可证的,其余的基于GPL、LGPL和BSD许可证,同时还包括了一些非开源底层设备驱动和非Google的软件(大部分不开源)。

框架

这是仅在Android里定义的东西,基本上所有东西都是Google编写的,所以就别指望在其他良好配置过的GNU/Linux系统里找到它们了。如何良好地调用这些库是developer.android.com上大量文章,无尽的mailinglists,样例站点和不断增长的图书们的主题。

(所以在这俺就不说了……)

标准库

“标准”这词在这里表示“对在一个开源环境下工作的程序员来说是通用的”,图片并不是很便于理解(这点)。

有相当部分的人,包括我,有些过于强调了Harmony类库的作用(,不过这是不对的)。首先,Android的选择里没有包含很多东西,如:AWTSwingOMG CORBA等,对于使用Android框架的应用来说,这些都是多余的。

并且,如果粗略估算一下这幅图里所有东西的代码量,Harmony库大约只占了一半不到。我并不是在无视Harmony类库,这是一个了不起的项目,并且我也是其拥趸之一。但这并不能说明Android就只是Dalvik和Harmony库的组合。




APP里有什么?

一个Android应用保存在一个被称为APK,但其实只是普通ZIP文档的文件里。一个特殊的内部文件配置使其能运行在合适的地方而无需解压。它们没什么神奇的,你可以email或把他们放到U盘里,也可以用解压工具解压它们。

Android Manifest是应用与系统之间的接口,这是我在这里唯一能说的。因为这是整个应用的关键,完全值得用巨大的篇幅来讨论。

(所以在这俺也不多说了……)

Resource bundle(资源簇)包含了应用所需要的音频、视频、图像等等文件,而不用从网络即时加载。

是否需要本地调用?

目前大部分程序是基于Dalvik的,这里的“大部分”是指“除了游戏外”。游戏开发者通常希望能使用C和C++进行编码。Dalvik提供了简单并且快速的方法来调用OpenGL及所有的手机硬件,但游戏开发者可不太喜欢虚拟机这玩意儿,所以他们使用Android NDK

如果你是用JAVA编程,你可以使用Eclipse和一系列相当不错的工具集,这些东西令入门门槛变得相当得低。如果你是用NDK编程,你就需要做亲自做大量的生成时的机械工作(build-time machinery),而且没有一些优秀的调试和配置工具,更别提移植代码到别的CPU架构上运行。不过游戏开发者们就是这样痛并快乐着。

 

最后,我想说,以上就是Android。希望大家能喜欢这些图片,并感谢DanBornsteinDanMorrill及Brian Swetland的帮助。

 

——————————————结尾的分割线——————————————————

这篇文章可随意转载,但转载是请标明原作者及源地址。

梦无忆/Jesse Luo 享有本篇文章的译文版权。原作版权属于原作者所有。

1.1.101231

PDF下载请点此

posted @ 2010-12-31 10:07  Jesse_Luo  阅读(2017)  评论(6编辑  收藏  举报