什么是Android?

Andriod是一种为移动设备设计的软件堆栈(software stack,可以理解为软件集或软件包),它包括了一个操作系统、中间层和一些关键应用程序。Android SDK提供了在Android平台上使用Java编程语言进行应用程序开发所必要的工具和API。

特性

  • 具有允许重用和替换组件的应用程序框架
  • 使用为移动设备而优化的Dalvik虚拟机
  • 基于开源的Webkit引擎的整合浏览器
  • 采用由自定义2D图形库驱动的经过优化的图形系统和基于OpenGL ES 1.0标准的3D图形系统(可支持硬件加速)
  • 支持适于结构化数据存储的SQLite
  • 媒体支持常见音频、视频、静止图片格式(如MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF)
  • 支持GSM手机通信(视硬件而定)
  • 支持蓝牙、EDGE、3G和WIFI(视硬件而定)
  • 支持摄像头、GPS、指南针和加速度计(视硬件而定)
  • 有包括模拟器、Debug工具、内存及性能分析工具、Eclipse插件在内的完备开发环境

Android结构

下面的图表展示了Andriod操作系统的主要组成部分。每一部分将在接下来被详细描述。

应用程序

Android将会包含包括电子邮件客户端、短信程序、日历、地图、浏览器、通讯录等一系列的核心程序。所有程序都是由Java编程语言写成。

应用程序框架

通过提供一个开放的开发平台,Andriod使得开发者能够开发出内容充实而有创新性的应用。开发者可以自由地使用设备硬件、获取地理位置信息、运行后台服务、设置闹钟、向状态栏添加提醒等。

开发者对核心应用所使用的API框架有着完全的访问权限。应用程序结构被设计成易于重用组件。任何应用程序都可以发布其功能并且任何其他的应用程序就可以使用它们(但是需要遵守框架的安全限制)。通过相同的机制,组件也可以被用户替换。

处于所有的应用程序之下的是一组服务和系统,它们包括:

  • 能被用来生成包括列表、网格、文本框、按钮甚至内嵌浏览器的各种应用程序的一组丰富而有扩展性的视图(View)。
  • 允许应用程序读取其他程序(如通讯录等)的数据并共享自身数据的内容提供器(Content Providers)。
  • 允许读取非代码资源(如本地字符串、图形和布局文件等)的资源管理器(Resource Manager)。
  • 允许应用程序在状态栏显示自定义提醒的通知管理器(Notification Manager)。
  • 管理应用程序生命周期并提供常用的导航归栈(backstack)功能的活动管理器(Activity Manager)。

更过详细信息请参阅记事本程序指导

Andriod包括了一系列被各种Android系统组件使用的C/C++库。开发者可以通过Android应用程序框架来使用这些库。下面列出了其中一些核心库:

  • 系统C库 标准C系统库(libc)的一个BSD衍生库,为嵌入式Linux设备做了调整
  • 媒体库 基于PacketVideo的OpenCORE,支持播放和录制包括MPEG4、H.264、MP3、AAC、AMR、JPG和PNG在内的许多流行的音频视频格式和静止图像文件
  • 表层管理器(Surface Manager) 管理对显示子系统的读取并能从多种应用程序间无缝构建2D和3D图层
  • 库Web核心(LibWebCore) 同时驱动Android浏览器和嵌入式web视图的一种现代web浏览器引擎
  • SGL 底层2D图形引擎
  • 3D库 基于OpenGL ES 1.0 API的一个3D库,可以使用硬件3D加速器(如果可用)或者经过高度优化的内建3D软件转化器
  • FreeType 位图及矢量字体支持
  • SQLite 可供所有程序使用的一个强大而轻量的关系型数据库引擎

Android运行

Android提供了一系列的核心库,能够提供大多数Java编程语言中可用的功能。

每一个Android程序都有其Dalvik虚拟机实例并运行于它自身的进程。Dalvik被设计为使一个设备可以高效地运行多个程序。Dalvik虚拟机以一种为小内存设备而优化过的Dalvik可执行格式(.dex)来执行文件。该虚拟机基于寄存器,可以运行由Java编程语言编译器编译的经虚拟机内置的dx工具转换为.dex格式的类。

Dalvik虚拟机依靠Linux内核来执行诸如线程和低级内存管理等底层功能。

Linux内核

Android的核心系统服务依赖于Linux 2.6,例如安全性、内存管理、进程管理、网络栈和驱动模型。该内核还作为硬件和其余软件栈之间的一个抽象层。

本页部分内容根据Android Open Source Project创作并共享的内容修改,并在知识共享 署名2.5许可协议中所述条款的限制下使用。

Android开发文档中文化计划始动

作为建立这个博客的一个很重要的原因之一,即是翻译并发布Andriod的开发文档。

由于一些众所周知的原因,Android的官方开发者网站在中国大陆是无法正常访问的,因此想要系统地查阅Android开发资料对于许多人来说就存在着一个门槛。同时,官方资料只有英语和日语的版本,又在无形中使不少人望而却步。国内虽有一些中文的材料,但却没有一个系统性的整理。基于以上原因,我一直很想翻译Android的开发文档,一方面是在翻译中学习提高,一方面也是方便其他有志于Android的开发者,当然也算是为Android在中国大陆的推广普及做自己的一份贡献。

整个计划从今天正式开始,我将不定期但较频繁地发布翻译内容。鉴于水平有限,如有任何问题欢迎指教。

PS.虽然猜想应该没有问题,但是仍然想要查看一下Android的开发文档有没有相应的版权政策以免造成不必要的麻烦,将在得到确定之后更新这一文章。

更新:查了一下,Android开发者网站的内容基于cc2.5的开源协议,也就是说对其内容进行翻译和公开发布是完全没有问题的。