Android 操作系统简介

news2024/12/26 12:50:28

Android 操作系统简介

    • 1. 起源
    • 2. 操作系统市场占有率
    • 3. Android 系统架构
      • 3.1 Linux Kernel
      • 3.2 Hardware Abstraction Layer (HAL)
      • 3.3 运行时 + 系统库
        • 3.3.1 Android Runtime
        • 3.3.1 Native C/C++ Libraries
      • 3.4 Java API Framework
      • 3.5 System Apps


1. 起源

安卓(Android)是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统,由安迪·鲁宾开发,主要用于移动设备。2005年8月由Google收购。2008年,谷歌发布Android 1.0系统,这也是Android系统最早的版本。目前的最新版本是2022年8月发布的Android 13。——百度百科

2. 操作系统市场占有率

(数据来源于调研机构StockApps.com)
   据某调研机构提供的2018年7月-2022年6月的智能手机操作系统占有率的统计数据显示,Android系统市场占有率稳定在70%-80%,IOS占比20%-30%,仅有不超过5%的市场被三星、诺基亚和KaiOS等厂家瓜分。
在这里插入图片描述
   客观上说,Android在操作系统市场的统治力仍无人可撼动,相较于主要竞争对手iOS,Android系统具有更高的自由度、开源特性以及可负担性深受全球开发者和用户喜爱。

3. Android 系统架构

   Android 是一个基于 Linux 的开源软件栈,适用于各种类型的android 设备。 下图显示了 Android 平台的主要组件。图片来源于Android官网
Android体系机构

3.1 Linux Kernel

   Android 平台的基础是 Linux 内核。 例如,Android Runtime(ART) 依赖于 Linux 内核来实现线程和低级内存管理等底层功能。
   使用 Linux 内核使 Android 能够利用关键的安全功能,而且能让设备制造商在熟悉的内核上开发硬件驱动程序。

3.2 Hardware Abstraction Layer (HAL)

   硬件抽象层 (HAL) 提供标准接口,将设备硬件功能暴露给更高级别的 Java API 框架。 HAL 由多个库模块组成,每个库模块都为特定类型的硬件组件(例如摄像头或蓝牙模块)实现一个接口。 当Framework API 调用或访问设备硬件时,Android 系统会加载该硬件组件的库模块。

3.3 运行时 + 系统库

3.3.1 Android Runtime

   对于运行 Android 5.0(API 级别 21)或更高版本的设备,每个应用程序都在自己的进程中运行,并使用自己的 Android 运行时 (ART) 实例。 ART 旨在通过执行 DEX 文件在低内存设备上运行多个虚拟机,DEX是一种专为 Android 设计的字节码格式,已针对最小内存占用进行了优化。构建工具,例如 d8,将 Java 源代码编译成 DEX 字节码,就可以在 Android 平台上运行。

ART 的一些主要功能包括:

  • 提前 (AOT) 和即时 (JIT) 编译
  • 优化的垃圾收集 (GC)
  • 在 Android 9(API 级别 28)及更高版本上,将应用程序包的 Dalvik 可执行格式 (DEX) 文件转换为更紧凑的机器代码。
  • 更好的调试支持,包括专用的采样分析器、详细的诊断异常和崩溃报告,以及设置观察点以监控特定字段的能力

   在 Android 5.0(API 级别 21)之前,Dalvik 是 Android 运行时。如果您的应用程序在 ART 上运行良好,那么它应该也可以在 Dalvik 上运行,但反之可能并非如此。
   Android 还包括一组核心运行时库,它们提供 Java 编程语言的大部分功能,包括 Java API 框架使用的一些 Java 8 语言特性。

3.3.1 Native C/C++ Libraries

   许多Android 系统核心组件和服务,例如 ART 和 HAL,都是由native 代码(c/c++)构建的, 这些native 代码依赖由C 和 C++ 编写的native 库。 Android 平台提供的 Java Framework API 将其中一些native库的功能公开给应用程序。 例如,您可以通过 Android 框架的 Java OpenGL API 访问 OpenGL ES,在应用程序中支持绘制和操作 2D 和 3D 图形。

   如果您的应用程序是基于C 或 C++ 代码,您可以使用 Android NDK 直接从您的native代码访问其中一些native 平台库。

3.4 Java API Framework

   您可以通过调用 Java API 来使用 Android 操作系统的整个功能集。 这些 API 通过简化核心、模块化系统组件和服务的重用,构成了您创建 Android 应用程序所需的构建块,其中包括:

  • View System: 丰富且可扩展的View系统,可用于构建应用程序的 UI,包括列表、网格、文本框、按钮,甚至是可嵌入的 Web 浏览器
  • Resource Manager 资源管理器,提供对非代码资源的访问,例如本地化字符串、图形和布局文件
  • Notificatioin Manager 一个通知管理器,使所有应用程序都可以在状态栏中显示自定义通知
  • Activity Manager 一个管理应用程序生命周期并提供通用导航回栈的Activity 管理器
  • Content Provider 使应用程序能够访问来自其他应用程序(例如联系人应用程序)的数据或共享自己的数据的content provider 提供程序

   Android 系统程序使用的 Framework API, 开发人员也可以完全访问。

3.5 System Apps

   Android 自带的核心应用程序: 电子邮件、短信、日历、互联网浏览、联系人等。 平台附带的应用程序与用户选择安装的应用程序相比没有特殊地位。 因此,第三方应用程序可以成为用户的默认网络浏览器、SMS Messenger,甚至是默认键盘(某些例外情况适用,例如系统的设置应用程序)。

   系统应用程序既可以作为用户应用程序,也可以作为关键功能供开发人员从他们自己的应用程序访问。 例如,如果您的应用程序想要发送 SMS 消息时,您不需要自己构建该功能 - 您可以调用已安装的任何 SMS 应用程序,来向指定的收件人发送消息。

在这里插入图片描述

Reference

  1. Android 架构介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/124159.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

程序员年底如何升职加薪?这份涨薪指南来了!

年底了,这个时间节点对于各个公司来说都很重要。 今年大家也知道情况,互联网整体行情都不太好,国外也不好过,硅谷裁员大刀阔斧,实实在在的 感受到了寒意。 能顺利熬到年底的程序员,现在就会关心“公司会普调…

一分钟搞定Netty 三大组件,如果搞不定,再看3遍

1. 三大组件简介 Channel 与 Buffer Java NIO 系统的核心在于:通道 (Channel) 和缓冲区 (Buffer)。通道表示打开到 IO 设备 (例如:文件、套接字) 的连接。若需要使用 NIO 系统,需要获取用于连接 IO 设备的通道 以及用于容纳数据的缓冲区。然…

黑客使用虚假 DDoS 保护页面分发恶意软件

WordPress 网站被黑客入侵后显示欺诈性 Cloudflare DDoS 保护页面,这些页面被用于分发恶意软件(例如 NetSupport RAT 和 Raccoon Stealer)。 “最近针对 WordPress 网站的 JavaScript 注入激增,通过弹出虚假的 DDoS 阻止提示&…

DaVinci:跟踪器 - 窗口

调色页面:跟踪器Color:Tracker跟踪器 - 窗口 Tracker - Window,是 DaVinci Resolve 提供的一款强大的跟踪工具。可以利用窗口调板所设置的窗口区域,通过自动分析之后,在此区域内产生许多如云状分布的特征点&#xff08…

Java8 Stream详细用法介绍

Java8 Stream详细用法介绍一、Stream概述1.1、流的定义1.2、流与集合1.3、流的特性1.4、Stream的创建1.5、Stream操作分类二、Stream API 使用2.1 中间操作2.1.1、filter() 过滤2.1.2、map与flatMap 映射2.1.3、sorted() 排序2.2 终止操作2.2.1、forEach() 遍历2.2.2、collect(…

ThinkPHP 多应用模式下访问其他应用忽略入口文件

目录 问题描述: 解决方法: 1.配置两个域名分别指向项目public目录 2.项目全局配置域名绑定应用 问题描述: 使用TP6.0做多应用项目开发,分为前端Api和后台管理 项目中已配置地址重写规则 Api为默认应用,可忽略入…

Allegro如何手动和自动10度走线操作指导

Allegro如何手动和自动10度走线操作指导 PCB上有时需要10度走线,可以有效的避免玻纤效应的产生,尤其是在应对高速设计的时候,Allegro支持10度走线如下图 具体操作如下 选择setup Parameter选择route

50个超级有用的JavaScript单行代码

在这篇文章中,我列出了一个系列的50个 JavaScript 单行代码,它们在使用 vanilla js(≥ ES6)进行开发时非常有用。它们也是使用该语言在最新版本中为我们提供的所有功能来解决问题的优雅方式。 我将它们分为以下5大类:…

波士顿房价数据集进行数据预处理和模型训练(Python)

目录 前言 一、数据预处理定义 二、波士顿房价数据进行数据预处理 2.1 下载波士顿房价数据集 2.2 查看数据集的描述、特征及数据条数、特征数量 2.3 将数据读入pandas的DataFrame并转存到csv文件 2.4 查看数据集各个特征的类型以及是否有空值 2.5 对数据集做中心化度量&a…

自动驾驶技术平台分享:百度Apollo开放平台8.0再升级,更简单,更便捷,更高效

文章目录自动驾驶技术入门,先看平台Appllo主要优势版本更新新特性颠覆更新“新”架构全新加入软件包管理机制加入新感知模型感知全流程开放与提效全新PnC工具链写在最后自动驾驶技术入门,先看平台 近年来,自动化驾驶的话题越来越成为热点。对…

【十天成为红帽工程师】第六天 DNS域名解析服务器

目录 一、域名解析服务器的介绍 二、DNS域名解析的过程 三、搭建DNS服务器 一、域名解析服务器的介绍 DNS(Domain Name System)是互联网上的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互…

ChatGPT:新晋CV工程师

在短短的两个星期内,ChatGPT 迅速成为公众聊天的焦点。超过一百万的人与OpenAI的新聊天机器人“交谈”,让它写诗和大学论文,生成创意食谱,创建虚拟机…它也被用来撰写新闻文章和YouTube视频的介绍。作为计算机视觉公司的机器学习工…

Qt第五十一章:Qt样式表-Qss

目录 一、盒子模型 二、选择器 三、伪状态 四、字体 五、边框 六、背景 七、边距 八、示例大全 一、盒子模型 二、选择器 选择器示例描述通用选择器*匹配所有控件类型选择器QPushButton匹配给定类型控件,包括子类类选择器.QPushButton匹配给定类型控件&…

【PAT甲级 - C++题解】1032 Sharing

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📚专栏地址:PAT题解集合 📝原题地址:题目详情 - 1032 Sharing (pintia.cn) 🔑中文翻译:共享 📣专栏定位&…

[ 代码审计篇 ] 代码审计案例详解(二) XXE代码审计案例

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

年底了,手机通讯录和相册被恶意APP获取,看我如何破局?

☆ 最近几天突然收到一个朋友的深夜短信,被告知如果有人发送不明信息,或者发送任何不明链接,都不要点开。我经过问朋友,得知下载了一个恶意的APP,把通讯录和手机相册获取了。 ☆ 年底了,很多人发愁过年没有…

ASIO IO_CONTEXT 源码整理

io_context关系图 io_context io_context::io_context(): impl_(add_impl(new impl_type(*this,ASIO_CONCURRENCY_HINT_DEFAULT, false))) { }io_context::io_context(int concurrency_hint): impl_(add_impl(new impl_type(*this, concurrency_hint 1 ? ASIO_CONCURRENCY_HI…

一千元以内的蓝牙耳机推荐,2023年最值得入手的蓝牙耳机分享

对于蓝牙耳机的选购技巧,我还是比较了解的,也知道有哪些蓝牙耳机比较好用,音质也好,但还是有很多人不知道该如何选购耳机,我也总是被问到蓝牙耳机挑选的相关问题,今天就来跟大家一起来了解了解什么蓝牙耳机…

看我这篇没人比你更懂RecyclerView的预加载

实际上,预拉取(prefetch)机制作为RecyclerView的重要特性之一,常常与缓存复用机制一起配合使用、共同协作,极大地提升了RecyclerView整体滑动的流畅度。 并且,这种特性在ViewPager2中同样得以保留,对ViewPager2滑动效…

【面试题】请你谈谈MySQL性能调优的方法

【面试题】请你谈谈MySQL性能调优的方法 这个问题是一个开放性问题,本人这一段时间参加面试(2022.12.26)经常被问道...... 刚刚开始我回答的很混乱!虽然真的知道MySQL性能调优的方法,也做过类似的工作,但…