目录

一、Linux Kernel

1、什么是Linux内核

2、作用

二、HAL层

三、系统运行库层

1、Native Libraries

2、运行时库

四、Framework层

Android的四大组件

五、APP层


根据基础的Android架构图,从下往上依次为:Linux内核、HAL层、Native Libraries、Runtime、Framework层、APP层。

每一层都包含大量的子模块或子系统,并提供固定的服务访问点SAP(service access point),具有高内聚、低耦合的特点。

一、Linux Kernel

Android操作系统以Linux内核为基石,组成底层内核空间。

1、什么是Linux内核

  • 技术层面:内核是硬件和软件之间的一个中间层,将应用层的请求传递硬件,充当底层驱动程序,对系统中的各种设备和组件进行寻址
  • 应用程序层面:应用程序只与内核有关,而内核就是应用程序知道的层次中的最底层

内核是资源管理程序,负责将可用的共享资源(CPU、磁盘空间等)分配给各系统进程。同时内核像一个库,提供了一组面向系统的命令。

例如:整个软件是通过系统调用(Syscall)连通系统的内核空间和用户空间。而用户空间就是接下来要说的,由HAL层、Native Libraries、Runtime、Framework层、application层组成。

内核的作用简单说,就是提供了进程管理、文件网络管理、系统安全权限管理、以及系统与硬件设备通讯基础。

2、作用

Linux内核层为Android设备的各种硬件提供底层驱动:显示驱动、音频驱动、电源管理、Flash内存驱动、进程管理、系统安全、camera驱动、蓝牙驱动、Binder IPC驱动(进程间通讯驱动)等。

二、HAL层

HAL(Hardware Abstraction Lay,硬件抽象层),是对底层驱动(即Linux内核层)进行了一层封装,向Framework层提供调用驱动的通用接口,HAL层开发者只需要按照HAL规范,实现相应接口,并以共享库的形式放在特定目录下,那上层开发者只需要加在这个共享库并找到对应模块的对应指针,即可操作底层硬件。这一层出现的目的是维护开发者利益(实现开放不开源)。

简单来说,就是将控制硬件的动作放在了HAL层。

例如:CameraHardwareInterface(camera_device_name)是Android的通用接口,通过它适配向CameraService提供硬件操作接口。

三、系统运行库层

系统运行库层是由程序库运行时库组成。

1、Native Libraries

Android Native Libraries(程序库),是相对于Java层(即Framework层)的底层,用C/C++语言实现,提供一些本地服务和链接库。通过这一层去实现一些复杂运算,并通过JNI和Java层通讯;或是通过Native层去运行底层驱动进而操作设备。

其支持整个系统正常运行的基础库,具备9个子系统:

序号 子系统 描述
1 系统C库 从BSD(伯克利软件套件,Unix衍生系统)继承来的标准C系统函数库,专门为基于嵌入式Linux设备制定
2 Media Manager 媒体管理,支持多种音频、视频格式的播放和录制,以及静态图像文件,包括MP3、AAC、JPG、PNG等
3 Surface Manager 图层管理,执行多个程序时,负责管理显示与存取操作间的互动;同时负责2D与3D绘图进行显示合成
4 LibWebCore Web浏览器引擎,驱动Android浏览器和内嵌的文本视图
5 SGL 底层2D图形渲染引擎库
6 QpenGL|ES 3D绘图函数库,即OpenGL|ESate开放图形库用来支持3D效果
7 FreeType 位图和矢量字体渲染,提供点阵字与向量字的描绘与显示
8 SQLite 小型关系型数据库引擎
9 SSL 安全套接层,是为网络通信提供安全及数据完整性的一种安全协议

2、运行时库

在Android 5.0+系统中,运行时库又分为核心库(Core Libraries)ART虚拟机(Android Runtime)

核心库主要用于提供大部分Java语言基础功能,例如:基础数据结构、I/O、工具、数据库、网络等库。Java部分最终会打包成core.jar包,当桌面启动时首先加载,作为Java程序的一个基础包。

核心库主要实现了三种Java基础包:

  • Java标准API(Java包):核心包,所有程序都会使用这些包中的类,例如:java.lang(基础类)、java.util(日期时间、国际化等工具类)、java.net(网络应用开发类)等
  • Java扩展API(Javax包):扩展包,对Java包的优化和扩展
  • 企业和组织提供的Java类库(org包):组织具有影响力,代码质量高

ART虚拟机,是Google在Linux内核之上构建了一个虚拟机,Android应用使用java开发,运行在虚拟机之上。

Dalvik就是Android4.4及之前使用的虚拟机,它使用的是JIT(Just-In-Time)技术来进行代码转译,每次执行应用的时候,Dalvik将程序的代码编译为机器语言执行。

随着硬件水平的提升,ART虚拟机采用AOT(Ahead-Of-Time)技术,会在应用程序安装时就转换成机器语言,不再在执行时解释,从而优化了应用运行的速度。在内存管理方面,ART也有比较大的改进,对内存分配和回收都做了算法优化,降低了内存碎片化程度,回收时间也得以缩短。

详见:https://www.jianshu.com/p/1f779586efdc

四、Framework层

Framework层(Java API Framework,应用程序架构层),用Java语言编写。

基于Android核心库实现的FW层的Android包,主要负责为APP开发人员提供开发所需的API接口。除API外,还包括资源包,内含图片、多国语言字符串、布局文件等。而Android包的具体实现会通过JNI调用程序库(Native Libraries)代码。

API(Application Programming Interface,应用程序编程接口)

API是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又不需要访问源码,或理解内部工作机制的细节。

API是用于构建应用程序软件的一组子程序定义、协议和工具,是一套明确定义的各种软件组件之间的通信方法。

接口:不同组件进行交互的地方

协议:一系列规定组件之间的交互规则

格式:定义交流方式(json、xml)

端点:可以在同一个接口里提供不同的特定功能

同时确认操作的合法性,反馈异常信息,并进行分页、过滤,节省带宽和服务器资源,增加访问权限,充当防火墙等。

其提供主要组件和服务为:

序号 组件/服务 描述
1 Activity Manager Service 活动管理,管理所有应用的Activity,包括创建、销毁、优先级调整,保证不同程序间合理调度
2 Window Manager Service 窗口管理,控制窗口的显示、隐藏、层序,动画处理,Display管理(多屏显示),input分发、处理
3 Content Providers 内容提供者,使应用能访问其他应用程序(如通讯录)的数据,或共享自己的数据
4 View System 视图系统,丰富的可扩展的视图集合,用来构建UI应用程序。包括列表、网格、文本框、按钮等
5 Notification Manager 通知管理,使所有应用程序能够在状态栏显示自定义提醒
6 Package Manager 包管理,负责包的管理,应用程序的安装、卸载、信息查询等
7 Telephony Manager 电话管理,提供一系列用于访问与手机通讯相关的状态和信息的方法,如SIM卡
8 Resource Manager 资源管理,提供访问非代码资源,如本地化字符串、图形和布局文件
9 Location Manager 位置管理,提供设备的GPS获取方式
10 XMPP Services XMPP服务,以XML为基础的开放式实时通信协议,可扩展通讯和标识协议

Android的四大组件

Activity、Service、Content Provider、Broadcast receiver

  • Activity:与用户交互的入口,一个activity通常是一个窗口,每个activity都独立于其他activity而存在。对用户来说,activity就是一个Android应用的全部,这是因为其他组件对于用户来说都是不可感知的。(例如,电子邮件应用可能有一个显示新电子邮件列表的 Activity、一个用于撰写电子邮件的 Activity 以及一个用于阅读电子邮件的 Activity。尽管这些 Activity 通过协作在电子邮件应用中形成一种紧密结合的用户体验,但每个 Activity 都独立于其他 Activity 而存在。因此,其他应用可以启动其中任何一个 Activity(如果电子邮件应用允许)。例如,相机应用可以启动电子邮件应用内用于撰写新电子邮件的 Activity,以便用户共享图片。)同时有助于实现一些系统与应用程序间的重要交互。
  • Service:用于在后台完成用户指定的操作。是一个在后台运行的组件,用于执行长时间运作的操作,或为远程进程执行作业。service分为两种状态:started(启动)、bound(绑定)。例如,当用户使用其他应用时,服务可能会在后台播放音乐或通过网络获取数据,但这不会阻断用户与 Activity 的交互。

        started:

        ① 音乐播放是用户可直接感知的服务,因此,应用会向用户发送通知,表明其希望成为前台,从而告诉系统此消息;在此情况下,系统明白它应尽全力维持该服务进程运行,因为进程消失会令用户感到不快。

        ② 通常,用户不会意识到常规后台服务正处于运行状态,因此系统可以更自由地管理其进程。如果系统需要使用 RAM 来处理用户更迫切关注的内容,则其可能允许终止服务(然后在稍后的某个时刻重启服务)。

        bound:

        如果进程 A 绑定到进程 B 中的服务,系统便知道自己需使进程 B(及其服务)为进程 A 保持运行状态。此外,如果进程 A 是用户关心的内容,系统随即也知道将进程 B 视为用户关心的内容。动态壁纸、通知侦听器、屏幕保护程序、输入方法、无障碍功能服务以及众多其他核心系统功能,均可构建为在其运行时由应用实现、系统绑定的服务。

  • Content Provider:内容提供者,数据共享型组件,用于向其他组件或是APP共享数据。可以将这些数据存储在文件系统、SQLite 数据库、网络中,或者您的应用可访问的任何其他持久化存储位置。其他应用可通过content provider查询或修改数据(如果content provider允许)。
  • Broadcast receiver:广播接收者,借助broadcast receiver,系统能够在常规用户流之外向应用传递事件,从而允许应用响应系统范围内的广播通知。常见用于在不同的组件或不同的应用之间进行消息传递,旨在执行极少量的工作。许多广播均由系统发起,例如,通知屏幕已关闭、电池电量不足或已拍摄照片的广播。应用也可发起广播,例如,通知其他应用某些数据已下载至设备,并且可供其使用。尽管broadcast receiver不会显示界面,但其可以创建状态栏通知,在发生广播事件时提醒用户。

详见:https://blog.csdn.net/superzhang6666/article/details/126308499?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-126308499-blog-50524704.pc_relevant_3mothn_strategy_and_data_recovery&spm=1001.2101.3001.4242.2&utm_relevant_index=4

五、APP层

APP层(Application层,应用层),通过Java语言编写。Android自带一套用于Email、短信、日历、互联网浏览器等的核心应用,即系统应用程序,为用户提供生活中的常用应用程序,又为开发人员提供了可直接调用系统应用的关键能力,例如:APP发送短信(SMS消息),直接调用系统提供的API做相关操作。

简述Android操作系统相关推荐

  1. android操作系统优势,Android操作系统平台最大的优势

    Android操作系统平台最大的优势 2015-12-25 17:10:27 1074浏览 如今移动互联网势不可挡,移动软件应用市场就像是一个巨大的金矿.发展潜力巨大,而Android开发软件平台无疑 ...

  2. 浅谈新一代Android操作系统Android L

    今天早一些的时候,Google发布了新一代Android操作系统Android L.让我非常意外的是命名规则的变化,之前外界纷纷猜测会叫Android5.0,同时会给一个甜品的名字命名.因为Andro ...

  3. Android资源分离,可分离Android操作系统报告:硬件环境检测文件(十)(分析)...

    可分离Android操作系统报告:硬件环境检测文件(十)(分析) (2018-04-18 12:23:58) 标签: it 0x38000-终  1F E0 8E 05 60 29 1C ED A8 ...

  4. Android操作系统手机遇冷 国外辉煌国内难现

    美国市场研究公司NPD近日发布的统计数据显示,今年第一季度期间,Android手机在美国市场的销量已超过iPhone,占据该季度美国智能手 机总销量的28%,iPhone相应份额为21%,北京时间5月 ...

  5. android源码中的ndk,如何在不需要Android操作系统源代码的情况下在Android NDK中创建新的NativeWindow?...

    我想编译一个Android OpenGL控制台应用程序,您可以直接从控制台启动Android x86或从Android x86 GUI中的Android终端应用程序运行.如何在不需要Android操作 ...

  6. Android* 操作系统上的应用程序远程调试

    作者:robert-mueller Android* 操作系统应用程序远程调试 Android* Debug Bridge Android Debug Bridge (ADB) 是一种命令行工具,可处 ...

  7. 使用手机模拟器与android操作系统

    创建手机模拟器: 1. 点击Eclipse中新增的按钮,打开"Android Virtual Device Manager"(不同版本的ADT可能打开路径不同),如下图: 2. 点 ...

  8. Android操作系统版本

    Android操作系统版本 Android1.1(发布于2009年2月) 主要特性: 闹钟 API示例 浏览器 计算器 摄像头 联系人 开发工具包 拨号应用 电子邮件 地图(包含街景) 信息服务 音乐 ...

  9. 简述Android操作系统和IOS系统的区别;

    软件测试面试题中: 简述Android操作系统和IOS系统的区别: 1.两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制. 2.两者后台制度不同:IOS中任何第三方程序都不能在 ...

最新文章

  1. Dataset之MNIST:MNIST(手写数字图片识别+ubyte.gz文件)数据集的下载(基于python语言根据爬虫技术自动下载MNIST数据集)
  2. 【⭐】Java—Spring-—数据库操作—使用内置连接池,报读取不到驱动错误。Could not load JDBC driver class。...
  3. 云计算与SaaS的关系 :新计算时代将来临
  4. Myeclipse项目加入maven支持
  5. 心情随笔(六):金秋十月备考之路亦别有一番风味
  6. 3个人的java 实验_20165104-JAVA第三次实验
  7. 酷Q移植先驱的记录流程,QQ机器人框架插件
  8. 通过“”斐波那契数列“”学习函数递归
  9. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_14_匿名内部类方式实现线程的创建...
  10. VSS2005的安装与配置
  11. 推荐:详解AI加速器(最终篇)
  12. XF660R型号良田高拍仪接口开发,通过图片文件的二进制数据进行图片上传
  13. 微信支付详细教程实战
  14. 关于js中获取div中的数据
  15. 测试 软通动力软件测试机试_软通动力软件测试笔试题 (转)
  16. 菜谱点菜c语言编程,菜单点菜并计算价格 C++改成C 运行成功100分
  17. 武田呈报的ALK+ NSCLC长期数据显示,ALUNBRIG(R) (brigatinib)在2年随访期之后继续展示一线治疗中的优效性
  18. 利用Tensorflow构建RNN实现垃圾邮件分类
  19. 输入一元二次方程的三个系数求方程的实根(顺序结构)
  20. linux如何从回收站恢复文件在哪里找,回收站文件恢复软件到哪找

热门文章

  1. Jvav 调用 Conflux 智能合约
  2. 利用计算机设计比率分析模型,企业实用比率分析模型的设计.doc
  3. 智能红绿灯是如何识别车牌的_百度文字识别
  4. docker flannel网络部署和路由走向分析
  5. Vue2系列教程——将js ES6兼容IE浏览器
  6. 程序设计基础(c语言)实验与习题指导实验题答案杨永斌 丁明勇,程序设计基础(c语言)实验与习题指导实验题答案杨永斌 丁明勇...
  7. 30年初心坚守 神州信息用数字技术实现普惠金融
  8. 多元线性回归案例:《银行不良贷款分析》
  9. 机器学习__01__机器学习概述
  10. 微信开通批量检测软件的常见问题解答(入手必备)