zoukankan      html  css  js  c++  java
  • Android 笔记之 Android 系统架构

    Android笔记之Android系统架构

    一、Android 系统架构

    Android 系统架构分为四层:Linux 内核层、系统库层、应用框架层、应用层


    图1 Android 系统架构图(图片来源于网络)

    1. Linux 内核层(Linux Kernel)

    • 这一层提供的功能有:安全性、内存管理、进程管理、网络协议栈、驱动程序模型等

    2. 系统库层(Libraries)

    • 这一层包括两方面的内容: C/C++ 语言编写的程序库、Android 运行时
    • C/C++ 语言编写的程序库
      • SQLite : 提供数据库支持
      • OpenGL|ES : (Open Graphic Libraries for Embedded Systems)提供 3D 绘图支持
      • Free Type : 字体渲染引擎
      • Webkit : 提供浏览器内核支持
      • SGL : (Skia Graphics Library)2D 图形渲染引擎,Skia 是美国的一家公司,后来被 Google 收购
      • SSL : (Secure Sockets Layer 安全套接层)是一种安全协议,为互联网通信,提供安全及数据完整性保障
      • libc : (Bionic libc)C标准库,由 Google 开发,采用 BSD 授权条款,应用于嵌入式系统上
    • Android 运行时
      • 核心库 : 包括 Java API 和 Android API
      • Dalvik 虚拟机 : 在有限的内存中,允许每一个 Android 的应用程序都拥有自己的 Dalvik 虚拟机实例,并且运行于独立的进程当中(Android 5.0 系统之后改为 ART 虚拟机),独立的进程可以防止当虚拟机崩溃的时候,所有程序都被关闭

    3. 应用框架层(Application Framework)

    • 这一层主要是提供开发应用程序所需的框架,使程序员可以进行快速开发

    4. 应用层(Applications)

    • 安装在手机上的应用程序都属于这一层

    5. 其他

    • 开发人员
      • 如果从事 Android 应用开发,那么应该研究 Android 的应用层和应用框架层
      • 如果从事 Android 系统开发,那么应该研究 Android 的系统库层
      • 如果从事 Android 驱动开发,那么应该研究 Android 的 Linux 内核层
    • Dalvik 虚拟机 与 ART(Android Runtime) 虚拟机
      • Android 5.0 系统之后 ART 虚拟机取代 Dalvik 虚拟机,主要是为了提升 Android 系统的流畅性
      • 在 Dalvik 虚拟机下,应用程序每次运行的时候,字节码都需要通过JIT(Just-in-Time 即时编译)转换为机器码,这也是为什么每次开启程序的时候都会很慢的原因
      • ART 虚拟机,在应用程序安装的时候,就将字节码预先编译成了机器码,在应用程序运行的时候无需再次编译,使用的技术是 AOT(Ahead-of-Time 预编译)
      • ART 虚拟机也有缺点,预编译会占用更大的内存空间,而且应用程序的安装时间也会延长
    • 接口
      • 这里采用知乎上某位大牛类似的回答来说明一下
      • 比如说,小 A 通过某种技术,在网络上搜索了很多高质量的美女图片,然后发布在他的微博上,恰好小 B 也是这方面的爱好者,那么小 A 的微博就是接口,小 B 只需关注小 A 的微博便可以查看大量的美女图片,无需关心小 A 是通过什么技术来获得这些图片的
    • HAL(Hardware Abstraction Layer 硬件抽象层)
      • 如图 2 所示,这是比较新的 Android 系统架构图,图中还有一层叫 HAL(Hardware Abstraction Layer 硬件抽象层)
      • HAL 的由来
        • Linux 内核的发布遵循 GPL 协议,GPL 协议规定:所有对源码的修改都必须开源
        • 如果 Google 在 Linux 内核中编写驱动程序模块,那么修改的源码就必须全部公布出来,但是这样一来会损害硬件厂商的利益,毕竟公开源码的话,硬件的实现细节和参数也就暴露了。为了解决这个问题,Google 提出了 HAL,厂商可以在不公开源码的情况下,将硬件的相关实现以库(.so)的形式放在 HAL 中,当然,硬件驱动不可能完全脱离 Linux 内核,所以 Google 也在Linux 内核中做了相应的修改,基于 GPL 协议,这部分修改的源码要公布出来,但是因为 HAL 不属于对 Linux 内核的修改,所以这里的源码就没有开源的必要了
      • HAL 的功能
        • HAL 提供了将设备硬件的功能暴露给 Application Framework 层的标准接口
        • HAL 由许多库模块组成,每个库模块都实现了特定类型的硬件组件接口,通俗地讲就是通过库模块就可以调用相应的硬件组件,比如:蓝牙模块在 HAL 中有特定的库模块,当 Application Framework 层的 API 访问蓝牙设备时,Android 系统会加载相应的库模块以供 API 使用
        • 这里有必要理清一下,库模块是提供给 API 的接口,而 API 是提供给程序员的接口

    图2 Android 系统架构图(图片来源于网络)
  • 相关阅读:
    elk工作原理
    nginx 引入外部文件
    3.1.2 视图实例演示-登录页面
    通信架构
    JAX-WS HandlerChain使用详解
    改变规则可以,前提是得有本事——北漂18年(64)
    An internal error occurred during:"Update Installed JREs".java.lang.NullPointerException
    jquery.mobile-1.4.5.min.js:3 Uncaught TypeError: Cannot set property 'mobile' of undefined
    大数据时代,百货行业信息化将如何变革?
    17.2?Replication Implementation 复制实施:
  • 原文地址:https://www.cnblogs.com/huangzenglie/p/8619571.html
Copyright © 2011-2022 走看看