Android的系统构架

 


下面将讨论Android的系统架构,我们先来看看Android的体系结构,如下图所示。

 

 

                                            1-6  Android系统结构图


从图1-6可以看出Android分为4层,从高到底分别是应用层、应用框架层、系统运行库层和Linux内核层。下面将对这4层进行简要的分析和介绍。
1
.应用层
应用是用Java语言编写的运行在虚拟机上的程序,如图1-6中最上层部分所示。其实,Google最开始时就在Android系统中捆绑了一些核心应用,比如E-mail客户端、SMS短消息程序、日历、地图、浏览器、联系人管理程序,等等。
2
.应用框架层
这一层是编写Google发布的核心应用时所使用的API框架,开发人员同样可以使用这些框架来开发自己的应用,这样便简化了程序开发的架构设计,但是必须遵守其框架的开发原则。
从图1-6中可以看出,Android提供了如下一些组件。
丰富而又可扩展的视图(View):可以用来构建应用程序,它包括列表(List)、网格(Grid)、文本框(Text Box)、按钮(Button),以及可嵌入的Web浏览器。
*
内容提供器(Content Providers):它可以让一个应用访问另一个应用的数据(如联系人数据库), 或共享它们自己的数据。
资源管理器(Resource Manager):提供非代码资源的访问,如本地字符串、图形和布局文件(Layout file)。
通知管理器 (Notification Manager):应用可以在状态栏中显示自定义的提示信息。
活动管理器(Activity Manager):用来管理应用程序生命周期并提供常用的导航退回功能。
窗口管理器(Window Manager):管理所有的窗口程序。
包管理器(Package Manager):Android系统内的程序管理。
后面的章节将进一步介绍这些组件的使用。


3
.系统运行库(C/C++库以及Android运行库)层
当使用Android 应用框架时,Android系统会通过一些C/C++库来支持我们使用的各个组件,使其能更好地为我们服务。
*  Bionic
系统 C 库:C语言标准库,系统最底层的库,C库通过Linux系统来调用。
多媒体库(MediaFramework):Android系统多媒体库,基于 PacketVideo OpenCORE,该库支持多种常见格式的音频、视频的回放和录制,以及图片,比如MPEG4MP3AACAMRJPGPNG等。
*  SGL
2D图形引擎库。
*  SSL
:位于TCP/IP协议与各种应用层协议之间,为数据通信提供支持。
*  OpenGL ES 1.0
3D效果的支持。
*  SQLite
:关系数据库。
*  Webkit
Web浏览器引擎。
*  FreeType
:位图(bitmap)及矢量(vector)。


每个Java程序都运行在Dalvik虚拟机之上。与PC一样,每个Android应用程序都有自己的进程,Dalvik虚拟机只执行.dex的可执行文件。当Java程序通过编译,最后还需要通过SDK中的dx工具转化成.dex格式才能正常在虚拟机上执行。


Google
2007年底正式发布了Android SDK, 作为 Android系统的重要特性,Dalvik虚拟机也第一次进入了人们的视野。它对内存的高效使用,以及在低速CPU上表现出的高性能,确实令人刮目相看。Android系统可以简单地完成进程隔离和线程管理。每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。


很多人认为Dalvik虚拟机是一个Java虚拟机,因为Android的编程语言恰恰就是Java语言。但是这种说法并不准确,因为Dalvik虚拟机并不是按照Java虚拟机的规范来实现的,两者并不兼容。它们有两个明显的不同:Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的则是其专有的文件格式为dexDalvik Executable)的文件。在Java SE程序中的Java类会被编译成一个或者多个字节码文件(.class)然后打包到jar文件,而后Java虚拟机会从相应的class文件和jar文件中获取相应的字节码;Android应用虽然也是使用Java语言进行编程,但是在编译成class文件后,还会通过一个工具(dx)将应用所有的class文件转换成一个dex文件,而后Dalvik虚拟机会从其中读取指令和数据。


Dalvik
虚拟机非常适合在移动终端上使用,相对于在桌面系统和服务器系统运行的虚拟机而言,它不需要很快的CPU计算速度和大量的内存空间。根据Google的测算,64MB的内存已经能够让系统正常运转了。其中24MB被用于底层系统的初始化和启动,另外20MB被用于启动高层服务。当然,随着系统服务的增多和应用功能的扩展,其所消耗的内存也势必越来越大。归纳起来,Dalvik虚拟机有如下几个主要特征:
1)专有的dex文件格式。dexDalvik虚拟机专用的文件格式,而为什么弃用已有的字节码文件(.class文件)而采用新的格式呢?原因如下:
每个应用中会定义很多类,编译完成后即会有很多相应的class文件,class文件中会有大量冗余信息,而dex文件格式会把所有的class文件内容整合到一个文件中。这样,除了减少整体的文件尺寸和I/O操作外,也提高了类的查找速度。
增加了对新的操作码的支持。
文件结构尽量简洁,使用等长的指令,借以提高解析速度。
尽量扩大只读结构的大小,借以提高跨进程的数据共享。
2dex的优化。dex文件的结构是紧凑的,但是如果还想运行时的性能有进一步提高,就需要对dex文件进一步优化。优化主要针对以下几个方面:
调整所有字段的字节序(LITTLE_ENDIAN)和对齐结构中的每一个域。
验证DEX文件中的所有类。
对一些特定的类和方法里的操作码进行优化。
3)基于寄存器。相对于基于堆栈实现的虚拟机,基于寄存器实现的虚拟机虽然在硬件、通用性上要差一些,但是它在代码的执行效率上却更胜一筹。
4)一个应用,一个虚拟机实例,一个进程。每一个Android应用都运行在一个Dalvik虚拟机实例中,而每一个虚拟机实例都是一个独立的进程空间。虚拟机的线程机制、内存分配和管理、Mutex等的实现都依赖底层操作系统。所有Android应用的线程都对应一个Linux线程,虚拟机因而可以更多地依赖操作系统的线程调度和管理机制。不同的应用在不同的进程空间里运行,对不同来源的应用都使用不同的Linux用户来运行,可以最大程度地保护应用的安全和独立运行。


4
Linux内核层
Android
的核心系统服务基于Linux 2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖于该内核。Linux内核同时也作为硬件和软件栈之间的抽象层。


Android
更多的是需要一些与移动设备相关的驱动程序,主要的驱动如下所示。
显示驱动(Display Driver):基于Linux的帧缓冲(Frame Buffer)驱动。
键盘驱动(KeyBoard Driver):作为输入设备的键盘驱动。
*  Flash
内存驱动(Flash Memory Driver):基于MTDFlash驱动程序。
照相机驱动(Camera Driver):常用的基于Linuxv4l2Video for Linux)驱动。
音频驱动(Audio Driver):常用的基于ALSAAdvanced Linux Sound Architecture)的高级Linux声音体系驱动。
蓝牙驱动(Bluetooth Driver):基于IEEE 802.15.1标准的无线传输技术。
*  WiFi
驱动:基于IEEE 802.11标准的驱动程序。
*  Binder IPC
驱动:Android的一个特殊的驱动程序,具有单独的设备节点,提供进程间通信的功能。
*  Power Management
(电源管理):比如电池电量等。


1.1.3  Android
应用程序框架
上一节我们对Android的系统构架进行了详细剖析,Android分为应用层、应用框架层、系统运行库层和Linux内核层。我们在开发应用时都是通过框架来与Android底层进行交互,接触最多的就是应用框架层了。


什么是应用程序框架呢?框架可以说是一个应用程序的核心,是所有参与开发的程序员共同使用和遵守的约定,大家在其约定上进行必要的扩展,但程序始终保持主体结构的一致性。其作用是让程序保持清晰和一目了然,在满足不同需求的同时又不互相影响。


Android
系统提供给应用开发者的本身就是一个框架,所有的应用开发都必须遵守这个框架的原则。我们在开发应用时就是在这个框架上进行扩展,下面来看看Android这个框架都有些什么功能可供我们使用。
*  android.app
:提供高层的程序模型和基本的运行环境。
*  android.content
:包含对各种设备上的数据进行访问和发布。
*  android.database
:通过内容提供者浏览和操作数据库。
*  android.graphics
:底层的图形库,包含画布、颜色过滤、点、矩形,可以将它们直接绘制到屏幕上。
*  android.location
:定位和相关服务的类。
*  android.media
:提供一些类管理多种音频、视频的媒体接口。
*  android.net
:提供帮助网络访问的类,超过通常的java.net.* 接口。
*  android.os
:提供了系统服务、消息传输和IPC机制。
*  android.opengl
:提供OpenGL的工具。
*  android.provider
:提供访问Android内容提供者的类。
*  android.telephony
:提供与拨打电话相关的API交互。
*  android.view
:提供基础的用户界面接口框架。
*  android.util
:涉及工具性的方法,例如时间日期的操作。
*  android.webkit
:默认浏览器操作接口。
*  android.widget
:包含各种UI元素(大部分是可见的)在应用程序的布局中使用。


1.2  OMS
介绍
OMS
Open Mobile System的简称,即面向移动互联网的开放型移动智能终端软件平台,它包括基于Linux 2.6内核的移动终端下层操作系统、上层应用软件、中间件、Java虚拟机、硬件参考设计以及基于WebKit的各类应用。它具有强大的兼容性、扩展性和安全性,以及简单易用、友好的人机界面等,而且具有完全自主的知识产权。在此之上,OMS拥有开放统一的API开发接口、完备的集成开发环境和活跃的在线生态环境,极大地方便了移动应用的开发。


OMS
的可移植性将使该软件平台在其他领域具有广泛的应用,如航空航天、军事、制造业等。


1.2.1  OPhone
介绍
OPhone
是基于Linux的面向移动互联网的终端基础软件及系统解决方案。由于OPhoneAndroid兼容,都是基于Java开发的,因此可以同时用OMS APIAndroid API来开发OMS应用。任何用Android API开发的应用都可以在OMS终端上正确地运行。然而,不能在Android终端上运行由扩展的OMS API开发的程序,因为这些OMS APIOMS平台独有的,而且在运行时是必需的。
OPhone
是指采用了OMS智能操作系统的手机。为了突破TD终端瓶颈,以及促进手机终端与中国移动的网络和应用服务进行无缝对接,中国移动在Android操作系统基础上自主开发了OMS系统,该系统直接内置了中国移动的服务菜单、音乐随身听、手机导航、号簿管家、139邮箱、飞信、快讯和移动梦网等特色业务,如图1-7所示。


1.2.2  Widget
介绍
OMS
除了支持基于Java的应用,还支持Widget应用开发。Widget应用是OMS的精华,而Android1.5版本开始同样支持Widget应用开发,但是所采用的标准则和OMS不同,我们会在后面的章节详细讲解。


Widget
应用采用了 JIL Joint Innovation LabWidget标准。JIL Widget是一个采用HTMLJavaScriptCSS等网络技术的应用程序。Widget应用是在Widget引擎上运行的独立的应用程序。Widget已经成为手机上非常流行的技术,可以为用户带来良好的移动互联网体验,随时随地获取有用的资讯,如天气预报、股票信息、头条新闻等。从用户的角度来看,Widget应用和OPhone应用没有什么区别。实际上,Widget应用不同于OPhone应用。OPhone应用是采用Java技术的应用程序,而Widget应用则是采用HTMLJavaScriptCSS等网络技术的应用程序。相比较而言,Widget应用的开发更加方便快捷。此外,JIL Widget还提供了许多JavaScript API来扩展Widget应用的能力,如访问手机电话本、手机文件系统等。Widget应用运行效果如图1-8所示。
               


      
 
                        
1-7  OPhone系统界面                                                  1-8  HelloWidget效果预览


      我们简单了解目前主流的7Linux平台手机以及中国移动的OMS操作系统。在介绍Android基本概念时重点介绍了Android系统架构和应用框架,其中应用层即是我们使用Java语言编写的一些运行在虚拟机上的程序,应用框架层是我们开发应用时接触最为紧密的一层,在开发应用程序时必须遵守其规则,才能保证所开发的应用程序能在Android上安全地运行。大家应着重理解这两层,这样才能开发出效率更高的应用程序。

 
        据称今年底将会有18款之多的以Android平台为系统的Linux手机上市, Android将在移动开发中具有更广阔的前景。要想成为一个优秀的Android手机开发者,还需要从基础做起,希望大家好好掌握本章的内容。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值