本页总结了 Android 9 版本中的主要功能,并提供了其他信息的链接。根据各个功能的介绍文档在本网站上的位置,整理了以下功能摘要。有关章节迁移和重命名的指南,请参阅 2018 年 8 月网站更新。
构建
通用系统映像 (GSI)
常规系统映像 (GSI) 是包含已针对 Android 设备调整配置的系统映像。通用系统映像 (GSI) 详细介绍了适用于搭载 Android 9 设备的 GSI 与适用于升级到 Android 9 设备的 GSI 之间的差异。
架构
硬件抽象层 (HAL)
HIDL 框架向后兼容性
HIDL 框架向后兼容性验证是一种验证框架向后兼容性的方法。
动态可用的 HAL
动态可用的 HAL 支持在不使用或不需要 Android 硬件子系统时动态关停这些子系统。
HIDL
HIDL MemoryBlock
HIDL MemoryBlock 是一个在 hidl_memory
、HIDL @1.0::IAllocator
和 HIDL @1.0::IMapper
的基础上构建而成的抽象层。它专为有多个内存块共用单个内存堆的 HIDL 服务而设计。
设备树叠加层
经过压缩的叠加层
Android 9 及更高版本增加了以下支持:在使用第 1 版设备树表格表头时,在设备树 Blob 叠加层 (DTBO) 映像中使用经过压缩的叠加层。
DTO 更新
Android 9 及更高版本要求引导加载程序将统一设备树 Blob 传递给内核之后,才能修改设备树叠加层 (DTO) 中定义的属性。
DTBO 映像标头版本控制
Android 9 及更高版本在 DTBO 映像标头中提供了一个版本字段。
DTBO 验证
Android 9 及更高版本需要一个 DTBO 分区。为了在 SoC DT 中添加节点或更改属性,引导加载程序必须在 SoC DT 之上动态叠加设备专用的 DT。如需了解详情,请参阅编译和验证。
内核合规性
Android 9 及更高版本新增了一些要求,这些要求会影响内核及其接口以及 DTBO 的使用。如需了解详情,请参阅以下页面:
供应商 NDK
设计更改
如需了解 Android 9 及更高版本中的 VNDK 设计更改,请参阅以下页面:
ABI 检查工具
ABI 稳定性页面介绍了应用二进制接口 (ABI) 检查工具,该工具可确保对 VNDK 库所做的更改始终符合 ABI 规范。
VNDK 快照
即使系统映像和供应商映像是从不同版本的 Android 构建的,系统映像也可以使用 VNDK 快照为供应商映像提供正确的 VNDK 库。
供应商接口对象(VINTF 对象)
供应商接口对象一节中的以下页面描述了 Android 9 及更高版本中的相关更新:
HIDL 废弃时间表
以下页面介绍了 Android 如何废弃和移除 HIDL HAL:
引导加载程序
产品划分
Android 9 及更高版本支持使用 Android 构建系统来构建 /product
分区。之前,Android 8.x 强制将系统芯片 (SoC) 专属组件从 /system
分区分隔到了 /vendor
分区,而没有为从 Android 构建系统构建的原始设备制造商 (OEM) 专属组件提供专用空间。
规范启动原因合规性
规范启动原因页面描述了对 Android 9 及更高版本中引导加载程序启动原因规范的更改。
System as root
搭载 Android 9 及更高版本的所有设备均必须使用 system-as-root,以便将 ramdisk.img
合并到 system.img
(也称为 no-ramdisk),而后者会作为 rootfs 进行装载。
启动映像标头版本控制
在 Android 9 及更高版本中,启动映像头文件包含一个用于指示头文件版本的字段。引导加载程序必须检查该版本字段,并相应地解析头文件。
在恢复映像中使用 DTBO
为了防止由于非 A/B 设备上的恢复映像与 DTBO 分区之间不匹配而导致 OTA 失败,恢复映像必须包含来自 DTBO 映像的信息。
显示
刘海屏
刘海屏使应用开发者能够打造沉浸式全面屏体验,同时继续为设备前侧的重要传感器留出空间。
旋转建议
Android 9 及更高版本中的屏幕旋转行为更新支持一种面向用户的控件,使用户能够横向或纵向固定屏幕旋转(即使设备位置发生变化)。
同步应用转换
同步应用转换允许使用新的应用转换动画。
文本分类(原为 TEXTCLASSIFIER)
Android 9 及更高版本包含文本分类程序服务,它是实现文本分类的推荐方法,也是默认服务实现。
广色域色彩
Android 9 及更高版本支持宽色域色彩,包括:
- 高动态范围 (HDR)
- 处理 BT2020 颜色空间中的内容,但不作为最终目标数据空间
如需使用宽色域色彩,设备的完整显示堆栈(如屏幕、硬件合成器、GPU)必须支持宽色域色彩或缓冲区格式。即使硬件支持宽色域色彩,设备也不需要声称支持宽色域内容。但是,应启用宽色域色彩以充分利用硬件。为了避免不一致的视觉体验,在运行时不应关闭宽色域色彩。
兼容性
Android 兼容性定义文档
Android 9 兼容性定义文档 (CDD) 是在之前版本的基础上编写的,并进行了一些更新,更新中涵盖了新功能以及对之前已发布功能的要求进行的更改。
设置
更好的应用微件
Android 应用 widget 框架可让您更清楚地了解用户交互情况,特别是在用户删除或手动添加 widget 时。Launcher3 默认自带此功能。
制造商需要更新其启动器应用(随设备提供)以支持此功能(如果不是基于 Launcher3)。OEM 需要在其默认的启动器中支持新的 widgetFeatures 字段。
请注意,只有当启动器按预期实现此功能时,此功能才可端到端正常运行。AOSP 包含实现示例。如需查看提供的示例代码,请参阅 AOSP Change-Id Iccd6f965fa3d61992244a365efc242122292c0ca。
关于软件包安装程序的设备状态更改通知
只要语言区域或显示密度等属性发生更改,就可以将受保护的系统广播发送到拥有 INSTALL_PACKAGES
权限的应用。可以在清单中注册接收器,并且系统会唤醒相关进程以接收广播。这对于希望在发生此类更改时安装应用其他组件的软件包安装程序非常有用,但这种情况并不常见,因为有资格触发此广播的配置更改很少见。
设备状态更改通知源代码位于 platform/frameworks/base
下的以下位置:
api/system-current.txt
core/java/android/content/Intent.java
core/res/AndroidManifest.xml
services/core/java/com/android/server/am/ActivityManagerService.java
信息架构
对“设置”应用信息架构的更改提供了更多功能并简化了实现。
测试
Atest
Atest 命令行工具可让您在本地构建、安装并运行 Android 测试,同时可以大大加快重新运行测试的速度,而无需您了解 Trade Federation 自动化测试框架命令行选项。
兼容性测试套件
CTS 下载
您可在 CTS 下载页面上找到支持 Android 9 的兼容性测试套件 (CTS) 软件包。随附测试的源代码可以与开放源代码树中的 android-cts-9.0_r1
标记同步。
CTS 选项
对于 Android 9,CTS v2 添加了以下命令和参数:
run retry
重新尝试运行在以前的会话中失败或未执行的所有测试。‘--shard-count
将 CTS 运行分为指定数量的独立块,以便在多台设备上并行运行。
此外,先前未记录的命令 --retry-type
已添加到同一 CTS v2 控制台命令参考中。
安全元件 (SE) 服务
安全元件服务可检查全局平台支持的安全元件,具体方法是确定设备是否具备 SE HAL 实现,如果具备,有多少。您可以根据这项服务测试相关 API 和底层安全元件实现。
传感器融合盒
传感器融合盒用于相机图像测试套件 (Camera ITS) 传感器融合测试和多摄像头同步测试。它可以为衡量 Android 手机的摄像头和其他传感器的时间戳准确度提供一致的测试环境。如需了解详情,请参阅以下页面:
- 传感器融合盒快速入门指南,提供了有关如何首次设置传感器融合测试和传感器融合盒的步骤。
- 传感器融合盒组件,提供了组装传感器融合盒的步骤。
宽视野盒装 ITS
宽视野盒装 ITS 是相机 ITS 中的一种自动化系统,旨在测试宽视野 (WFoV) 和常规视野 (RFoV) 相机系统。
供应商测试套件
主机控制器架构
供应商测试套件 (VTS) 主机控制器架构是与其基于云的测试提供服务相集成的 VTS 测试框架的架构。
服务名称感知 HAL 测试
VTS 服务名称感知 HAL 测试支持根据运行 VTS 测试的设备来获取指定 HAL 实例的服务名称。
HAL 可测试性检查
VTS HAL 可测试性检查包括一种利用设备配置识别应针对相应设备目标跳过哪些 VTS 测试的运行时方法。
自动化测试基础架构
自动化测试基础架构是一个 VTS 基础架构,用于在搭载 AOSP 通用系统映像 (GSI) 的合作伙伴设备上自动运行 VTS、CTS 或其他测试。
调试
高级遥测技术
在 Android 中,遥测是自动收集有关设备、Android 系统和应用的使用情况与诊断信息的过程。在以前的 Android 版本中,遥测堆栈受到限制,并且无法捕获识别和解决系统可靠性以及设备或应用问题所需的信息。即使并非不可能,这也使得确定问题的根本原因变得很困难。
Android 9 包含 statsd
遥测功能,它通过更快地收集更加有用的数据解决了这一缺陷。statsd
可收集应用使用情况、电池和进程统计信息以及崩溃数据。这些数据会经过分析并用于改进产品、硬件和服务。
如需了解详情,请参阅 frameworks/base/cmds/statsd/
。
安全功能
应用签名
v3 APK 签名方案支持 APK 密钥轮替。
生物识别支持
Android 9 包含公共类 BiometricPrompt
,应用可以使用该类采用与设备和模态无关的方式集成生物识别身份验证支持。如需详细了解如何集成生物识别堆栈以包含 BiometricPrompt
,请参阅生物识别。
动态分析
Android 9 支持更多漏洞攻击缓解和分析工具。
控制流完整性 (CFI)
控制流完整性 (CFI) 是一种安全机制,它禁止更改已编译二进制文件的原始控制流图,因而执行此类攻击变得异常困难。
内核 CFI
除了默认启用的系统 CFI 之外,Android 9 及更高版本还支持内核控制流完整性 (CFI)。
加密
文件级加密
文件级加密 (FBE) 进行了更新,现可支持可采用的存储设备。新设备应使用文件级加密而不是全盘加密。
元数据加密
Android 9 及更高版本支持存在硬件支持的元数据加密。借助元数据加密,启动时出现的单个密钥会使用文件级加密来加密任何未加密的内容。
Keystore
Android 9 及更高版本包含 Keymaster 4,它具有以下功能。
StrongBox
Android 9 及更高版本支持 Android Keystore 密钥,这些密钥在物理上独立且专为高安全性应用(例如嵌入式安全元件 (SE))而构建的 CPU 中存储和使用。StrongBox Keymaster 是独立安全硬件中的 Keymaster HAL 实现。StrongBox 具有:
- 独立 CPU
- 整体安全存储空间
- 高品质的真随机数生成器
- 防篡改打包
- 防旁路攻击功能
安全密钥导入
为了将密钥安全地导入 Keymaster 4,在设备外创建的密钥会根据特定的授权规范进行加密,该规范定义了密钥的使用方式。
3DES 支持
Keymaster 4 包含 3DES,可与使用 3DES 的旧版系统兼容。
版本绑定
为了支持 Treble 的模块化结构并取消 system.img
到 boot.img
的绑定,Keymaster 4 对密钥版本绑定模式进行了更改,使每个分区都有单独的补丁级别。这就让每个分区都可以独立更新,同时仍可提供回滚保护。
Android Protected Confirmation API
在搭载 Android 9 的受支持设备上,开发者可以使用 Android Protected Confirmation API。应用可以使用此 API 来利用 ConfirmationPrompt
的实例向用户显示提示,提醒他们批准一条简短声明。此声明允许应用重新确认用户希望完成敏感交易,例如付款。
SELinux
按应用划分的 SELinux 沙盒
应用沙盒提供了新的保护和测试用例,确保以 Android 9 及更高版本为目标平台的所有非特权应用均可运行单独的 SELinux 沙盒。
Treble SELinux 变更
SELinux 一节的几个页面记录了 Android 9 及更高版本对 Treble SELinux 的更新。
供应商 init
供应商 init 使用单独的 SELinux 域,利用供应商专属权限来运行 /vendor
命令,从而填补 Treble 系统/供应商拆分中存在的漏洞。
系统属性
Android 9 禁止不必要地在 system
和 vendor
分区之间共享系统属性,并提供了一种用于确保在共享系统属性之间保持一致性的方法。
SELinux 属性测试
Android 9 包含一些新的构建时测试,旨在确保特定位置的所有文件都具有适当的属性。例如,sysfs
中的所有文件都具有所需的 sysfs_type
属性。
音频
高解析度音效
高解析度音效的更新包括将音效处理从 int16 转换为 float 格式,并增加了同步客户端输出轨道、最大客户端/服务器内存和总混合轨道。
相机
外接 USB 摄像头
Android 9 及更高版本支持使用采用标准 Android Camera2 API 和相机 HIDL 接口的即插即用 USB 摄像头(即网络摄像头)。
运动追踪
摄像头设备可以通告运动跟踪功能。
多摄像头支持
多摄像头支持通过一个新的逻辑摄像头设备(由两个或更多个指向同一方向的物理摄像头设备组成)引入了对多摄像头设备的 API 支持。
会话参数
在拍摄会话初始化阶段,实现会话参数可以通过使摄像头客户端主动配置一部分成本高昂的请求参数来减少延迟。
单一生产方、多个消费方缓冲区
单一生产方、多个消费方相机缓冲区传输是一组新方法,当拍摄会话处于活动状态且相机流式传输正在进行时,相机客户端可通过该功能动态添加和移除输出 Surface。
连接
通话和短信
实现流量套餐
Android 9 及更高版本可以更好地为使用 SubscriptionPlan API 实现流量套餐的运营商提供支持。
第三方通话应用
Android 9 及更高版本提供了可让第三方通话应用处理并发传入的运营商通话,并在系统通话记录中记录通话的 API。
运营商
运营商识别号
在 Android 9 中,AOSP 添加了运营商 ID 数据库以帮助识别运营商。该数据库通过提供识别运营商的通用方法,最大限度地减少了重复逻辑和分散的应用体验。
eSIM
嵌入式 SIM(又称 eSIM 或 eUICC)是一种最新技术,可让移动用户在没有实体 SIM 卡的情况下,下载运营商配置文件并激活运营商服务。在 Android 9 及更高版本中,Android 框架提供了用于访问 eSIM 和管理 eSIM 上的订阅配置文件的标准 API。如需了解详情,请参阅:
对 IMS 设置的多 SIM 卡支持
Android 9 及更高版本改进了 IP 多媒体子系统 (IMS) 的用户设置。您可以按单个订阅设置 VoiceOver LTE (VoLTE)、视频通话和 Wi-Fi 通话,而不是在所有订阅中共享这些设置。
SIM 状态广播
在 Android 9 及更高版本中废弃了 Intent.ACTION_SIM_STATE_CHANGED
,并针对卡状态和卡应用状态添加了两个单独的广播:TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED
和 TelephonyManager.ACTION_SIM_APPLICATION_STATE_CHANGED
。
通过这些变更,仅需要知道卡是否存在的接收器无需监听应用状态更改,并且仅需要知道卡应用是否准备好的接收器不需要监听卡状态更改。
这两个新的广播均为 @SystemApis 并且不具有粘性。只有具有 READ_PRIVILEGED_PHONE_STATE
权限的接收器可以接收广播。
当您解锁设备时,intent 不会重新广播。依赖于在您解锁之前发送的广播的接收器必须使用 directBootAware
,或者必须在用户解锁后查询状态。可以使用 TelephonyManager 中的相应 API 查询状态:getSimCardState()
和 getSimApplicationState()
。
Wi-Fi
运营商 WLAN
运营商 Wi-Fi 功能可让设备自动连接到运营商实现的 Wi-Fi 网络。在高度拥塞或信号覆盖范围较小的区域(如体育场或地铁站),运营商 Wi-Fi 可帮助改善连接和分载流量。
随机分配 MAC 地址
随机分配 MAC 地址可让设备在未连接到网络的情况下探测新网络时使用随机 MAC 地址。在 Android 9 及更高版本中,您可以启用开发者选项,使设备在连接到 Wi-Fi 网络时使用随机分配的 MAC 地址。
自动开启 WLAN
启用自动开启 WLAN 功能后,只要设备靠近已保存且接收信号强度指示器 (RSSI) 读数相对较高的 WLAN 网络,便会自动重新启用 WLAN。
Wi-Fi 往返时间
Wi-Fi 往返时间 (RTT) 可让设备测量与其他支持设备的距离,无论它们是接入点 (AP) 还是 Wi-Fi 感知对等设备(如果设备支持 Wi-Fi 感知功能)。此功能基于 IEEE 802.11mc 协议,使应用能够使用准确性更高的定位功能和增强的感知功能。
WLAN 评分改进
经过改进的 Wi-Fi 评分模型可以快速准确地确定设备何时应退出已连接的 Wi-Fi 网络或进入新的 Wi-Fi 网络。这些模型通过避免连接缺口为用户提供可靠而无缝的体验。
查看并调整 config.xml
资源中的 RSSI 值,尤其是以下几项:
config_wifi_framework_wifi_score_bad_rssi_threshold_5GHz
config_wifi_framework_wifi_score_entry_rssi_threshold_5GHz
config_wifi_framework_wifi_score_bad_rssi_threshold_24GHz
config_wifi_framework_wifi_score_entry_rssi_threshold_24GHz
WLAN STA/AP 并发
Wi-Fi STA/AP 并发可以让设备同时在电台 (STA) 和接入点 (AP) 模式下运行。对于支持双频同步 (DBS) Wi-Fi 的设备,此功能让一些功能得以实现,例如在用户想要启用热点 (SoftAP) 时不会中断 STA Wi-Fi。
WiFiStateMachine 改进
WifiStateMachine
是用于控制 Wi-Fi 活动、协调用户输入(操作模式:热点、扫描、连接或关闭)以及控制 Wi-Fi 网络操作(例如扫描或连接)的主类。
在 Android 9 及更高版本中,WifiStateMachine
的 Wi-Fi 框架代码和实现经过了重新设计,缩减了代码大小,使 Wi-Fi 控制逻辑更易于遵循,改进了控制粒度并提高了单元测试的覆盖范围和质量。
概括地讲,WifiStateMachine
允许 Wi-Fi 处于以下四种状态之一:
- 客户端模式(可以连接和扫描)
- 仅扫描模式
- SoftAP 模式(WLAN 热点)
- 已停用(Wi-Fi 完全关闭)
每种 Wi-Fi 模式对运行服务都有不同的要求,并且应以一致的方式设置,从而只处理与其操作相关的事件。新实现将代码限制为与该模式相关的事件,缩短了调试时间并降低了由于复杂性而引入新 bug 的风险。除了对模式功能的显式处理之外,线程管理以一致的方式处理,并且消除了使用异步信道作为同步机制这一行为。
WLAN 权限更新
在 Android 9 及更高版本中,CHANGE_WIFI_STATE
应用权限默认处于启用状态。您可以通过设置 > 应用和通知 > 特殊应用权限 > Wi-Fi 控制中的设置页面停用任何应用的权限。
应用必须能够处理未授予 CHANGE_WIFI_STATE
权限的情况。
如要验证此行为,请运行 roboelectric 测试和手动测试。
对于手动测试:
- 依次转到设置 > 应用和通知 > 特殊应用权限 > WLAN 控制。
- 选择并关闭应用的权限。
- 验证应用是否可以处理未授予
CHANGE_WIFI_STATE
权限的情形。
WPS 弃用
由于安全问题,Android 9 及更高版本已废弃和停用 WiFiManager
Wi-Fi 保护设置 (WPS)。不过,WiFiDirect
仍然在 WPA 客户端中使用 WPS。
图形
实现
Vulkan 1.1 API
Android 9 及更高版本支持实现 Vulkan 1.1 图形 API。
用于窗口转换跟踪的 WinScope 工具
Android 9 及更高版本包含用于跟踪窗口转换的 WinScope 工具。WinScope 提供了用于在转换期间和转换后记录和分析窗口管理器状态的基础架构和工具。它允许记录和单步调试窗口转换,同时将所有相关窗口管理器状态记录到跟踪文件中。您可以使用此数据重播并单步调试转换。
WinScope 工具源代码位于 platform/development/tools/winscope
。
互动
车载音频
车载音频描述了与汽车相关的 Android 实现的音频架构。
神经网络 (NN) HAL 定义了各种加速器的抽象概念。这些加速器的驱动程序必须符合此 HAL。
车载 HAL
车辆属性描述了对车载 HAL 接口的更改。
GNSS 卫星选择
使用新的全球导航卫星系统 (GNSS) HAL(1.1 版及更高版本)时,Android 框架会监控 Android 设置。合作伙伴可以通过 Google Play 服务或其他系统更新来更改这些设置。这些设置可告知 GNSS HAL 是否不应使用某些 GNSS 卫星。在持续出现 GNSS 卫星或星群错误时,或者为了更快地响应使用不同的时制和外部事件(例如闰秒和/或日或周数滚动增加)混合星群时可能发生的 GNSS HAL 实现问题时,这些设置非常有用。
GNSS 硬件型号
在 Android 9 中,GNSS HAL 1.1 或更高版本可以将有关硬件 API 的信息传递给平台。平台需要实现 IGnssCallback
接口并向 HAL 传递一个句柄。GNSS HAL 通过 LocationManager#getGnssHardwareModelName()
方法传递硬件型号信息。设备制造商应与其 GNSS HAL 提供商合作,尽可能提供相关信息。
权限
配置自主访问控制更新
配置自主访问控制 (DAC) 更新了用于扩展文件系统功能的 Android ID (AID) 机制。
将特权应用权限列入白名单
在 Android 9 及更高版本中,如果有权限应该被拒绝,请修改 XML 并使用 deny-permission
标记,而不是先前版本中使用的 permission
标记。
数据
带宽估测改进
Android 9 改进了对带宽估测的支持。如果 Android 应用可以访问可用的数据带宽,则可以为视频通话和视频串流设置更合适的分辨率。
在搭载 Android 6.0 或更高版本的设备上,想获得移动网络带宽估算值的调用方会调用 ConnectivityManager.requestBandwidthUpdate()
,并且框架可以提供下行链路带宽估算值。
不过,在搭载 Android 9 或更高版本的设备上,当带宽估算值发生显著变化时,onCapabilitiesChanged()
回调会自动触发,并且调用 requestBandwidthUpdate()
是空操作;系统会为关联的 getLinkDownstreamBandwidthKbps()
和 getLinkUpstreamBandwidthKbps()
填入由物理层提供的已更新信息。
此外,设备可以通过 ServiceState.getCellBandwidths()
检查 LTE 单元带宽。这使应用可以确定给定单元上可用的带宽(频率)有多少。通过隐藏菜单可以获得单元带宽信息,以便现场测试人员检查最新信息。
eBPF 流量监控
eBPF 网络流量工具结合使用内核与用户空间实现来监控设备自上次启动以来的网络使用情况。该工具提供了额外的功能(例如套接字标记、分离前台/后台流量,以及按 UID 划分的防火墙),用于根据设备状态阻止应用访问网络。
恢复到较低版本的 API
设备现在可以从操作系统的未来版本进行恢复。当用户升级手机之后将手机丢失或损坏时,此功能特别有用。
如果 OEM 修改其中任何系统软件包(Android、系统、设置)的备份代理,那么这些代理应该执行在较新版平台中进行的备份集恢复,而不会出现崩溃并至少恢复一些数据。
建议您使用验证程序检查给定备份数据是否存在无效值,并仅恢复有效数据(如 core/java/android/provider/SettingsValidators.java
)。
此功能在默认情况下处于启用状态。可以通过 Settings.Global.OVERRIDE_SETTINGS_PROVIDER_RESTORE_ANY_VERSION
停止支持 SettingsBackupAgent(用于从未来版本进行恢复)。除非设备制造商扩展了 ROM 中包含的某个备份代理(或添加了自定义代理),否则无需进行任何额外的实现。
此功能允许系统从平台的未来版本进行恢复;不过,恢复后的数据可能会不完整,这一点是可以理解的。以下说明适用于下述备份代理:
PackageManagerBackupAgent:通过格式版本控制为未来版本的备份数据提供支持;此处的扩展程序必须与当前的恢复代码兼容,或遵循类中的指令(包括递增适当的常量)。
在 Android 9 及更高版本中,SystemBackupAgent 指定
restoreAnyVersion = false
。它不支持从更高版本的 API 进行恢复。在 Android 9 及更高版本中,SettingsBackupAgent 指定
restoreAnyVersion = true
。通过验证程序提供部分支持。如果目标操作系统中存在某项设置的验证程序,则可以从更高版本的 API 恢复该设置。添加任何设置都应附带该设置的验证程序。如需了解详情,请查看相关类。ROM 中包含的任何自定义备份代理都应做到以下两点:一旦备份数据格式发生不兼容的更改,就应递增其版本号;如果其代理未做好准备,无法根据未来版本的代码处理备份数据,则应确保
restoreAnyVersion = false
(默认值)。
企业
托管配置文件改进
托管配置文件用户体验更改使用户可以更轻松地识别、访问和控制托管配置文件。
暂停 OTA
新的 @SystemApi 允许设备所有者无限期地暂停 OTA 更新,包括安全更新。
性能
Health 2.0
Android 9 及更高版本引入了从 health@1.0 HAL 升级的主要版本 android.hardware.health
HAL 2.0。如需了解详情,请参阅以下页面:
APK 缓存解决方案
Android 9 及更高版本包含一个 APK 缓存解决方案,用于在支持 A/B 分区的设备上快速安装预加载应用。OEM 可以将预加载应用和热门应用放置在 APK 缓存中(对于采用 A/B 分区的新设备而言,这种缓存通常存储在空的 B 分区中),而且这样不会影响面向用户的任何数据空间。
配置文件引导的优化
Android 9 及更高版本支持在具有蓝图构建规则的原生 Android 模块上使用 Clang 的配置文件引导的优化 (PGO)。
预写式日志记录
SQLiteDatabase 的一种特殊模式称为兼容性预写日志记录 (WAL),它可让数据库使用 journal_mode=WAL
,同时保留每个数据库最多保持一个连接的行为。
启动时间
优化启动时间中描述了 Android 9 对启动时间优化的更改。
电源
后台限制
Android 9 及更高版本包含后台限制,可让用户限制可能会耗尽电池电量的应用。系统还可能建议停用对设备的运行状况产生负面影响的应用。
无电池设备
Android 9 能够比以前的版本更得体地处理无电池设备。Android 9 移除了针对无电池设备的代码,这些代码在默认情况下会假装电池存在、已充满电且运行状况良好(其热敏电阻的温度读数正常)。