Android的系统架构分为四层:应用,应用框架层,系统运行库,Linux kernal内核层
应用层使用 Java 语言编写运行在虚拟机上的程序。这些程序主要是UI方面的,还包含各种资源文件(res目录中),Java程序及其相关资源经过编译后,生成一个.apk包。
Google在Android中内置了一些必要的应用程序,如联系人,主屏幕(Home),日历,地图,浏览器,SMS短消息程序。 应用程序的开发者还可以使用应用程序框架层的API 实现自己的程序。这也是Android 开源的巨大潜力的体现。
Android的应用程序框架为应用程序层( 这一层是程序员开发自己程序(包括Google发布的应用) )的开发者提供API框架,它实际上是一个应用程序的框架。 我们在开发应用程序时都是通过框架与Android底层进行交互的。 可以简化程序开发的架构设计,但是必须遵守其框架的开发原则。
由于上层的应用程序是以JAVA构建的,因此本 层次提供的首先包含了UI程序中所需要的各种控件:
一个Andoid的应用程序可以利用应用程序框架中的以下几个部分:
Activity (活动)
Broadcast Intent Receiver (广播意图接收者)
Service (服务)
Content Provider (内容提供者)
本层次对应一般嵌入式系统,相当于中间件层次。Android的本层次分成两个部分一个是各种库,另一个是Android 运行环境。本层的内容 大多是使用C++实现的。当使用Application Framwork 层时,Android系统通过C/C++库支持我们使用的Application Framework内的各个组件。
C/C++库包括:
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有如下特征:
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提供大家的就是这个框架,所有的程序都必须遵守这个框架的原则,进行扩展。
在一般的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 :提供高层的程序模型、提供基本的运行环境
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平台独有的,且运行时时必须的。
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应用的能力。