Android 开发简介-系统架构


Android 的系统架构: 
Android的系统架构分为四层:应用,应用框架层,系统运行库,Linux kernal内核层

 Android 开发简介-系统架构_第1张图片

1.Android应用层 
应用层使用 Java 语言编写运行在虚拟机上的程序。这些程序主要是UI方面的,还包含各种资源文件(res目录中),Java程序及其相关资源经过编译后,生成一个.apk包。

Google在Android中内置了一些必要的应用程序,如联系人,主屏幕(Home),日历,地图,浏览器,SMS短消息程序。 应用程序的开发者还可以使用应用程序框架层的API 实现自己的程序。这也是Android 开源的巨大潜力的体现。

2.应用程序框架层 
Android的应用程序框架为应用程序层( 这一层是程序员开发自己程序(包括Google发布的应用) )的开发者提供API框架,它实际上是一个应用程序的框架。 我们在开发应用程序时都是通过框架与Android底层进行交互的。 可以简化程序开发的架构设计,但是必须遵守其框架的开发原则。

由于上层的应用程序是以JAVA构建的,因此本 层次提供的首先包含了UI程序中所需要的各种控件:

View 视图:可以用来构建应用程序,包括List, Grid, TextBox, Button 以及可嵌入的Web浏览器。 
Content Providers 内容提供器: 让一个应用程序访问另一个程序的数据,或共享自己的数据。 
Resource Manager资源管理器:提供非代码资源的访问,如本地字符串,图形和布局文件(Layout file). 
Nofitication Manager通知管理器: 应用可以在状态栏中显示自定义的提示信息。 
Activity Manager活动管理器:用来管理应用程序生命周期并提供常用的导航退回功能。 
Window Manager窗口管理器:管理所有的窗口程序。 
Package Manager包管理器:Android系统内的程序管理。 
一个Andoid的应用程序可以利用应用程序框架中的以下几个部分:

  Activity (活动)

  Broadcast Intent Receiver (广播意图接收者)

  Service (服务)

  Content Provider (内容提供者)

3. 系统运行库层(C/C++库和Android运行环境RunTime) 
本层次对应一般嵌入式系统,相当于中间件层次。Android的本层次分成两个部分一个是各种库,另一个是Android 运行环境。本层的内容 大多是使用C++实现的。当使用Application Framwork 层时,Android系统通过C/C++库支持我们使用的Application Framework内的各个组件。

C/C++库包括:

Bionic系统C库:这也是系统中一个最为底层的库,C库是通过Linux的系统调用来实现。 
MediaFramework多媒体库:Android系统的多媒体库的核心部分,基于PacketVideo(即PV)的 OpenCORE, 此库从功能上一共分为两大部分,一部分是音频,视频的回放(PlayBack),另一部分是音视频的记录(Recorder)。此库支持多种常见格式的音频,视频的回放和录制,以及图片,MPEG4, MP3, AAC, AMR, JPG, PNG等。 
SGL:2D图形引擎库 
SSL:即Secure Socket Layer位于TCP/IP协议与各种应用层协议之间,为数据通信提供安全支持。 
OpenGL ES 1.0:提供3D 的支持 
Surface Management界面管理工具:提供了对管理显示子系统等功能。

SQLite: 一个通用的嵌入式关系数据库。 
Webkit: web 网络浏览器引擎 
FreeType:位图(Bitmap)及矢量字体(Vector)的功能 
Android的各种库一般是以系统中间件形式提供的,它们均有的一个显著特点就是与移动设备的平台的应用密切相关。

 


 Android 运行环境主要指的虚拟机技术——Dalvik。Android中的所有Java程序都是运行在Dalvik VM上的。Android上的每个程序都有自己的线程,DVM只执行.dex的Dalvik executable 文件。每个Android应用在底层都对应有一个独立的DVM实例并在其解释下执行。

  

虽然DVM也是用Java编程语言,Dalvik虚拟机和一般JAVA虚拟机(Java VM)并不兼容,他们两个的区别是JVM标准执行的是.class的字节码(bytecode ),而是DVM执行的是其专有的(.dex)执行文件。在编译过程中,Java把类编译成一个或多个.class byte code 文件,然后打包到jar中,JVM会从中jar文件中获得相应的.class文件和JRE字节码。 Android VM虽然也是是用Java语言进行编程, Java程序通过编译后,还需要通过SDK中的dex工具转化成.dex格式,DVM再从其中读取指令和数据。

  

每一个应用程序即一个进程(Linux的一个Process)。 二者最大的区别在于Java VM是以基于栈的虚拟机(Stack-based),而Dalvik是基于寄存器的虚拟机(Register-based)。 显然,后者最大的好处在于可以根据硬件实现更大的优化,这更适合移动设备的特点。

 


DVM非常适合在移动终端上使用,与PC相比,它不需要很快的CPU和大量的内存空间. Google的测算显示,64MB的内存已经能让系统正常运转了。 其中24MB被用于底层系统的初始化和启动。另外20MB被用于启动高层服务。DVM有如下特征:

使用专有的.dex格式。 
原因是java类文件在编译过后,会产生至少一个.class文件包含大量陈余信息,dex文件格式会把所有的.class文件内容整合到一个.dex文件中。即减少了整体文件的尺寸和IO操作,也提高了类的查找速度。 
增加了对新的操作码的支持 
文件结构尽量简洁,使用等长的指令,借以提高解析速度。 
尽量扩大只读结构的大小,借以提高跨进程的数据共享。 
dex的优化,dex文件的结构是紧凑的,但是如果想提高运行时的性能,就需要对dex文件进行进一步的优化,这些优化针对以下几个方面: 
验证dex文件中的所有类 
对一些特定的类和方法里面的操作码进行优化 
调整所有的字节序(Little_endian)和对齐结构中的每一个域 
基于寄存器,基于寄存器的虚拟机虽然比基于堆栈的虚拟机在硬件,通用性上要差一些,但是它的代码执行效率去更好 
每一个Android应用都运行在它自己的DVM实例中,每一个DVM实例都是一个独立的进程空间。 所有的Android应用的线程都对应一个Linux线程,DVM因此可以更多地依赖操作系统的线程调度和管理机制。不同的应用在不同的进程空间里运行,不同的应用都是用不同的Linux用户来运行以最大程度地保户应用程序的安全性和独立性。 
4. Linux kernal 内核
Android使用Linux2.6内核作为操作系统,Linux2.6是一种标准的技术,Linux也是一个开放的操作系统。Android系统的安全性,内存管理,进程管理,网络协议栈和驱动模型等都依赖于该Linux2.6内核。该内核同时也作为硬件和软件栈之间的抽象层。

Android对操作系统的使用包括核心和驱动程序两部分 ,Android更多的是需要一些与移动设备相关的驱动程序。 主要的驱动如下所示:

  显示驱动(Display Driver):基于Linux的帧缓冲(Frame Buffer)驱动

  键盘驱动(KeyBoard Driver): 作为输入设备的键盘驱动

  Flash内存驱动(Flash Memory Driver): 基于MTD的Flash驱动程序

  照相机驱动(Camera Driver): 常用基于Linux的v4l2(Video for Linux)驱动。

  音频驱动(Audio Driver): 常用基于ALSA(Advanced Linux Sound Architecture),高级Linux声音体系)驱动

  蓝牙驱动(Bluetooth Driver): 基于IEEE 802.15.1标准的无线传输技术

  WiFi驱动(Camera Driver): 基于IEEE 802.11标准的驱动程序

  Binder IPC驱动: Android一个特殊的驱动程序,具有单独的设备节点,提供进程间通讯的功能

  Power Management(电源管理):比如电池电量等

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

Android提供大家的就是这个框架,所有的程序都必须遵守这个框架的原则,进行扩展。

在一般的JAVA应用中,如果需用引用基础类库,通常需要使用如下的方式:
import javax.swing.*;

以上代码表示了引用JAVA的GUI组件Swing,javax.swing即JAVA中的一个包。

Android提供一些扩展的JAVA类库,类库分为若干个包,每个包中包含若干个类。例如:在Android中计算器是一个相对简单的程序,其入口程序文件为Calculator.java,该文件包含了以下内容:
package com.android.calculator2;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.util.Config;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.content.res.Configuration;

在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元素(大部分是可见的)在应用程序的屏幕中使用 
OMS与OPhone介绍
OMS是Open Mobile System的简称。是面向移动互联网的开放型移动智能终端软件平台,包含基于Linux2.6内核的移动终端下层操作系统,上层应用软件,中间件,JVM, 硬件参考设计,以及基于 WebKit的各类应用。具有强大的兼容性,扩展性和安全性,以及简单易用,友好的人机界面和活跃的在线的生态环境。

 


Ophone是基于Linux的面向移动互联网的终端基础软件及系统解决方案。Ophone是指采用了OMS智能操作系统的手机。中国移动在Android操作系统上自主研发了OMS系统。所以Ophone和Android兼容,都是基于Java开发的,因此可以同时用OMS API 和 Android API 开发OMS应用. 基于Android API开发的应用可以在OMS终端上正确的运行。但是不能再Android上运行基于OMS API开发的程序,因为OMS API 是OMS平台独有的,且运行时时必须的。

Widget介绍
OMS除了支持Java应用,还支持Widget开发。 Widget开发是OMS的精华。Android在1.5版本后也支持Widget开发,但是与OMS的标准则不同。

 


Widget应用采用了JIL(Joint Innovation Lab) Widget标准,JIL Widget 是一个采用HTML, JavaScript, 和CSS等网络技术的应用程序,而Ophone应用是采用Java技术的应用程序。 Widget应用是在Widget引擎上运行的独立的应用程序,Widget提供了许多javascript API来扩展Widget应用的能力。

你可能感兴趣的:(Android 开发简介-系统架构)