Android系统从下至上分为4层:Linux内核、Android程序库及Android运行时、Android应用程序框架,以及应用程序等。

图1-1 Android系统框架

1. Linux内核(Linux Kernel)

Android的核心系统服务依赖于Linux 2.6,例如安全、内存管理、进程管理、网络堆栈、驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。(推荐阅读:Linux内核模块程序结构)

除了标准的Linux内核之外,Android系统还增加了内核的驱动程序,例如,显示驱动、蓝牙驱动、相机驱动、闪存卡驱动、Binder IPC驱动、输入设备驱动、USB驱动、Wi-Fi驱动、音频系统驱动、电源管理等,这些驱动程序为Android系统的运行提供基础性支持。

这样分层的好处是在使用下层提供的服务的同时也为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生了变化不会影响到上层。也就是说,各层各尽其职,各层提供固定的SAP(Service Access Point),即高内聚、低耦合。

2. Android程序库(Libraries)

Android包含一个C/C++库的集合,以供Android系统的各个组件使用。这些功能通过Android的应用程序框架(Application Framework)展现给开发者。下面列出一些核心库:

·系统C库——由BSD继承衍生的标准C系统函数库(libc),调整为基于嵌入式Linux设备的库。

·媒体库——基于PacketVideo的OpenCORE。这些库支持播放和录制多种常见的音频和视频格式,以及多种媒体的编码/解码格式,包括MPEG-4、 H.264、 MP3、 AAC、 AMR、JPG、 PNG。

·界面管理——显示子系统的管理器,管理访问显示子系统和无缝组合多个应用程序的二维和三维图形层。

·LibWebCore——新式的Web浏览器引擎,驱动Android 浏览器和可嵌入的Web视图。

·SGL——Skia图形库,基本的2D图形引擎。

·3D libraries——基于OpenGL ES 1.0 APIs的实现。该库使用硬件3D加速或使用高度优化的3D软加速。

·FreeType ——位图(bitmap)和矢量(vector)字体渲染。

·SQLite ——所有应用程序都可以使用的强大而轻量级的关系数据库引擎。

3. Android运行时(Android Runtime)

在Linux内核层上还有一个Android运行时层,该层包括Dalvik虚拟机及Java核心库,提供了Java编程语言核心库的大多数功能。

Dalvik虚拟机是Android使用的Java虚拟机。每一个Android应用程序都是Dalvik虚拟机中的实例,运行在它们自己的进程中。Dalvik虚拟机设计成在一个设备中可以高效地运行多个虚拟机。Dalvik虚拟机可执行文件格式是.dex,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。

大多数虚拟机包括JVM都是基于栈的,而Dalvik虚拟机则是基于寄存器的。两种架构各有优劣。一般而言,基于栈的机器需要更多指令,而基于寄存器的机器指令更大。dex 是一套工具,可以将 Java的.class格式转换成 .dex 格式。一个.dex文件通常会有多个.class。由于.dex有时必须进行佳化,会使文件大小增加1~4倍,以odex结尾。

Dalvik虚拟机依赖于Linux 内核提供基本功能,如线程和底层内存管理。

4. Android应用程序框架(Application Framework)

位于Android程序库和运行时上面的是应用程序框架层。通过提供开放的开发平台,Android使开发者能够访问核心应用程序所使用的API框架,这样使得组件的重用得以简化,任何应用程序都能发布它的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制),从而使开发者可以编制极其丰富和新颖的应用程序,自由地利用设备硬件优势访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等。

每个应用程序其实是一组服务和系统,包括如下内容。

·视图(View)——丰富的、可扩展的视图集合,用来构建应用程序。包括列表(Lists)、网格(grids)、文本框(Textboxs)、按钮(Buttons),甚至是可嵌入的网页浏览器。

·内容提供器(Content Providers)——使应用程序可以访问其他应用程序(如通讯录)的数据,或共享自己的数据。

·资源管理器(Resource Manager)——提供对于非代码资源的访问,如本地化字符串、图形和布局文件。

·消息管理器(Notification Manager)——使得应用程序能够在状态栏显示自定义的提示信息。

·活动管理器(Activity Manager)——管理应用程序生命周期,并提供常用的导航回退功能。

5. Android应用程序和小部件

Android装配一个核心应用程序集合,连同系统一起发布,这些应用程序包括电子邮件、客户端、SMS程序、日历、地图、浏览器、联系人和其他设置等。而所有应用程序都是用Java语言编写的,由用户开发的Android应用程序和Android核心应用程序是同一层次的。

热点链接:

android应用程序框架图,Android系统框架图详解相关推荐

  1. 必过SafetyNet!以MIUI开发版系统为例详解Android设备通过SafetyNet校验方法

    必过SafetyNet!以MIUI开发版系统为例详解Android设备通过SafetyNet校验方法 作者 梓沐啊_(KylinDemons) 版权声明 Copyright © 2021 KylinD ...

  2. ios 运行android应用程序,iOS与Android应用程序沙盒机制的研究与总结

    简介 复杂系统始终存在漏洞, 软件复杂性只会随着时间的推移而增加.无论您如何谨慎地采用安全编码实践并防范错误, 攻击者只需通过一次防御即可成功.虽然应用沙盒不能防止对你的应用的攻击, 但它确实最大限度 ...

  3. Android 系统(214)---Android 7.1.1时间更新NITZ和NTP详解

    Android 7.1.1时间更新NITZ和NTP详解 1.NTP和NITZ简介 最近在项目中遇到手机首次插上移动卡时不能自动更新时间的问题,就特意跟了下Android系统中手机时间更新有两种方式NT ...

  4. android怎么把动图变成视频格式,Android 录制手机屏幕视频生成GIF图片实例详解

    Android 录制手机屏幕视频生成GIF图片实例详解 无图无真相,在我们日常的网络交流中往往需要给交流对象提供直观的显示,而视频是一个很好的方式,但是视频需要播放器,还需要当做文件进行对点传输,并不 ...

  5. 关于android的4.2的0文件夹的详解

    关于android的4.2的0文件夹的详解 ---- android 4.0 ---- 在galaxy nexus(GN)手机上userdata分区很大,被挂在/data目录,用户的数据通常是放在sd ...

  6. android 4.2目录结构,关于android的4.2的0文件夹的详解(目录结构挂载分析)

    关于android的4.2的0文件夹的详解 ---- android 4.0 ---- 在galaxy nexus(GN)手机上userdata分区很大,被挂在/data目录,用户的数据通常是放在sd ...

  7. Android M新特性Doze and App Standby模式详解

    转载请标明出处:http://blog.csdn.net/xx326664162/article/details/52312122 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定的 ...

  8. 阿里聚安全Android应用漏洞扫描器解析:本地拒绝服务检测详解

    阿里聚安全Android应用漏洞扫描器解析:本地拒绝服务检测详解 阿里聚安全的Android应用漏洞扫描器有一个检测项是本地拒绝服务漏洞的检测,采用的是静态分析加动态模糊测试的方法来检测,检测结果准确 ...

  9. android启动页使用gif,android中使用react-native设置应用启动页过程详解

    一.背景 在我们使用react-native进行编写代码的时候,当启动应用的时候,我们会看到如下界面 然而,这样的启动界面是非常的不又好,那么我们该怎么进行处理启动界面呢?有如下两种方案 二.方案 1 ...

  10. Android绘图Canvas十八般武器之Shader详解及实战篇(上)

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 前言 Android中绘图离不开的就是Canvas了,Canvas是一个庞大的知识体系,有java层的,也有jni层深入到Frame ...

最新文章

  1. zabbix监控系统的安装与配置
  2. 独家揭秘!阿里大规模数据中心的性能分析
  3. Jquery中的hover()和toggle()用法
  4. CV之IG:基于CNN网络架构+ResNet网络进行DIY图像生成网络
  5. 谈谈分布式的场景及分布式事务的解决方案
  6. qtabwidget的图标_实战PyQt5: 050-选项卡控件QTabWidget
  7. 通过git和Xcode将代码上传到GitHub
  8. .NET Core容器化开发系列(一)——Docker里面跑个.NET Core
  9. Win8 Consumer Preview 8250 + VS11 体验
  10. 【转】Cache Buffer Chain 第二篇
  11. 百度深度学习初级工程师认证划水贴
  12. 1011. World Cup Betting (20)——PAT (Advanced Level) Practise
  13. php免杀教程【绝对原创】
  14. java围棋对弈实例
  15. opencv相似图片搜索
  16. 使用Layered分层窗口实现视频会议中的桌面区域共享
  17. XXL之整合SpringBoot
  18. Y7000联想拯救者gtx1050Ti安装cuda9.0
  19. Android MVVM框架搭建(十)Hilt、ViewBinding、Activity Result API
  20. 如何快速查询京东快递物流正在派送中的单号

热门文章

  1. 事件注册方法、阻止默认事件、事件对象、事件冒泡:事件委托、事件捕获、重置表单
  2. HackRF One 学习路线建议
  3. python scrapy的crapy.core.downloader.handlers.http11] WARNING: Received more bytes than download 错误
  4. Sql Server 2008 实现不同数据库-表实时同步 本地发布/订阅
  5. 软件工程概论第一次作业
  6. 提取docx中图片,文字,表格元素
  7. 多路全协议45W快充充电器,带12864监控屏
  8. STM32和C51的大端模式与小端模式
  9. Java 工程师成神之路
  10. Vue —— 注册、登录