Android
是一个基于Linux
内核的、开源的软件栈,为各种类型的设备而创建。
下图给出了Android
平台的大致组成结构:
Linux 内核
Android
平台的基石就是Linux
内核。比如,Android
运行时(ART
)的一些基本功能如线程管理、低内存管理都依赖于Linux
内核。
Android
利用Linux
内核提供的关键安全特性,允许设备制造商为一个著名的内核开发硬件驱动。
硬件抽象层(HAL)
硬件抽象层提供标准接口,并暴露设备的硬件功能给高一级的Java API
框架。硬件抽象层由多个库模块组成,每一个都为特定类型的硬件组件实现了一个接口,比如相机或者蓝牙模块。当框架层的api
调用设备硬件时,Android
系统会加载那个硬件组件的库模块。
Android运行时
运行着Android5.0
及以上的设备,每一个应用运行在它自己的进程中,拥有它自己的运行时实例。运行时是为了在低内存设备上通过执行DEX
文件运行多个虚拟机。DEX
文件是为Android
特殊设计的一种字节代码格式,为最小内存占用进行了优化。构建工具链如Jack
,将Java
文件编译为DEX
字节代码,可以在Android
平台运行。
ART
的主要特性如下:
-
AOT
和JIT
编译 - 优化垃圾回收
- 支持更好地调试,包括一个专门的采样分析器、详细的异常诊断和崩溃报告,而且可以设置断点监视指定域
在Android5.0
之前,Android
运行时是Dalvik
。如果你的应用可以在ART
上运行良好,那么在Dalvik
上也会很好的运行,反过来则不一定。
Android
也包括一些核心的运行时库,提供了Java API
框架层使用的Java
语言编程的大部分功能,包括Java8
的特性。
原生C/C++库
很多核心的Android
系统组件和服务,如ART
和HAL
,都是用原生代码编写的,要求用C
和C++
编写原生库。Android
平台提供了Java
框架的API
,可以为应用提供这些原生库中的一些功能。比如,你可以通过Android
框架的Java OpenGL API
调用OpenGL ES
在你的应用中添加对2D
和3D
图形的绘画操作的支持。
Java API 框架
通过使用Java
语言编写的API
,你可以使用Android
系统所有的特性。这些API
构成了你创建Android
应用所需的基础,简化了核心模块化的系统组件和服务的复用,包括如下:
- 丰富的、可扩展的
View
系统,你可以用来创建应用的UI
,包括list、grid、text boxes、buttons
,甚至是嵌入的web
浏览器。 - 资源管理器,提供了对非代码资源的调用,如,本地化字符串,图像资源以及布局文件等
- 通知管理器,使所有的应用都可以在状态栏显示定制的
alerts
-
Activity
管理器,管理应用的声明周期,并提供一个公共导航回退栈 -
Content Provide
,使应用获取其他应用的数据,如联系人,或者分享他们自己的数据
开发者和系统应用拥有完全一样的框架API
系统应用
Android
自带一些核心应用,如邮件、信息、日历、网络浏览器和联系人等。平台提供的应用和用户选择安装的应用有相同的状态。因此,一个安装的第三方应用可以作为用户默认的浏览器、默认信息程序以及默认输入法。
系统应用程序既可以作为用户的应用程序,也可以提供开发人员从自己的应用程序访问的关键功能。比如,如果你的应用想发送一条短信,你不必自己编写这个功能而是调用任何一个已经安装的SMS
应用给你指定的收件人发送短信
网友评论