▶1.Android系统概述

Andaid(读[安卓)由Coosle公司和开放手机联盟共同开发,它是基于Lmx内核的开源操作系统。Andtoid主要用于移动设备,如智能手机和平板计算机。2008年发布了第一部Andtoid智能手机,以后Android逐渐扩展到平板计算机、电视、数码相机、游戏机等领域。2016年全球智能手机总销量为14.7亿台,Android平台手机全球市场份额达到了73%

▶2.Android系统结构

Android系统采用分层结构,系统分为四层,分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。

1)应用程序层

应用程序层由运行在Android设备上的所有应用(App)共同构成,它不仅包括通话、短信、联系人等系统应用(随Android系统一起预装在移动设备中),还包括其他后续安装到设备中的第三方应用程序,如浏览器、微信、导航地图等。

Android应用程序都采用Java语言开发。但一些应用(如游戏)中,需要进行大规模运算和图形处理,以及使用开源C/C++类库。如果通过Java实现,可能会有执行效率过低和移植成本过高等问题。因此在Android开发中,开发者可以使用C/C++来实现底层模块,并通过JNI(Java Native Interface)接口与上层Java实现交互,然后利用Android提供的交叉编译工具生成类库并添加到应用程序中。但是,开发者只能使用C/C++编写功能类库,而不是整个应用程序。因为Android的界面显示、进程调度等核心机制都是通过Java来实现,应用程序只有按规定模式编写Java模块和配置信息,才能够被识别和执行。

2)应用程序框架层

Android应用程序框架包括:活动用于前台运行的进程(功能服务);服务指后台运行的进程,不提供用户界面;广播接收器用于接收广播信息;内容提供器支持在多个应用中存储和读取数据,相当于数据库。应用程序框架的功能是简化程序组件的调用,任何应用程序都可以调用这些功能模块,这种程序重用机制使用户可以方便地替换程序组件。
(1)活动管理器(Activity)。在Android中,活动通常是一个手机屏幕,它可以不显示一些控件(如按钮、对话框等),也可以监听和处理用户事件。一个Android应用由多个活动组成。多个活动之间可以相互跳转,例如,按下一个按钮后,可能会跳转到其他的活动。当打开一个新屏幕时,之前的屏幕会设置为暂停状态,并且压入历史堆栈中。用户可以通过回退操作返回到以前打开屏幕。
(2)服务管理器(Service)只能在后台运行,但是可以和其他组件进行交互。服务也是一种进程,它可以长时间运行,但是没有用户界面。例如,用户运行音乐播放器时,如果这时打开浏览器上网,虽然已经启动了浏览器程序,但是音乐播放并没有停止,而是在后台继续播放。这个播放进程由播放音乐的服务进行控制。
(3)广播接收器(Broadcast Receiver)是应用程序之间传输消息的机制。例如,当电话呼入这个外部事件到来时,可用广播进行处理;下载文件完成时,也可以利用广播进行处理。广播并不生成用户界面,它通过通知管理子系统告诉用户有些事情发生了。
(4)内容提供器(Content Provider)的作用是对外共享数据。在Android中,对数据的保护很严密,除了存放在SD卡中的数据,一个应用程序所具有的数据、文件等内容,都不允许其他应用程序直接访问。

3)系统运行库层

系统运行库是操作系统与应用程序沟通的桥梁,它分为两层;库函数层(Library)和Dalvik虚拟机。Android包含了一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过Android应用程序框架为开发者提供服务。
(1)Surface用于显示子系统管理,为应用程序提供2D/3D图形显示到物理设备。

(2)Media是基础多媒体库,它支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG-4、H.264、MP3、JPG等。
(3)SQLite是轻量级嵌入式数据库,数据库又分为共用数据库和私用数据库。
(4)OpenGL/ES是3D图形的专业图形函数库。

(5)FreeType是字体引擎,它提供点阵字体和矢量字体的渲染。

(6)Webkit是Web浏览器引擎,支持Android浏览器和一个可嵌入的Web视图。

(7)SGL是底层2D图形函数库,它包含字形、坐标、点阵图等函数处理功能。

(8)SSL(安全套接层)提供安全通信和数据完整性检测。

(9)Libe是从BSD继承的标准C函数库,它是专门为嵌入式Linux设备定制的。

(10)Android运行时机制。和所有Java程序运行平台一样,为了实现Java程序在运行阶段的二次编译,Android为它们提供了运行时(Runtime)机制。Android运行时机制由Java核心类库和Java虚拟机(Dalvik)共同构成。Java核心类库涵盖了Android应用程序框架层和应用程序层所要用到的基础Java库,包括Java对象库、文件管理库、网络通信库等。

Dalvik是为Android量身打造的Java虚拟机,它负责执行应用程序,分配存储空间,管理进程生命周期等工作。Dalvik没有采用基于栈的虚拟机结构,而采用了基于寄存器的虚拟机结构。一般来说,基于栈的虚拟机对硬件依赖程度小,生成的代码更节约空间,可以适配更多的低端设备;而基于寄存器的虚拟机对硬件要求更高,编译出的代码可能会耗费稍多的存储空间,但它的执行效率更高,更能够发挥高端硬件(主要是CPU)的能力。
Dalvik没有沿用Java二进制字节码(JavaBytecode)作为编译的中间文件,而是采用了新的二进制码文件.dex。在Android应用程序编译过程中,编译程序会先生成若干个.class文件,然后统一转换成.dex文件。在转换过程中,Android会对部分.class文件中的指令做转义,使用Dalvik指令集(OpCodes)来替换原指令,以提高执行效率。同时,dex会整合多个.class文件中的重复信息,并对冗余部分做全局优化和调整,合并重复的常量定义,以节约常量存储空间。这使得.dex文件通常会比.class文件更精简。

4)Linux内核层

Android系统搭建在Linux内核之上,Android的Linux内核包括安全管理、存储器管理、程序管理、网络堆栈、驱动程序模型等。从运行角度看,它们只是运行在Linux系统上的一些进程,并不是一个完整的Linux系统。
硬件抽象层(HAL)不是一个独立层,它是Android为厂商定义的一套接口标准,Android并没有定义一个单独的硬件抽象层(HAL),Android的硬件抽象层是以封闭源码形式提供的硬件驱动模块。HAL的目的是将Android框架与Linux内核隔离开,使Android不至过度依赖Linux内核,以达成让Android框架的开发能在不考虑驱动程序的前提下进行。

▶3.Android应用程序安装包APK

Android应用程序通过Android SDK编译器,将程序编译后打包成一个apk文件。文件后缀名为apk的文件是安卓应用程序安装包,它采用zip格式,并非Java字节码文件。可以将apk文件下载到Android手机中,执行apk文件即可进行应用程序安装。
在Android文件系统中,有几个非常重要的文件夹,一是存放系统文件的/system文件夹;二是存放配置文件的/dev文件夹;三是SD卡中存放程序和数据的/sdcard文件夹。

▶4.Android资源消耗

Android系统看起来很耗内存,因为Android上的程序采用Java语言开发,而Android上的每个应用(App)都带有独立虚拟机,每打开一个应用就会运行一个独立的虚拟机。这样设计是为了避免虚拟机崩溃而导致整个系统崩溃,但代价是需要更多的内存(以空间换时间)。这些设计确保了Android的稳定性,正常情况下最多单个应用崩溃,但整个系统不会崩溃,也永远不会出现内存不足的提示,这种设计非常适合移动终端的需要。

01-27 09:53