.
备注:下方的*代表这章的重要性。
一、本章内容:
1.Android的发展与简介
Android并不是Google创造的,而是Android公司创造的,该公司的创始人是Andy Rubin。该公司后来被Google收购,而Andy Rubin也成为了Google公司的Android产品负责人。
Google于2007年11月5日发布了Android 1.0手机操作系统,但是并没有得到广泛的市场支持。
2009年5月.Gooole发布了Android 1.5 ,该版本的 Android提供了一个非常“豪华”的用户界面,而且提供了蓝牙连接支持。这个版本的Android吸引了大量开发者的目光。接下来,Android的版本更新得较快,前最新的 Android版本是9.0,这也是本书所介绍的 Android版本。
Android系统广泛应用于TV、手机、手表,以及各种可穿戴的设备。Android 9.0已经专门提供了TV、Wear等系统镜像。
什么是系统镜像?
系统镜像是驱动器的精确副本。 默认情况下,系统镜像包含系统运行所需的驱动器。它还包含系统和系统设置、程序及文件。
镜像文件是无法直接使用的,需要利用一些虚拟光驱工具进行解压后才能使用。虚拟光驱的原理跟物理光驱一样。
如果硬盘或计算机无法工作,则可以使用系统映像来还原计算机的内容。 从系统映像还原计算机时,将进行完整还原;不能选择个别项进行还原,当前的所有程序、系统设置和文件都将被系统映像中的相应内容替换。
所谓镜像文件其实和ZIP压缩包类似,它将特定的一系列文件按照一定的格式制作成单一的文件,以方便用户下载和使用,例如一个测试的操作系统、游戏等。
它最重要的特点是可以被特定的软件识别并可直接刻录到光盘上。其实通常意义上的镜像文件可以再扩展一下,在镜像文件中可以包含更多的信息。比如说系统文件、引导文件、分区表信息等,这样镜像文件就可以包含一个分区甚至是一块硬盘的所有信息。
2.Android 9.x平台架构及特性(**)
Android系统的底层建立在Linux系统之上,该平台由操作系统、中间件、用户界面和应用软件4层组成。它采用一种被称为软件叠层(Software Stack)的方式构建。这种软件叠层结构使得层与层之间相互分离,明确各层的分工。这种分工保证了层与层之间的低耦合,当下层的层内或层下发生改变时,上层应用程序无需任何改变。
如图所示:Android系统主要由6个部分组成,接下来进行详解。
2.1 系统 App 层
Android提供了一系列核心App(应用程序),包括电话拨号应用、电子邮件客户端、日历、相机、联系人等。这些应用程序通常都是用Java编写的。
普通开发者开发各种App都在这一层。本书也是基于此讲解的。
2.2 Java API 框架层
开发Android App就是面向Java API框架层进行开发。Android系统上的每个App都是平等的,都可以调用Android提供的Java API框架。Java API框架提供了大量的API供开发者使用。
Java API框架除了可以作为App开发的基础之外,也是软件复用的重要手段,任何一个应用程序都可以发布他的功能模块——只要发布时遵守了API框架的规范,其他App就都可以调用这个功能的模块。
2.3 原生 C/C++ 库
Android包含一套被不同组件所使用的C/C++库的集合。下面简单的列出一些原生C/C++库:
- WebKit:一个全新的Web浏览器引擎,也为WebView提供支持,WebView完全可以嵌入开发者的自己的程序当中。
- OpenMAX(开放媒体加速层):其目的在于使用统一的接口,加速处理大量多媒体资料,其中最上层为OpenMAX AL(App Layer),该层代表App和多媒体中间层的标准接口,使得App在多媒体接口上具有良好的可移植性。
- Libc(系统C库):一个从BSD系统派生的标准C系统库,并且专门为嵌入式Linux设备调整过。
- Media Framework(媒体框架):基于PacketVideo的OpenCORE,这套媒体库支持播放和录制许多流行的音频和视频格式,以及查看静态图片。主要包括MPEG4、H.264、MP3、AAC、JPG、PNG等多媒体格式。
- SGL:底层的2D图片引擎
- OpenGL ES :基于OpenGL ES API实现3D系统,这套3D库既可以使用硬件3D加速(如果系统支持的话),也可以使用高度优化的软件3D加速。
- SQLite:功能强大的轻量级关系数据库。
2.4 Android 运行时
Android运行时由两个部分组成:Android核心库和ART。其中核心库提供了Java语言核心库所使用的的绝大部分功能;而ART则负责运行Android应用程序。
背景:
早期Android运行时由Dalvik虚拟机和Android核心库集组成,但是Dalvik虚拟机采用了一种被称为JIT(Just-In-Time)的解释器进行动态编译且执行,因此导致Android App运行时比较慢。从Android 5.0开始,Android运行时改为使用ART,ART在用户安装App时进行预编译(Ahead-Of-Time,AOT),将原本在程序运行时的编译动作提前到了App安装时,这样使得程序在运行的时候可以减小动态编译的开销,从而提高的Android App的运行效率。
相对的,ART需要在App安装时进行AOT处理,因此ART需要占用更多的存储空间,应用安装和启动时间会延长不少。此外,ART还支持ARM、x86和MIPS架构,并且能完全兼容64位系统。
Android 6.0的重要更新是运行时权限,使得App能在安装之后动态地请求获取相关权限;Android 7.0的重要更新是多窗口模式。
2.5 硬件抽象层(HAL)
硬件抽象层主要提供了对Linux内核驱动的封装,这种分装可以向上提供驱动音频、蓝牙、摄像头、传感器等设备的编程接口,向下则可隐藏底层的实现细节。
简单的来说,Android系统把对硬件的支持分为了两层:内核驱动层和硬件抽象层。其中底层的内核驱动层处于Linux 内核中,内核驱动层只提供简单的硬件访问逻辑,这部分代码是完全开源的;而硬件抽象层则负责参数和访问流程控制,这层的封装代码并不开源,他只是向上提供统一的编程接口,而具体的实现往往属于各厂家。
2.6 Linux 内核
Android系统是基于Linux的(所以说Android本质上是一个Linux系统)。Linux 内核提供了安全性、内存管理、进程管理、网络协议和驱动模型等核心系统服务。除此之外,Linux内核也是系统硬件和软件叠层之间的抽象层。