Android系统版本特性与差异

5,369 阅读21分钟

[toc] 前几天,Android I/O大会在上海举办,Google中国在B站上传了一个Android开发最新技术概览的视频,里面讲解到了Android 10、Jetpack、Android Studio等新技术和黑科技,突然发现自己不太了解各个Android系统版本的特性和发布的功能点,于是查看了Android开发者官方文档整理并总结各个系统版本的差异。

版本 特点
Android 4.4 KitKat 1、NFC功能
2、传感器
3、截屏和视频录制
4、全屏沉浸式模式
Android 5.0 Lollipop 1、Material Design
2、改善通知(锁屏也能显示通知)
3、静态编译与动态编译同时使用
Android 6.0 Marshmallow 1、运行时权限(动态权限)
2、低耗电模式和待机模式
3、静态编译与动态编译同时使用
4、文本选择(剪切、复制、全选)
Android 7 Nougat 1、应用分屏
2、通知栏快捷回复
3、快速设置
Android 8 Oreo 1、全新的通知(渠道等)
2、自动填充框架
3、画中画(小窗口,播放视频等)
4、自适应图标(圆形、方形图标)
Android 9 Pie 1、室内定位
2、刘海屏、凹凸屏的适配
3、多摄像头支持
4、神经网络API的支持
Android 10 1、可折叠设备的支持
2、暗黑模式
3、5G网络的支持
4、手势导航
5、分享API的更新
6、设备标识码的权限
6、地理位置权限

Android 4.4 KitKat

  1. 通过主机卡模拟新的NFC功能
    Android 4.4通过主机卡模拟(HCE)进行基于NFC的安全交易、支付、卡存取、过境通行证和其他自定义服务引入新的平台支持。

  2. 打印框架
    Android 应用可以通过 WLAN 或云托管服务(例如 Google 云打印)打印任何类型的内容。在支持打印的应用中,用户可以发现可用的打印机,更改纸张尺寸,选择要打印的特定页面,打印几乎任何种类的文档、图像或文件。

  3. 存储访问框架
    新的存储访问框架让用户能够在其所有首选文档存储提供程序中方便地浏览并打开文档、图像以及其他文件。用户可以通过易用的标准 UI,以统一方式在所有应用和提供程序中浏览文件和访问最近使用的文件。

  4. 低功耗传感器

    • 传感器批处理:Android 4.4 针对硬件传感器批处理引入平台支持,这是一项新的优化功能,可以显著降低传感器持续活动所消耗的电量。

    • 步测器和计步器:Android 4.4 还增加对了两种新的复合传感器 — 步测器和计步器 — 的平台支持,它们让您的应用可以在用户行走、跑步或攀爬楼梯时跟踪步数。这些新的传感器在硬件中实现,以降低耗电量。

  5. 短信提供程序
    如果您开发使用短信或彩信的消息传递应用,现在您可以使用共享短信提供程序和新的 API 管理您的应用的消息存储和检索。新的短信提供程序和 API 定义了一个适用于所有短信或彩信处理应用的标准交互模式。

  6. 开发漂亮应用的新方式

    • 全屏沉浸式模式:您的应用可以利用设备屏幕上的每一个像素显示内容和捕获触摸事件。Android 4.4添加了新的全屏沉浸模式,让您可以在手机和平板上创建从一个边缘延伸到另一个边缘的全出血 UI,隐藏所有系统 UI,例如状态栏和导航栏。它适用于鲜艳的视觉内容,例如照片、视频、地图、书本和游戏。
      在新模式中,系统UI保持隐藏状态,即使在用户与您的应用或游戏交互时,您可以从屏幕上的任何位置(甚至在系统栏占据的其他位置)捕获触摸事件。这是您在应用或游戏中创建更大、更加丰富和更加沉浸式的UI并减少视觉分散的绝佳方式。
      为确保用户在全屏沉浸模式中始终能轻松、一致地访问系统UI, Android 4.4 支持新的手势。现在,在沉浸模式中,从屏幕顶部或底部边缘滑动手指可以显示系统 UI。
      要返回沉浸模式,用户可以触摸栏界限之外的屏幕或等待一小段时间,让栏自动隐藏。为提供一致的用户体验,新的手势还与之前隐藏状态栏的方法配合使用。

    • 用于动画场景的转场框架:利用此转场框架,您可以定义场景、典型视图层次和转场,它们描述如何在用户进入或退出场景时制作场景动画或转换场景。您可以使用多种预定义的转场类型,根据特定属性(例如布局界限或可见性)制作场景动画。还有一种自动转场类型,可以在场景切换时自动淡出淡入、移动视图和调整视图大小。此外,您可以定义自定义转场,为对您的应用最为重要的属性制作动画,而且您可以在必要时插入您自己的动画样式。

    • 透明系统UI样式:要使内容发挥最大作用,您现在可以使用新的窗口样式和主题请求透明系统 UI,包括状态栏和导航栏。为确保导航栏按钮或状态栏信息清晰可辨,在系统状态栏后面显示微妙的渐变效果。典型用例是需要显示出壁纸的应用。

  7. 新的媒体功能
    屏幕录制:现在,可以轻松地从 Android 设备直接对应用制作高质量视频。 Android 4.4 添加了对屏幕录制的支持,提供屏幕录制实用程序,让您能够在通过 USB 连接到 Android SDK 环境的设备上启动和停止录制。这是一种为应用、测试材料、营销视频等创建演示和教程的绝佳新方式。

Android 5.0 Lollipop

  1. Material Design
    提供扩充的UI工具包,便于在应用中集成新的设计模式。 新增的三维视图允许设置Z维度来让视图元素升高偏离视图层次并投射实体阴影。

  2. ART运行时
    Android在全新的ART运行时上独占运行,这个全新开发的运行时支持混合使用预先编译(AOT)代码、即时编译(JIT)代码和解析代码。它支持 ARM、x86 和 MIPS 架构,并全面兼容 64 位。
    ART 可改善应用性能和响应速度。高效的垃圾收集可减少 GC 事件的暂停次数和持续时间,让事件能够充分适应垂直同步窗口,以避免您的应用发生跳帧。ART 还能通过动态转移内存来优化前台使用的性能。

  3. 通知
    改善通知栏,在锁屏状态下也能接收到通知,在来电状态下能出现在抬头通知中。

  4. 屏幕采集和屏幕共享

Android 6.0 Marshmallow

  1. 运行时权限
    用户可以直接在运行时管理应用权限。这种模式让用户能够更好的了解和控制权限。同时为应用开发者精简了安装和自动更新过程。用户可为所安装的各个应用分别授予或撤销权限。

  2. 低电耗模式和应用待机模式

    • 低电耗模式 如果用户拔下设备的电源插头,并在屏幕关闭后的一段时间内使其保持不活动的状态,设备会进入低电耗模式,该模式下设备会尝试让系统保持休眠状态。在该模式下,设备会定期短时间恢复工作,以便进行应用同步,还可以让系统执行任何挂起操作。 (当不碰手机,手机自动关闭屏幕后,过一会,手机将进入瞌睡模式。在瞌睡模式下,设备只会定期的唤醒,然后继续执行等待中的任务接着又进入瞌睡;)
    • 应用待机模式 应用待机模式允许系统判定应用在用户未主动使用它的它处于空闲状态。当用户有一段时间未触摸应用时,系统便会作出此判定。如果拔下了设备电源插头,系统会为其视为空闲的应用停用网络访问以及暂停同步和作业。 (假如用户一段时间不触碰手机,设备将进入待机模式。在这个模式下,系统会认为所有app是闲置的,这时系统会关闭网络,并且暂停app之前正在执行的任务。)
  3. 取消支持Apache HTTP客户端 Android 6.0 版移除了对 Apache HTTP 客户端的支持。建议使用HttpURLConnection。如果继续使用Apache HTTP API,就先在build.gradle文件中声明编译时依赖项:

android {    
    useLibrary 'org.apache.http.legacy'
}
  1. 文本选择 现在,当用户在您的应用中选择文本时,您可以在一个浮动工具栏中显示“剪切”、“复制”和“粘贴”等文本选择操作。其在用户交互实现上与为单个视图启用上下文操作模式中所述的上下文操作栏类似。

  2. 运行时
    ART 运行时环境现在可正确实现 newInstance() 方法的访问规则。此变更修正了之前版本中 Dalvik 无法正确检查访问规则的问题。如果您的应用使用 newInstance() 方法,并且您想重写访问检查,请调用 setAccessible() 方法(将输入参数设置为 true)。如果您的应用使用 v7 appcompat 库或 v7 recyclerview 库,则您必须更新应用以使用这些库的最新版本。否则,请务必更新从 XML 引用的任何自定义类,以便能够访问它们的类构造函数。
    此版本更新了动态链接程序的行为。动态链接程序现在可以识别库的 soname 与其路径之间的差异(公开错误 6670),并且现在已实现了按 soname 搜索。之前包含错误的 DT_NEEDED 条目(通常是开发计算机文件系统上的绝对路径)却仍工作正常的应用,如今可能会出现加载失败。
    现已正确实现 dlopen(3) RTLD_LOCAL 标记。请注意,RTLD_LOCAL 是默认值,因此不显式使用 RTLD_LOCAL 的 dlopen(3) 调用将受到影响(除非您的应用显式使用 RTLD_GLOBAL)。使用 RTLD_LOCAL 时,在随后通过调用 dlopen(3) 加载的库中并不能使用这些符号(这与由 DT_NEEDED 条目引用的情况截然不同)。
    在之前版本的 Android 上,如果您的应用请求系统加载包含文本重定位信息的共享库,系统会显示警告,但仍允许加载共享库。从此版本开始,如果您的应用的目标 SDK 版本为 23 或更高,则系统会拒绝加载该库。为帮助您检测库是否加载失败,您的应用应该记录 dlopen(3) 失败日志,并在日志中加入 dlerror(3) 调用返回的问题描述文本。要详细了解如何处理文本重定位,请参阅此指南。

Android 7 Nougat

  1. 多窗口支持(原生分屏)
    在运行 Android 7.0 的手机和平板电脑上,用户可以并排运行两个应用,或者处于分屏模式时一个应用位于另一个应用之上。用户可以通过拖动两个应用之间的分隔线来调整应用。

  2. 通知增强功能
    最大的改变是可以在通知栏上直接对通知进行回复。

  3. 配置文件知道的JIT/AOT编译
    在Android 7.0中,添加了即时(JIT)编译器,对ART进行代码分析,让它可以在应用运行时持续提升Android应用的性能。JIT编译器对Android运行组件当前的Ahead of Time(AOT)编译器进行了补充,有助于提升运行时性能,节省存储空间,加快应用更新和系统更新速度。
    配置文件指导的编译让 Android 运行组件能够根据应用的实际使用以及设备上的情况管理每个应用的 AOT/JIT 编译。例如,Android 运行组件维护每个应用热方法的配置文件,并且可以预编译和缓存这些方法以实现最佳性能。对于应用的其他部分,在实际使用之前不会进行编译。
    除提升应用的关键部分的性能外,配置文件指导的编译还有助于减少整个 RAM 占用,包括关联的二进制文件。此功能对于低内存设备非常尤其重要。
    Android 运行组件在管理配置文件指导的编译时,可最大程度降低对设备电池的影响。仅当设备处于空闲状态和充电时才进行编译,从而可以通过提前执行该工作节约时间和省电。

  4. 随时随地低电耗模式
    Android 6.0 推出了低电耗模式,即设备处于空闲状态时,通过推迟应用的 CPU 和网络活动以实现省电目的的系统模式,例如,设备放在桌上或抽屉里时。现在,在 Android 7.0 中,低电耗模式又前进了一步,随时随地可以省电。只要屏幕关闭了一段时间,且设备未插入电源,低电耗模式就会对应用使用熟悉的 CPU 和网络限制。这意味着用户即使将设备放入口袋里也可以省电。

  5. Quick Settings Tile API
    “快速设置”通常用于直接从通知栏显示关键设置和操作,非常简单。在 Android 7.0 中,我们已扩展“快速设置”的范围,使其更加有用更方便。我们为额外的“快速设置”图块添加了更多空间,用户可以通过向左或向右滑动跨分页的显示区域访问它们。我们还让用户可以控制显示哪些“快速设置”图块以及显示的位置 — 用户可以通过拖放图块来添加或移动图块。

  6. 号码屏蔽、来电过滤

Android 8 Oreo

  1. 通知
    在Android 8.0中,重新设计通知:

    • 通知渠道:Android 8.0中引入了通知渠道,其允许您为要显示的每种通知类型创建用户可自定义的渠道。用户界面将通知渠道称之为通知类别。

    • 通知标志:Android 8.0 引入了对在应用启动器图标上显示通知标志的支持。通知标志可反映某个应用是否存在与其关联、并且用户尚未予以清除也未对其采取行动的通知。通知标志也称为通知点。

    • 休眠:用户可以将通知置于休眠状态,以便稍后重新显示它。重新显示时通知的重要程度与首次显示时相同。应用可以移除或更新已休眠的通知,但更新休眠的通知并不会使其重新显示。

    • 通知超时:现在,使用 setTimeoutAfter() 创建通知时您可以设置超时。您可以使用此函数指定一个持续时间,超过该持续时间后,通知应取消。如果需要,您可以在指定的超时持续时间之前取消通知。

    • 背景颜色:您现在可以设置和启用通知的背景颜色。只能在用户必须一眼就能看到的持续任务的通知中使用此功能。例如,您可以为与驾车路线或正在进行的通话有关的通知设置背景颜色。您还可以使用 Notification.Builder.setColor() 设置所需的背景颜色。这样做将允许您使用 Notification.Builder.setColorized() 启用通知的背景颜色设置。

    • 消息样式:现在,使用 MessagingStyle 类的通知可在其折叠形式中显示更多内容。对于与消息有关的通知,您应使用 MessagingStyle 类。您还可以使用新的 addHistoricMessage() 函数,通过向与消息相关的通知添加历史消息为会话提供上下文。

  2. 自动填充框架
    帐号创建、登录和信用卡交易需要时间并且容易出错。在使用要求执行此类重复性任务的应用时,用户很容易遭受挫折。Android 8.0 通过引入自动填充框架,简化了登录和信用卡表单之类表单的填写工作。在用户选择接受自动填充之后,新老应用都可使用自动填充框架。

  3. 画中画模式
    Android 8.0允许以画中画 (PIP) 模式启动操作组件。PIP 是一种特殊的多窗口模式,最常用于视频播放。目前,PIP模式可用于 Android TV,而Android 8.0 则让该功能可进一步用于其他 Android 设备。
    当某个Activity处于PIP模式时,它会处于暂停状态,但仍应继续显示内容。因此,您应确保您的应用在onPause()处理程序中进行处理时不会暂停播放。相反,您应在onStop()中暂停播放视频,并在onStart()中继续播放。

  4. 自适应图标
    Android 8.0 引入自适应启动器图标。自适应图标支持视觉效果,可在不同设备型号上显示为各种不同的形状。比如有些设备应用程序图标是方形,有些是圆形。

  5. 统一的布局外边距和内边距
    Android 8.0 让您可以更轻松地指定 View 元素的对边使用相同外边距和内边距的情形。具体来说,您现在可以在布局 XML 文件中使用以下属性:

    • layout_marginVertical,同时定义 layout_marginTop 和 layout_marginBottom。
    • layout_marginHorizontal,同时定义 layout_marginLeft 和 layout_marginRight。
    • paddingVertical,同时定义 paddingTop 和 paddingBottom。
    • paddingHorizontal,同时定义 paddingLeft 和 paddingRight。

Android 9 pie

  1. 利用Wifi RTT 进行室内定位 Android 9添加了对IEEE 802.11 mc Wi-Fi协议的平台支持,从而让您的应用可以利用室内定位功能。
    在运行 Android 9 且具有硬件支持的设备上,应用可以使用 RTT API 来测量与附近支持 RTT 的 Wi-Fi 接入点 (AP) 的距离。 设备必须已启用位置服务并开启 Wi-Fi 扫描(在 Settings > Location 下),同时您的应用必须具有 ACCESS_FINE_LOCATION 权限。
    设备无需连接到接入点即可使用 RTT。 为了保护隐私,只有手机可以确定与接入点的距离;接入点无此信息。

  2. 显示屏缺口支持(刘海屏、凹凸屏)
    Android 9 支持最新的全面屏,其中包含为摄像头和扬声器预留空间的屏幕缺口。 通过 DisplayCutout 类可确定非功能区域的位置和形状,这些区域不应显示内容。 要确定这些屏幕缺口区域是否存在及其位置,请使用 getDisplayCutout() 函数。

  3. 多摄像头支持和摄像头更新
    在运行 Android 9 的设备上,您可以通过两个或更多物理摄像头来同时访问多个视频流。] 在配备双前置摄像头或双后置摄像头的设备上,您可以创建只配备单摄像头的设备所不可能实现的创新功能,例如无缝缩放、背景虚化和立体成像。 通过该 API,您还可以调用逻辑或融合的摄像头视频流,该视频流可在两个或更多摄像头之间自动切换。
    摄像头方面的其他改进还包括附加会话参数和 Surface 共享,前者有助于降低首次拍照期间的延迟,而后者则让摄像头客户端能够处理各种用例,而无需停止并启动摄像头视频流。 我们还针对基于显示屏的 flash 支持和 OIS 时间戳访问新增了一些 API,用以实现应用级的图像稳定化和特效。

  4. 适用于可绘制对象和位图的ImageDecoder
    Android 9 引入了 ImageDecoder 类,可提供现代化的图像解码方法。 使用该类取代 BitmapFactory 和BitmapFactory.Options API。
    ImageDecoder 让您可通过字节缓冲区、文件或 URI 来创建 Drawable 或 Bitmap。 要解码图像,请首先以编码图像的来源为参数,调用 createSource()。 然后,通过传递 ImageDecoder.Source 对象来调用 decodeDrawable() 或 decodeBitmap(),从而创建 Drawable] 或 Bitmap。 要更改默认设置,请将 OnHeaderDecodedListener 传递给 decodeDrawable() 或 decodeBitmap()。 ImageDecoder 调用 onHeaderDecoded(),以图像的默认宽度和高度(若已知)为参数。 如果编码图像是动画 GIF 或 WebP,decodeDrawable() 将返回 Drawable,它是 AnimatedImageDrawable 类的一个实例。
    您可以使用不同的方法来设置图像属性:

    • 要将解码的图像缩放到精确尺寸,请将目标尺寸传递给 setTargetSize()。 您也可以使用样图尺寸来缩放图像。 将样图尺寸直接传递给 setTargetSampleSize()。
    • 要在缩放图像的范围内裁剪图像,请调用 setCrop()。
    • 要创建可变位图,请将 true 传递给 setMutableRequired()。

    通过 ImageDecoder 还可以为圆角或圆形遮罩之类的图像添加复杂的定制效果。 以 PostProcessor 类的一个实例作为参数使用 setPostProcessor(),执行您所需的任何绘图命令。

  5. Neural Networks api 1.1
    Android 8.1(API 级别 27)中引入了 Neural Networks API 以加快 Android 设备上机器学习的速度。

  6. 统一生物识别身份验证对话框
    在 Android 9 中,系统代表您的应用提供生物识别身份验证对话框。 该功能可创建标准化的对话框外观、风格和位置,让用户更加确信,他们在使用可信的生物识别凭据检查程序进行身份验证。

Android 10

  1. Foldables(可折叠设备的UI适配+应用连续性)
    基于强大的多窗口支持,Android 10可以跨应用程序窗口扩展多任务处理,并提供屏幕连续性,以便在设备折叠或展开时保持您的应用程序状态。

  2. 5G网络
    5G承诺提供始终如一的更快速度和更低的延迟,Android 10增加了对5G的平台支持,并扩展了现有的API, 以帮助您利用这些增强功能。

  3. 隐私

    • 设备ID不可随便获取(防止设备跟踪)
      应用程序无法再访问可用于跟踪的不可重置设备标识符,包括设备IMEI,序列号和类似标识符。
    • 分区存储
    • 后台禁止启动Activity
    • 地理位置权限
      用户可以通过新的权限选项更好地控制他们的位置数据,他们现在可以允许应用仅在应用实际使用时(在前台运行)访问位置。
    • API限制
  4. 界面

    • 手势导航
      Android 10引入了完全手势导航模式,消除了导航栏区域,并允许应用程序使用全屏幕来提供更丰富,更身临其境的体验。它通过边缘滑动而不是可见按钮保留熟悉的Back,Home和Recents导航。要与手势导航无缝融合,您应该边缘到边缘,在导航栏后面绘制以创建身临其境的体验。
    • 全面屏优化、沉浸式
    • 深色主题
      Android 10增加了系统范围的黑暗主题,非常适合低光照,有助于节省电池电量。
    • 通知栏:
      高低优先级、智能回复、建议操作。Android 10使用设备上的ML来建议通知中的上下文操作,例如对消息进行智能回复或打开通知中地址的地图。您的应用可以立即利用此功能,而无需执行任何操作。
    • 分享UI及其API
      共享快捷方式使分享更快捷,让用户直接跳转到另一个应用程序以共享内容。开发人员可以发布在其应用中添加内容的特定活动的共享目标,并在共享UI中向用户显示这些目标。因为它们是预先发布的,所以共享UI在启动时会立即加载。
    • 新的长宽比
    • multi-resume:
      在multi-window状态下,所有位于顶层的用户可见并且可聚焦的Activity处于Resume状态。但是以下情况中,Activity的状态为Paused:被一个透明的activity覆盖、不可聚焦
    • saw(system_alart_window)权限被废止
    • bubbles开发者预览版,交互式通知的新方式
  5. 系统

    • TLS 1.3默认开启,提高安全性、和隐私性
    • BiometricPrompt 人脸、指纹等API,生物识别登录。认证确认(显示、隐式)
    • 更好的文字支持
    • 更好的编解码器
    • ANGLE:OpenGL ES
    • 神经网络API的演进 1.2
    • Google Play推荐使用Android App Bundle

Jetpack更新

  1. camerax 兼容到L 设备一致性 使用方便

  2. Jetpack compose 下一代UI工具包、非绑定时、响应式、kotlin优先

  3. Jetpack Security library 基于AES-256GCM提供文件和SharedPreference加密

  4. benchmark library 衡量代码性能、防止常见的测量错误

  5. DataBind优化

  6. view binding android studio 3.6 不要findviewby