安卓手机APP开发__平台的架构
目录
概述
安卓软件栈
Linux内核
硬件抽象层(HAL)
安卓运行时
原生的C/C++代码库
Java API框架
系统APP
概述
安卓是一个开源的,基于Linux的软件栈,它创建一个设备和形式因素的很宽的矩阵。
下图展示了安卓平台的所有的主要的组件
安卓软件栈
Figure 1. The Android software stack.
Linux内核
安卓平台的基础是Linux内核。例如,安卓的运行时依赖于Linux内核的功能。
例如,线程和底层的内存管理。
使用Linux内核让安卓利用了关键的安全特性,让设备制造商针对一个知名的
Linux内核来开发硬件驱动。
硬件抽象层(HAL)
硬件抽象层(HAL)提供了标准的接口,来向高层的Java API框架提供硬件设备的功能。
硬件抽象层(HAL)由多个库的模块组成,每一个库模块都为一个特定的硬件组件类型
实现了一个接口,例如,照相机或者是蓝牙模块。当框架的API做了一个调用,来读取
硬件设备时,安卓系统加载了那个硬件组件的库模块。
安卓运行时
对于设备运行在安卓版本5.0 (API 级别 21)或者更高时,每一个APP运行在它自己的
进程中,在安卓的运行时中有自己的实例。安卓运行时是被写成在在很少的内存上运行
时多个虚拟机器,方法是执行Dalvik可执行格式的文件(DEX),这是一个字节码的格式
针对安卓进行了特殊的设计,对于很少的内存中运行进行了优化。构建工具是d8,它编译
Java源代码为DEX字节码,这个字节码能运行在安卓的平台上。
安卓运行时的一些主要的特性包括如下的内容:
预先编译和即时编译
优化过的垃圾回收
在安卓版本9以及更高,一个APP软件包的DEX的优化
有更紧揍的机器码的文件
更好的调试支持,包括一个专用的采样检查器,详细的诊断异常和崩溃报告,
为了监视特定的域的检查点的设置能力
在安卓5之前,Dalvik是安卓的运行时。如果你的APP在安卓运行时运行的很好,
那么它也能在Dalvik运行的好,但是相反可能是不行的。
安卓也包括了一些核心的运行时库,它提供了Java编程语言的绝大部分的功能,
包括了java8的特性,这也是Java API 框架所使用的。
原生的C/C++代码库
许多核心的安卓系统组件和服务,例如安卓运行时,和硬件抽象层都从原生的代码构建出来的,
需要由C和C++写的原生的代码库.安卓平台提供Java框架API来提供这些原生库中的功能给APP
例如,你能通过使用安卓框架的Java OpenGL API来读取OpenGL ES,进而支持在你的APP中
绘制和操纵2D和3D的图形.
如果你正在开发一个APP,需要有C或者是C++的代码,你能使用安卓的NDK来直接读取这些原生的
平台代码库中的一些功能.
Java API框架
通过使用Java编写的API,你能利用安卓操作系统的所有的特性集.这些API形成了你需要的
构建代码块,用来创建安卓的APP,通过简化核心代码的重用,模块化系统组件和服务,包括
如下的内容:
一个富于扩展的视图系统,你能用这个系统来构建一个APP的用户界面,包括列表,表格,文本框
按钮,甚至是一个内嵌的网络浏览器.
一个资源管理器,提供对非代码资源的读取,例如本地化的字符串,图形,和布局文件
一个通知管理器,它能在一个状态条中显示所有的APP的定制化的告警信息.
一个活动管理器,它管理APP的生存周期和提供一个常用的导航返回栈.
内容提供器,它允许一个APP从其它的APP那里读取数据,例如通讯录APP,
或者是共享它们自己的数据.
系统APP
安卓带来了一系列的核心的APP,例如,电子邮件,短消息,日历,网络浏览器,通讯录,等.
平台自带的APP与用户选择安装的APP之间没有特殊的状态.所以,第三方APP能成为用户的
默认的浏览器,短消息,甚至是默认的键盘.一些例外是有的,例如,系统设置APP.
系统APP功能都作为用户的APP,与开发者自己的APP一样提供关键的功能.例如,如果你
要你的APP发送短消息,你不需要自己构建这个功能.你能调用任何一个短消息的APP,来
发短消息到你指定的收件人.