天天看点

我对android 软件栈了解

android 软件栈如图所示:

  

我对android 软件栈了解

   android平台的核心是linux内核,它负责设备驱动程序、资源访问、电源管理和完成其他操作系统的职责。提供的设备驱动程序包括显示器、照相机,键盘、wifi、闪存、音频和ipc(inter:processconmnmication,进程间通信)(ipc binder机制)。尽管核心是linux,但android设备(比如motorola droid,乐os,cymode)上的绝大部分应用程序都是使用java开发,通过dalⅥk vm运行的。

  我们看一下另一层,内核之上是许多c/c++库,比如opengl、webkit、freetype、ssl(secure socketslayer,安全套接字层)、libc (c运行时库),sqlite和媒体。基于bsd (berkeley sofiware distribution,伯克利软件套件)的系统c库针对嵌入式linux设备进行了调优(大小约为原始大小的一半).媒体库基于packetvideo(www.packetvideo.com/)的opencore。这些库负责录制和播放音频和视频格式的内容。一个名为surface managertyj库控制对显示系统的访问,支持2d和3d。在新版本中可能添加更多这样的本地库。

  webkit库负责浏览器支持.webkit也是google公司的chrome和苹果公司的safari使用的库。

freetype库负责字体支持。sqlite (www.sqlite.org/)是一个可在设备自身上使用的关系数据库。sqlite也是关系数据库的一项独立的开源成果,没有直接绑定到android。适用于sqlite的工具也可用于android教据库。

大多数应用程序框架都通过dalvik vm访问这些核心库,dalvik vm就像android平台的入口。上节已经提到,dalvik经过了优化,可以运行多个vm实例。访问这些核心库时,每个java应用程序都会获得自己的vm实例。

android java apl的主要库包括电话、资源,位置、ul、contentprovider(数据)和包管理器(安装、安全等)。程序员使用此java api开发最终用户应用程序。设备上的一些最终用户应用程序示例包括home、contacts、phone、browser等。

android还支持google公司一个名为skia的自定义2d图形库,这个库是使用c和c++编写的。skia也是google chrome溯览器的核心组件。然而,android中的3d api基于来自khronos小组(www.khronos.org)的一个opengl es实现。opengl es包含opengl中面向嵌入式系统的子集。

从媒体角度讲,android平台支持最常见的音频,视频和图像格式。也是支持多媒体最多的移动平台。从无线角度讲.android的api可支持蓝牙,edge、3g、wifiaigsm (global system for mobile communication.全球移动通信系统)、电话而具体则取决于设备硬件。