Android 9 版本说明

Android 9 现已发布!本页面总结了此版本中的主要功能,并提供了其他信息的链接(若有)。这些功能摘要按照功能文档在该网站上的位置进行整理。有关章节迁移和重命名的指南,请参阅 2018 年 8 月网站更新

版本

常规系统映像 (GSI)

常规系统映像 (GSI) 介绍了适用于 Android 9 的常规系统映像 (GSI),并详细介绍了适用于搭载 Android 9 设备的 GSI 与适用于升级到 Android 9 设备的 GSI 之间的差异。

架构

硬件抽象层

HIDL 框架向后兼容性

HIDL 框架向后兼容性验证是一种验证框架向后兼容性的方法。

动态可用的 HAL

动态可用的 HAL 支持在不使用或不需要 Android 硬件子系统时动态关闭这些子系统。

HIDL

HIDL 内存块

HIDL 内存块是一个在 hidl_memoryHIDL @1.0::IAllocatorHIDL @1.0::IMapper 上编译的抽象层。它专为具有多个内存块以共享单个内存堆的 HIDL 服务而设计。

设备树叠加层

经过压缩的叠加层

此版本增加了以下支持:在使用第 1 版设备树表格表头时,在设备树 Blob 叠加层 (DTBO) 映像中使用经过压缩的叠加层

DTO 更新

此版本要求在将统一设备树 blob 传递给内核之前,引导加载程序不得修改设备树叠加层中定义的属性。

DTO 映像标头版本控制

此版本在 DTBO 映像标头中引入了新的版本字段

DTBO 验证

此版本需要 DTBO 分区。要向 SoC DT 中添加节点或更改其中的属性,引导加载程序必须在 SoC DT 之上动态叠加特定于设备的 DT。有关详情请参阅编译和验证

内核合规性

此版本对影响内核、其接口和使用 DTBO 的要求进行了更改。有关详情请参阅以下页面:

供应商 NDK

VNDK:设计

要了解此版本中的 VNDK 设计变更,请参阅以下页面:

VNDK:ABI 检查工具

ABI 稳定性描述了确保对供应商原生开发套件 (VNDK) 中的库所做的更改保持应用二进制接口 (ABI) 合规性的过程。

VNDK 快照

即使系统和供应商映像是从不同版本的 Android 编译的,系统映像也可以使用 VNDK 快照为供应商映像提供正确的 VNDK 库。

供应商接口对象

供应商接口对象一节中的以下页面描述了此版本中的供应商接口对象更新:

HIDL 弃用时间表

以下页面介绍了 Android 如何弃用和移除 HIDL HAL:

引导加载程序

产品分区

此版本支持使用 Android 编译系统编译 /product partitions 分区。以前,Android 8.x 强制将系统芯片 (SoC) 特定组件从 /system 分区分离到 /vendor 分区,而没有为从 Android 编译系统编译的 OEM 特定组件提供专用空间。

规范启动原因合规性

规范启动原因描述了对此版本中引导加载程序启动原因规范的更改。

系统作为 Root

搭载此版本的所有设备均必须使用 system-as-root,它会将 ramdisk.img 合并到 system.img(亦称为 no-ramdisk),而后者又作为 rootfs 装载。

启动映像标头版本控制

从此版本开始,启动映像标头包含一个表明标头版本的字段。引导加载程序必须检查此标头版本字段并相应地解析标头。

在恢复映像中使用 DTBO

为了防止由于非 A/B 设备上的恢复映像与 DTBO 分区之间不匹配而导致 OTA 失败,恢复映像必须包含来自 DTBO 映像的信息

显示

刘海屏

刘海屏使应用开发者能够打造沉浸式全面屏体验,同时继续为设备前侧的重要传感器留出空间。

旋转建议

此版本中的屏幕旋转行为更新包括支持一种面向用户的控件,使用户能够横向或纵向固定屏幕旋转。

同步应用转换

同步应用转换允许使用新的应用转换动画。

文本分类(原 TEXTCLASSIFIER)

此版本引入了文本分类器服务,现在是实现文本分类的推荐方法,也是默认服务实现。

宽色域色彩

此版本引入了对宽色域色彩的支持,包括:

  • 高动态范围 (HDR)
  • 处理 BT2020 颜色空间中的内容,但不作为最终目标数据空间

要使用宽色域色彩,设备的完整显示堆栈(屏幕、硬件合成器、GPU 等)必须支持宽色域色彩或缓冲区格式。即使硬件支持宽色域色彩,设备也不需要声称支持宽色域内容。但是,应启用宽色域色彩以充分利用硬件。为了避免不一致的视觉体验,在运行时不应关闭宽色域色彩。

兼容性

Android 兼容性定义文档 (CDD)

Android 9 兼容性定义文档基于之前版本进行了迭代更新,包括有关新功能的更新以及针对之前所发布功能的要求做出的更改。

设置

更好的应用微件

Android 应用微件框架现在可让您更清楚地了解用户交互情况,特别是在用户删除或手动添加微件时。Launcher3 默认自带此功能。

制造商需要更新启动器应用(随设备提供)才能支持此功能(如果不是基于 Launcher3)。原始设备制造商 (OEM) 需要在其默认的启动器中支持新的 widgetFeatures API

除非启动器按预期实现此 API,否则此 API 本身并不能保证它可端到端正常运行。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 测试。

兼容性测试套件 (CTS)

CTS 下载

支持 Android 9 的新 CTS 包已上传到 CTS 下载页面。随附测试的源代码可以与开放源代码树中的 android-cts-9.0_r1 标记同步。

CTS 选项

对于 Android 9,CTS v2 添加了以下命令和参数

  • run retry - 重新尝试运行在以前的会话中失败或未执行的所有测试。
  • ‘--shard-count - 将 CTS 运行分为指定数量的独立块,以便在多台设备上并行运行。

此外,先前未记录的命令“--retry-type”已添加到同一 CTS v2 控制台命令参考中。

安全元件

安全元件服务可检查平台支持的全局安全元件(实质上是检查设备是否具有 SE HAL 实现,以及有的话,究竟具有多少 SE HAL 实现)。您可以根据这项服务测试相关 API 和底层安全元件实现。

传感器融合盒

传感器融合盒用于 CameraITS sensor_fusion 测试和多摄像头同步测试。它可以为衡量 Android 手机的摄像头和其他传感器的时间戳准确度提供一致的测试环境。有关详情请参阅这些页面:

宽视野盒装 ITS

宽视野盒装 ITS 是相机图像测试套件 (ITS) 中的一种自动化系统,旨在测试宽视野 (WFoV) 和常规视野 (RFoV) 相机系统。

供应商测试套件

主机控制器架构

VTS 主机控制器架构描述了与其基于云的测试提供服务相集成的 VTS 测试框架的架构。

服务名称感知型 HAL 测试

VTS 服务名称感知型 HAL 测试支持根据运行供应商测试套件 (VTS) 测试的设备来获取指定 HAL 实例的服务名称。

HAL 可测试性检查

VTS HAL 可测试性检查包括一种利用设备配置识别应针对相应设备目标跳过哪些 VTS 测试的运行时方法。

自动化测试基础架构

自动化测试基础架构页面介绍了在搭载 AOSP 常规系统映像 (GSI) 的合作伙伴设备上自动运行供应商测试套件 (VTS)、CTS 或其他测试的新 VTS 基础架构。

调试

高级遥测技术

在 Android 中,遥测是自动收集有关设备、Android 系统和应用的使用情况与诊断信息的过程。在以前的 Android 版本中,遥测堆栈受到限制,并且无法捕获识别和解决系统可靠性以及设备或应用问题所需的信息。即使并非不可能,这也使得确定问题的根本原因变得很困难。

Android 9 包含一个新的遥测功能 statsd,它通过更快地收集更加有用的数据解决了这一缺陷。statsd 可收集应用使用情况、电池和进程统计信息以及崩溃数据。这些数据会经过分析并用于改进产品、硬件和服务。

更多详情请参阅 frameworks/base/cmds/statsd/

安全功能

应用签名

APK 签名方案 v3 是新的 APK 签名方案,它支持 APK 密钥轮换。

生物识别支持

Android 9 包含一个 BiometricPrompt API,应用可以使用该 API 采用与设备和模态无关的方式集成生物识别身份验证支持。要详细了解如何集成生物识别堆栈以包含 BiometricPrompt,请参阅生物识别

动态分析

Android 9 支持更多漏洞攻击缓解和分析工具

控制流完整性 (CFI)

控制流完整性 (CFI) 是一种安全机制,它不允许更改已编译二进制文件的原始控制流图,因而执行此类攻击变得异常困难。

内核 CFI

除了默认启用的系统 CFI 之外,此版本还支持内核控制流完整性

加密

文件级加密

文件级加密已更新,可用于可合并的存储设备。对于新设备,我们建议使用文件级加密而不是全盘加密。

元数据加密

此版本引入了对元数据加密(如果存在硬件支持)的支持。对于元数据加密,启动时出现的单个密钥会加密未通过文件级加密进行加密的任何内容。

密钥存储区

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.imgboot.img 的绑定,Keymaster 4 将密钥版本绑定模式更改为每个分区都具有单独的补丁程序级别。这允许每个分区独立更新,同时仍提供回滚保护。

Android 受保护的确认

搭载 Android 9 的受支持设备使开发者能够使用 Android Protected Confirmation API。通过使用这个新 API,应用可以使用 ConfirmationPrompt 实例向用户显示提示,要求他们批准一条简短声明。此声明允许应用重新确认用户希望完成敏感交易,例如进行付款。

SELinux

按应用划分的 SELinux 沙盒

应用沙盒提供了新的保护和测试用例,以确保面向 Android 9 及更高版本的所有非特权应用均可运行单独的 SELinux 沙盒。

Treble SELinux 变更

SELinux 一节的几个页面记录了此版本对 Treble SELinux 的更新。

Vendor_init

供应商初始化描述了以下更新:通过使用单独的 SELinux 域,利用供应商特定的权限运行 /vendor 命令,从而关闭 Treble 系统/供应商拆分中的 init 进程访问孔。

系统属性

Android 9 通过对系统属性共享进行限制,阻止在不必要的情况下在 systemvendor 分区之间共享系统属性,同时提供了一种确保在共享系统属性之间保持一致性的方法。

SELinux 属性测试

Android 9 包含新的编译时测试,可确保特定位置的所有文件都具有适当的属性。例如,sysfs 中的所有文件都具有所需的 sysfs_type 属性。

音频

高解析度音效

高解析度音效的更新包括将音效处理从 int16 转换为浮动格式,并增加了同步客户端输出轨道、最大客户端/服务器内存和总混合轨道。

摄像头

外接 USB 摄像头

此版本支持使用采用标准 Android Camera2 API 和相机 HIDL 接口的即插即用 USB 摄像头(即网络摄像头)。

运动追踪

摄像头设备可以通告运动跟踪功能

多摄像头支持

多摄像头支持通过一个新的逻辑摄像头设备(由两个或更多个指向同一方向的物理摄像头设备组成)引入了对多摄像头设备的 API 支持。

会话参数

作为拍摄会话初始化阶段的一部分,实现会话参数可以通过使摄像头客户端主动配置成本高的请求参数的子集来减少延迟。

单一生产方、多个消费方缓冲区

单一生产方、多个消费方摄像头缓冲区传输是一组新方法,允许摄像头客户端在拍摄会话处于活动状态且摄像头流式传输正在进行时动态地添加和移除输出 Surface。

连接

通话和短信

实现流量套餐

此版本改善了对使用 SubcriptionPlan API 实现流量套餐的运营商的支持。

第三方通话应用

此版本提供了允许第三方通话应用处理并发传入的运营商呼叫,并在系统呼叫日志中记录呼叫的 API。

运营商

运营商识别号

在 Android 9 中,AOSP 添加了运营商 ID 数据库以帮助识别运营商。该数据库通过提供识别运营商的通用方法,最大限度地减少了重复逻辑和分散的应用体验。

eSIM 卡

嵌入式 SIM 卡(eSIM 卡或 eUICC 卡)是允许移动用户在没有物理 SIM 卡的情况下,下载运营商配置文件并激活运营商服务的最新技术。在此版本中,Android 框架提供了用于访问 eSIM 卡和管理 eSIM 卡上的订阅配置文件的标准 API。有关详情请参阅:

对 IMS 设置的多 SIM 卡支持

此版本改进了 IMS 用户设置。用户可以按单个订阅设置 LTE 语音通话 (VoLTE)、视频通话和 WLAN 通话,而不是在所有订阅中共享这些设置。

SIM 状态广播

在此版本中,Intent.ACTION_SIM_STATE_CHANGED 已弃用,并添加了两个用于卡状态和卡应用状态的单独广播:TelephonyManager.ACTION_SIM_CARD_STATE_CHANGEDTelephonyManager.ACTION_SIM_APPLICATION_STATE_CHANGED

通过此项变更,仅需要知道卡是否存在的接收器不再需要监听应用状态改变,并且仅需要知道卡应用是否准备好的接收器不需要监听卡状态改变。

这两个新的广播均 @SystemApis 并且不具有粘性。只有具有 READ_PRIVILEGED_PHONE_STATE 权限的接收器可以接收广播。

当用户解锁设备时,intent 不会重新广播。依赖于在用户解锁之前发送的广播的接收器必须是 directBootAware,或者必须在用户解锁后查询状态。可以使用 TelephonyManager 中的相应 API 查询状态:getSimCardState()getSimApplicationState()

WLAN

运营商 WLAN

运营商 WLAN 允许设备自动连接到运营商实现的 WLAN 网络。在人群拥挤或信号不足的区域(如体育场或地铁站),运营商 WLAN 可用于改善用户的连接体验和分载流量。

随机分配 MAC 地址

随机分配 MAC 地址允许设备在探测新网络时使用随机 MAC 地址,而当前未与网络相关联。在此版本中,可以启用相关开发者选项,使设备在连接到 WLAN 网络时使用随机分配的 MAC 地址。

自动开启 WLAN

借助自动开启 WLAN 功能,只要设备靠近已保存且接收信号强度指示器 (RSSI) 相对较高的 WLAN 网络,便会自动重新启动 WLAN。

WLAN 往返时间 (RTT)

WLAN 往返时间 (RTT) 允许设备测量与其他支持设备的距离:无论是接入点 (AP) 还是 WLAN 感知对等设备(如果设备支持 WLAN 感知)。此功能基于 IEEE 802.11mc 协议,使应用能够使用准确性更高的定位功能和增强的感知功能。

WLAN 评分改进

经过改进的 WLAN 评分模型可以快速准确地确定设备何时应退出连接的 WLAN 网络或进入新的 WLAN 网络。这些模型通过避免连接缺口为用户提供可靠而无缝的体验。

您应该查看并调整 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 并发

WLAN STA/AP 并发可以让设备同时在电台 (STA) 和接入点 (AP) 模式下运行。对于支持同步双频段 (DBS) 的设备,此功能开启了新功能,例如,当用户想要启用热点 (softAP) 时不会中断 STA WLAN。

WiFiStateMachine 改进

WifiStateMachine 是用于控制 WLAN 活动、协调用户输入(操作模式:热点、扫描、连接或关闭)以及控制 WLAN 网络操作(例如,扫描、连接)的主类。

在此版本中,WifiStateMachine 的 WLAN 框架代码和实现经过了重新设计,减小了代码大小,使 WLAN 控制逻辑更易于遵循,改进了控制粒度并提高了单元测试的覆盖范围和质量。

概括地讲,WifiStateMachine 允许 WLAN 处于以下四种状态之一:

  1. 客户端模式(可以连接和扫描)
  2. 仅扫描模式
  3. SoftAP 模式(WLAN 热点)
  4. 已停用(WLAN 完全关闭)

每种 WLAN 模式对运行服务都有不同的要求,并且应以一致的方式设置,从而只处理与其操作相关的事件。新实现将代码限制为与该模式相关的事件,缩短了调试时间并降低了由于复杂性而引入新错误的风险。除了对模式功能的显式处理之外,线程管理以一致的方式处理,并且消除了使用异步信道作为同步机制这一行为。

WLAN 权限更新

在此版本中,系统会动态检查 CHANGE_WIFI_STATE 应用权限,并且用户可以关闭该权限。用户可以通过设置 > 应用和通知 > 特殊应用权限 > WLAN 控制中的特殊设置页面停用任何应用的权限。

应用必须能够处理未授予 CHANGE_WIFI_STATE 权限的情况。

要验证此行为,请运行 roboelectric 和手动测试。

在以下位置运行 roboelectric 测试:/packages/apps/Settings/tests/robotests/src/com/android/settings/wifi/AppStateChangeWifiStateBridgeTest.java

对于手动测试:

  1. 依次转到“设置”>“应用和通知”>“特殊应用权限”>“WLAN 控制”。
  2. 选择并关闭应用的权限。
  3. 验证应用是否可以处理未授予 CHANGE_WIFI_STATE 权限的情形。

WPS 弃用

由于安全问题,此版本已弃用和停用 WiFiManager WLAN 保护设置 (WPS)。但是,WiFiDirect 仍然在 WPA 客户端中使用 WPS。

图形

实现

Vulkan 1.1 API

此版本支持实现 Vulkan 1.1 图形 API

用于窗口转换跟踪的 WinScope 工具

此版本引入了用于跟踪窗口转换的 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() API 传递硬件型号信息。设备制造商应与其 GNSS HAL 提供商合作,尽可能提供此信息。

权限

配置自主访问控制 (DAC) 更新

配置自主访问控制 (DAC) 更新了用于扩展文件系统功能的 Android ID (AID) 机制。

更新特权应用权限白名单

从 Android 9 开始,如果有权限应该被拒绝,请修改 XML 以使用 deny-permission 标记,而不是先前版本中使用的 permission 标记。

数据

带宽估测改进

Android 9 改进了对带宽估测的支持。如果 Android 应用知道可用的数据带宽,则可以更好地决定用于视频通话和视频串流的分辨率。

在运行 Android 6.0 及更高版本的设备上,想对移动网络进行带宽估算的调用者会调用 ConnectivityManager.requestBandwidthUpdate(),而且框架可以提供下行链路带宽估算值。

但是,在运行 Android 9 或更高版本的设备上,当估算的带宽发生显著变化时,onNetworkCapabilitiesChanged() callback 会自动触发,并且调用 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:通过格式版本控制为未来版本的备份数据提供支持;此处的扩展程序必须与当前的恢复代码兼容,或遵循类中的指令(包括递增适当的常量)。

  • SystemBackupAgent:在此版本及更高版本的 Android 中,restoreAnyVersion = false。不支持从更高版本的 API 进行恢复。

  • SettingsBackupAgent:从此版本开始,restoreAnyVersion = true。 通过验证程序提供部分支持。如果目标操作系统中存在某项设置的验证程序,则可以从更高版本的 API 恢复该设置。添加任何设置都应附带该设置的验证程序。请查看相关类以了解详情。

  • ROM 中包含的任何自定义备份代理都应在备份数据格式发生不兼容的更改时递增其版本号,并在其代理尚未准备好根据未来版本的代码处理备份数据时确保 restoreAnyVersion = false(默认值)。

企业

托管配置文件改进

托管配置文件用户体验更改使用户可以更轻松地识别、访问和控制托管配置文件。

暂停 OTA

新的 @SystemApi 允许设备所有者无限期地暂停 OTA 更新,包括安全更新。

性能

Health 2.0

此版本引入了从 health@1.0 HAL 升级的主要版本 android.hardware.health HAL 2.0。有关详情请参阅以下页面:

APK 缓存

Android 9 包含一个 APK 缓存解决方案,以在支持 A/B 分区的设备上快速安装预加载应用。OEM 可以将预加载和热门应用放置在新 A/B 分区设备上的 APK 缓存(存储在通常为空的 B 分区)中,而且这种操作不会对面向用户的任何数据空间产生影响。

配置文件引导的优化 (PGO)

此版本支持在具有蓝图编译规则的原生 Android 模块上使用 Clang 的配置文件引导优化 (PGO)。

预写日志

应用的兼容性 WAL(预写日志记录)是 SQLiteDatabase 的一种新的特殊模式,称为兼容性 WAL(预写日志记录),它可让数据库使用 journal_mode=WAL,同时保留每个数据库最多保持一个连接的行为。

启动时间

优化启动时间描述了对启动时优化的更改。

电源

后台限制

Android 9 引入了后台限制,允许用户限制可能会耗尽设备电池电量的应用。系统还可能建议停用其检测到对设备的运行状况产生负面影响的应用。

无电池设备

Android 9 能够比以前的版本更得体地处理无电池设备。Android 9 删除了一些以前的无电池设备代码,这些代码在默认情况下假装电池存在,充电率为 100%,并且运行状况良好(热敏电阻的温度读数正常)。