Android 10 版本说明

本页面总结了 Android 10 版本的主要功能,并提供了指向其他信息的链接。这些功能摘要根据功能在本网站上的文档位置进行组织。

构建

java_sdk_library

Android 10 引入了 java_sdk_library,这是一项新的构建规则,用于修复共享 Java 库的兼容性问题。设备制造商可以将此机制用于他们自己的共享 Java 库,以保持其 API 的向后兼容性。

架构

模块化系统组件

Android 10 将一些 Android 系统组件模块化,并使它们能够在正常的 Android 发布周期之外进行更新。一些模块包括

硬件抽象层 (HAL)

Android 10 增加了对 HAL 的支持,使其在没有客户端时自动关闭

内核

ABI

Android 10 包含对新的 ABI 监控实用程序的支持,以帮助比较、跟踪和缓解影响内核模块兼容性的内核 ABI 更改。

Android 10 还引入了基于符号的 ABI 用法检查器。该检查器可以在构建时检测过时的预构建二进制文件,以便共享库开发人员可以知道哪些预构建二进制文件可能会因其更改而损坏,以及哪些预构建二进制文件必须重建。

Android Live-Lock Daemon

Android 10 包含 Android Live-Lock Daemon (llkd),它旨在捕获和缓解内核死锁。

ARM64 上的 vDSO32

Android 10 支持在 64 位内核上使用 vDSO32,这可将电池续航时间延长 0.4%,并带来其他性能改进。

早期挂载的分区的 fstab 条目

Android 10 要求设备使用第一个阶段 ramdisk 中的 fstab 文件为早期挂载的分区指定 fstab 条目。

HIDL

卸载 BroadcastQueue

Android 10 在现有的后台前台队列中增加了一个新的卸载 BroadcastQueue。卸载队列与后台队列具有相同的优先级和超时行为。为了防止阻塞后台队列(其中可能发生更多有趣或用户可见的广播),卸载队列处理 BOOT_COMPLETED 广播,许多应用都在侦听该广播,并且可能需要很长时间才能完成。卸载队列目前仅处理 BOOT_COMPLETED 广播,但将来可能会处理其他长时间广播。

SystemSuspend 服务

Android 10 使用 SystemSuspend HIDL 服务替换了 libsuspend 中负责启动系统挂起的线程。此实现提供与以前版本相同的功能,同时利用了 Android HIDL 基础架构的优势。

HIDL 中的 safe_union

Android 10 在 HIDL 中引入了 safe_union,这是一种显式标记的联合类型。

配置

ConfigStore HAL

Android 10 弃用了 ConfigStore HAL,原因是内存消耗高且难以使用,并用 系统属性替换了该 HAL。

配置文件架构 API

Android 平台包含大量 XML 文件,用于存储配置数据。许多 XML 文件位于 vendor 分区中,但它们在 system 分区中读取。在这种情况下,XML 文件的架构充当跨两个分区的接口,因此必须显式指定架构,并且必须以向后兼容的方式发展。在 Android 10 之前,该平台没有提供强制指定和使用 XML 架构或防止架构中不兼容更改的机制。Android 10 提供了这种机制,称为配置文件架构 API

作为 API 的系统属性

跨分区访问的系统属性sysprop 描述文件中被架构化,并且用于访问属性的 API 被生成为 C++ 的具体函数和 Java 的类。

供应商接口 (VINTF) 对象

VINTF

Android 10 中对 VINTF 的更改包括

  • 弃用 AVB 版本标记
  • 在 OTA 软件包中添加内核信息
  • 正式构建 ODM 清单
  • 添加产品兼容性矩阵
  • 在构建系统中将清单条目与 HAL 模块关联

引导加载程序

Ramdisk

在 Android 10 中,根文件系统不再包含在 ramdisk.img 中,而是合并到 system.img 中。

构建 ODM 分区

Android 10 包括支持使用 Android 构建系统构建 odm 分区。您可以为自定义使用单独的 /odm 分区,这使您可以为多个硬件 SKU 使用单个供应商映像。这使原始设计制造商 (ODM) 可以根据其特定设备(其主板)自定义片上系统 (SoC) 供应商的板级支持软件包 (BSP)。他们可以为主板特定组件、主板特定守护程序或他们自己的硬件抽象层 (HAL) 功能实现内核模块。他们也可以替换或自定义 SoC 组件。

启动映像标头版本控制

Android 10 将启动映像标头更新为版本 2,其中包括一个用于存储设备树 Blob (DTB) 映像的部分。Android 10 VTS 测试验证所有使用 Android 10 启动的设备都使用启动映像标头版本 2,并将有效的 DTB 映像作为启动/恢复映像的一部分包含在内。

非 A/B 设备的恢复映像

在 Android 9 及更高版本中,设备的恢复映像必须包含来自叠加层映像的信息。设备制造商可以使用设备树或高级配置和电源接口 (ACPI) 来描述所有不可发现的设备。Android 10 及更高版本包括支持使用 ACPI 而不是设备树 Blob 进行叠加 (DTBO) 的架构。

稳定 AIDL

Android 10 增加了对稳定Android 接口定义语言 (AIDL)的支持,这是一种跟踪 AIDL 接口提供的应用程序编程接口 (API)/应用程序二进制接口 (ABI) 的新方法。

将 fastboot 移至用户空间

Android 10 通过将 fastboot 实现从引导加载程序重新定位到用户空间,增加了对可调整大小的分区的支持。

显示

HDR 视频播放

Android 10 支持 HDR10、VP9 和 HDR10+ 播放

文本分类

文本分类使用机器学习技术来帮助开发者对文本进行分类。Android 10 为 TextClassifier API 引入了两种方法:suggestConversationActionsdetectLanguagesuggestConversationActions 方法从给定的对话生成建议的回复和操作,detectLanguage 方法检测文本的语言。

支持 Zawgyi 字体渲染

Zawgyi 是缅甸最流行的字体。Android 9 及更低版本不支持渲染 Zawgyi,因为它不符合 Unicode。Android 10 通过包含能够同时渲染 Unicode 缅甸语和 Zawgyi 的 Unicode 字体来解决此问题。在搭载 Android 10 的设备上支持 Zawgyi 字体渲染不需要任何实现工作。如果您的设备有自定义实现来支持 Zawgyi,您可以

  • 恢复这些更改并使用平台支持的方法。
  • 在您的系统中保留常见的 Zawgyi 字体,并在您的 fonts.xml 中使用语言区域代码 my-qaag。如需了解详情,请参阅关于 Zawgyi (Qaag) 的 Unicode CLDR 版本说明

隐藏应用图标的限制

Android 10 限制了应用隐藏其启动器图标的功能。如果某个应用没有启用启动器 Activity,系统会在启动器中显示合成 Activity;此合成 Activity 表示应用在系统设置中的详情页面。

如需详细了解用于显示应用图标的逻辑(包括不显示应用图标的应用类型),请参阅 API 参考中 getActivityList() 的文档。

设置

为了提高无障碍功能,Android 10 包括用户可自定义的超时设置。API 和设置更改随 Android 10 一起提供。如果您自定义设置,请确保支持此功能。如果您的设备上有超时的 UI 元素,请在这些元素上使用 timeouts API。如需了解详情,请参阅 Android 开发者无障碍功能指南

兼容性

Android 兼容性定义文档 (CDD)

Android 10 兼容性定义文档以前的版本的基础上进行了迭代,更新了新功能,并更改了先前发布的功能的要求。

测试

兼容性测试套件 (CTS)

Android CTS 有一个单独的版本说明页面,其中列出了 Android 10 的许多重要更改。

CTS 下载

支持 Android 10 的 CTS 软件包可在CTS 下载页面上获取。包含的测试的源代码可以使用开源树中的 android-cts-10_r1 标记进行同步。

CTS shim APEX

Android 10 引入了一个名为 CtsShimApex 的软件包,必须在设备上预安装该软件包才能为 APEX 管理编写 CTS 测试。

测试工具模式

CTS 测试工具模式可帮助开发者自动化设备或设备组的测试。

即时应用模式

从 Android 10 开始,CTS 在即时应用模式下运行,这意味着将测试 APK 作为即时应用安装并运行测试。

除了即时应用的 CTS 模式外,Android 10 还包括即时应用的 CTS 验证程序

CTS 验证程序专业音频测试

Android 10 为专业音频合规性添加了 CTS 验证程序测试。

CTS 验证程序 MIDI 测试

在 Android 10 中,CTS 验证程序 MIDI 测试使用 USB MIDI 接口、蓝牙 MIDI 接口和虚拟 MIDI 设备路径测试 MIDI 功能。

CTS 测试解读

Android 10 更新了解读 CTS 结果的机制。

供应商测试套件 (VTS)

使用调试 ramdisk 进行 VTS 测试

在 Android 10 中,用于运行 CTS-on-GSI/VTS 合规性测试的通用系统映像 (GSI) 从 userdebug 更改为用户构建类型,因为 GSI 是发布签名的。但是,在用户构建中无法使用 adb root 命令,该命令为受测 Android 设备提供主机 root 权限。这是一个问题,因为 VTS 需要 adb root 才能运行。

引入调试 ramdisk是为了在设备解锁的情况下使 adb root 成为可能。这通过重用相同的用户构建 system.img(GSI 或 OEM 的 system.img)简化了测试流程。

硬件合成器验证

Android 10 通过 IComposerClient.hal 中的 readback 接口为硬件合成器验证添加了新的 VTS 测试类。如果供应商未实现 readback,则测试会自动通过。

调试

使用不同的类加载器加载共享库

在 Android 9 及更低版本中,应用在其应用的类加载器中加载其链接的 Java 共享库。在 Android 10 中,框架使用与应用的类加载器不同的类加载器来加载通过 uses-libraryuses-static-library 链接的 Java 共享库。

一般来说,应用不应依赖于使用特定的类加载器,因此此更改不应破坏应用行为。但是,如果应用依赖于使用单个类加载器,则该行为会被破坏。此外,仍然支持同一软件包中类的软件包私有可见性,但在共享库中不受支持。

设备制造商在测试运行 Android 10 的设备时可能会遇到应用兼容性问题。

安全功能

如需更完整地了解仅与安全和隐私相关的增强功能列表,请参阅 Android 10 安全和隐私增强功能页面。

人脸身份验证

人脸身份验证允许用户只需查看设备正面即可解锁设备。Android 10 增加了对新人脸身份验证堆栈的支持,该堆栈可以安全地处理相机帧,在受支持的硬件上进行人脸身份验证期间保持安全性和隐私。Android 10 还为符合安全要求的实现提供了一种简单的方法,以启用应用集成来处理在线银行或其他服务等交易。

扩展访问权限

信任代理(三级身份验证机制(如智能锁)使用的底层机制)在 Android 10 中只能扩展解锁。信任代理不再能够解锁已锁定的设备,并且只能将设备保持解锁状态最多四个小时。

加密

OEMCrypto

Android 10 使用 OEMCrypto API 版本 15。

测试

BoundsSanitizer

Android 10 在蓝牙和编解码器中部署了 BoundsSanitizer (BoundSan)。BoundSan 使用 UBSan 的边界清理器。此缓解措施在每个模块级别启用。它有助于保持 Android 关键组件的安全性,不应禁用。BoundSan 在以下编解码器中启用

  • libFLAC
  • libavcdec
  • libavcenc
  • libhevcdec
  • libmpeg2
  • libopus
  • libvpx
  • libspeexresampler
  • libvorbisidec
  • libaac
  • libxaac

整数溢出清理

Android 10 在软件编解码器中启用了整数溢出清理 (IntSan)。确保对于设备硬件中不支持的任何编解码器,播放性能都是可接受的。IntSan 在以下编解码器中启用

  • libFLAC
  • libavcdec
  • libavcenc
  • libhevcdec
  • libmpeg2
  • libopus
  • libvpx
  • libspeexresampler
  • libvorbisidec

仅执行内存

默认情况下,AArch64 系统二进制文件的可执行代码段被标记为仅执行(不可读),作为针对即时代码重用攻击的强化缓解措施。将数据和代码混合在一起的代码以及有意检查这些段的代码(在未首先将内存段重新映射为可读的情况下)不再起作用。如果目标 SDK 为 Android 10(API 级别 29 或更高版本)的应用尝试读取内存中启用了仅执行内存 (XOM)的系统库的代码段,而未先将该段标记为可读,则会受到影响。

Scudo

Scudo 是一种动态用户模式内存分配器,旨在提高针对堆相关漏洞的弹性。它提供标准 C 分配和释放原语,以及 C++ 原语。

ShadowCallStack

ShadowCallStack (SCS) 是一种 LLVM 检测模式,通过将函数的返回地址保存到非叶函数的函数 prolog 中单独分配的 ShadowCallStack 实例,并在函数 epilog 中从 ShadowCallStack 实例加载返回地址,来防止返回地址被覆盖(如堆栈缓冲区溢出)。

音频

音频 HAL

Android 10 包括以下针对音频 HAL的新功能。

  • AudioSource
  • AudioFormat
  • AudioChannelMask

为音频 HAL 和子系统实现添加了其他要求。

预处理效果

Android 提供预处理效果,例如声学回声消除、自动增益控制和噪声抑制。Android 10 包括使用 VOICE_COMMUNICATION 捕获的新要求。

音频策略管理器

Android 10 对音频策略管理器进行了重大重构,以提供更大的灵活性来支持复杂的汽车用例。

高分辨率音频

Android 10 包括以下针对高分辨率音频的改进。

  • 浮点支持
  • 192 kHz 频率支持
  • 八声道支持
  • 包含时序信息

并发捕获

Android 10 改进了需要同时发生多个活动音频捕获的并发捕获用户体验。

AudioPlaybackCapture

Android 10 包含一个新的 API,名为 AudioPlaybackCapture,它使应用能够复制其他应用正在播放的音频。此功能类似于屏幕捕获,但用于音频。主要用例是使流媒体应用能够捕获游戏正在播放的音频。

捕获 API 不会影响音频被捕获的应用的延迟。

MIDI

Android 10 使用 AMidi NDK API,使将使用 MIDI 的专业音频应用移植到 Android 平台变得更加容易。

相机

如需了解 Android 10 中引入的相机 API、相机 HAL 和相机模块的更改摘要,请参阅 Android 10 相机更新

相机框架隐私改进

Android 10 为相机框架引入了隐私增强功能。为了避免在未经用户同意的情况下在 CameraCharacteristics 中公开可能敏感的静态相机信息,应用必须获得 CAMERA 权限才能使用 getCameraCharacteristics 方法检索带有隐私敏感标记的静态元数据。

要获取需要 CAMERA 权限的相机特性键的列表,请调用 getKeysNeedingPermission 方法。

会话重新配置查询

Android 10 增加了会话重新配置查询功能,该功能允许通过更好地控制内部会话参数重新配置逻辑来提高性能。

相机 HAL3 缓冲区管理 API

Android 10 引入了可选的相机 HAL3 缓冲区管理 API,这些 API 允许您实现缓冲区管理逻辑,以在相机 HAL 实现中实现不同的内存和捕获延迟权衡。

相机 HAL 动态物理相机切换

Android 10 引入了一个动态元数据标记 ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID,它指示逻辑相机设备的活动底层物理相机。如需了解详情,请参阅多摄像头支持

支持隐藏物理相机

在 Android 10 中,相机 HAL 可以减少应用可以直接打开的物理相机的数量。如需了解更多详情,请参阅多摄像头支持

Camera2 VNDK API

在 Android 10 中,供应商模块可以通过两个新的标准 HIDL 接口访问和控制相机设备:android.frameworks.cameraservice.service@2.0android.frameworks.cameraservice.device@2.0。为了更方便地使用 HIDL 接口,Android 10 还引入了一个供应商可用的库 libcamera2_vendor。此库类似于 Camera NDK 库,只有一些小的修改。

流配置

Android 10 添加了允许相机供应商向相机客户端通告推荐的相机流的功能,并支持API 查询流组合

相机流组合要求

运行 Android 10 的设备不再需要支持具有物理子相机流的流组合。但是,相机 HAL 设备版本为 3.5 的运行 Android 10 的设备必须支持 isStreamCombinationSupported(),以允许应用查询是否支持包含物理流的流组合。

如需了解详情,请参阅多摄像头支持

HEIF 成像

Android 10 为高效图像文件格式 (HEIF) 图像提供原生相机支持,与 JPEG 图像相比,HEIF 图像具有更高的图像质量和更小的尺寸。设备必须具有 HEIC 或 HEVC 编码器才能支持 HEIF 图像。

单色相机

Android 10 为 Y8 流格式、单色和近红外 (NIR) 滤色器阵列静态元数据以及 单色相机DngCreator 函数提供了更多支持。

连接

通话和消息

紧急号码和紧急呼叫

Android 10 为紧急呼叫提供了改进的支持。在紧急情况下,支持 IRadio HAL v1.4 的设备可以使用从 SIM 卡、网络信号或 Android 数据库等来源检索的紧急号码发起紧急呼叫。号码可以根据警察、消防和救护车等紧急服务类别进行分类。

群组通话 API

群组通话 API 是 Android 9 中添加的 eMBMS API 的扩展。新的 API 定义了应用通过与 eMBMS 中间件软件包交互来加入蜂窝广播群组通话并在其上广播的标准。群组通话需要芯片组供应商、中间件供应商和蜂窝运营商的支持才能正常运行。开发者文档位于 developer.google.com

远程 SIM 功能

Android 10 引入了远程 SIM 功能,允许 Android 主机设备上的消息应用通过蓝牙等机制通过手机发送短信。如需了解详情,请参阅 getSubscriptionType 方法和 SUBSCRIPTION_TYPE_REMOTE_SIM 常量的参考文档。

多个 eSIM

在 Android 10 中,EuiccManager 类支持具有多个嵌入式 SIM 卡 (eSIM) 或 eUICC 的设备。

eSIM 更新

对于运行 Android 10 且支持 eSIM 的设备,必须定义不可移除的 eUICC 插槽 ID 数组。设备还必须支持 IRadio HAL v1.4 和 IRadioConfig HAL v1.2。如需了解详情,请参阅实现 eSIMHAL 要求

5G 非独立 (NSA)

Android 10 增加了对5G 非独立 (NSA)的支持。5G NSA 是一种 5G 网络解决方案,其中网络由现有的 4G 基础设施支持。在 Android 10 上,当设备连接到 5G 网络时,设备可以在状态栏上显示 5G 图标。

电话帐号建议

Android 10 引入了电话帐号建议服务,该服务允许在用户拨打电话时向其显示电话帐号建议。

运营商

迁移移动网络设置

Android 10 重新设计了移动网络设置 UI 代码,并将其从电话堆栈移动到设置堆栈。为了支持迁移的代码,请将以下移动网络设置配置值从 Android 资源更改为 CarrierConfig 资源

config_world_mode -> CarrierConfigManager#KEY_WORLD_MODE_ENABLED_BOOL

config_support_tdscdma -> CarrierConfigManager#KEY_SUPPORT_TDSCDMA_BOOL

config_support_tdscdma_roaming_on_networks -> CarrierConfigManager#KEY_SUPPORT_TDSCDMA_ROAMING_NETWORKS_STRING_ARRAY

config_enabled_lte -> CarrierConfigManager#KEY_LTE_ENABLED_BOOL

设备标识符

持久性设备标识符(IMEI/MEID、IMSI 和构建序列号)受特权权限保护,设备和个人资料所有者应用也被授予访问权限。由于 IMSI 和 SIM 卡序列号由运营商提供,因此具有运营商特权的应用软件包也被授予对这些标识符的访问权限。

WLAN

网络选择

Android 会持续评估已连接网络的质量,并评估可用网络的质量。Android 10 更新了选择和切换 WLAN 网络的算法和程序。

WLAN 首选网络卸载扫描

Android 10 在 WifiManager 中引入了一个名为 setDeviceMobilityState() 的可选 API 方法,该方法在设备静止不动时增加首选网络卸载 (PNO) 扫描之间的间隔,以减少功耗。

运营商 WLAN

在 Android 10 中,具有运营商 WLAN 功能的设备会自动连接到配置的运营商 WLAN 网络(具有公钥证书的网络)。

WLAN Easy Connect

在 Android 10 中,设备可以使用 WLAN Easy Connect,它使用 WLAN 联盟 (WFA) 引入的设备配置协议 (DPP) 来配置 WLAN 设备。

WLAN 低延迟模式

Android 10 引入了WLAN 低延迟模式,该模式将 WLAN 芯片配置为降低延迟。

更新的 DHCP 服务器

作为“IP 服务器”服务总括的一部分,dnsmasq 正在被删除。Android 10 使用一个单独的组件(主要用 Java 编写)替换了其 DHCPv4 服务器功能用途,以便更好地与 Java 框架控制平面集成。这提高了 DHCP 服务器的安全性和可更新性。如需了解更多详情,请参阅 packages/modules/NetworkStack/src/android/net/dhcp/DhcpServer.java

实施此更改无需任何操作:所有发布和升级到 Android 10 的设备默认使用 DhcpServer。如果您对 DHCP 服务器进行了自定义,则可以通过设置全局设置 tether_enable_legacy_dhcp_server=1 恢复到 Android 9 的行为。新的 DhcpServer 包含在网络组件模块中,因此对 DHCP 服务器功能的任何自定义都应向上游提交。

WPA3 和 Wi-Fi Enhanced Open

Android 10 添加了对 Wi-Fi Protected Access 3 (WPA3) 和 Wi-Fi Enhanced Open 安全标准的支持,以提供更好的隐私保护,并增强抵御已知攻击的稳健性。

Wi-Fi Direct

Wi-Fi Direct 也称为 Wi-Fi P2P,允许支持设备使用 Wi-Fi Direct 协议直接相互发现和连接,而无需互联网或蜂窝网络访问。

MAC 地址随机化增强功能

从 Android 10 开始,默认情况下为客户端模式、SoftAp 和 Wi-Fi Direct 启用 MAC 地址随机化。设备必须提供一个选项,以在系统 UI 中为每个 SSID 启用或停用 MAC 地址随机化。

Passpoint R2

Android 10 引入了对 Passpoint R2 功能的支持。Passpoint R2 实现了在线注册 (OSU),这是一种用于配置新 Passpoint 配置文件的标准方法。Android 10 支持使用 SOAP-XML 配置 EAP-TTLS 配置文件。

NFC

安全 NFC

安全 NFC 允许仅在设备屏幕解锁时启用离线 NFC 卡模拟。实施此功能让用户可以选择启用安全 NFC 以提高安全性。

Android Beam 已弃用

在 Android 10 中,不再需要 Android Beam,以下接口和方法已被弃用。

接口

方法

要使用 Android Beam,请报告 android.sofware.nfc.beam 功能常量。

图形

ASurfaceControl

Android 10 添加了 ASurfaceControl,这是一种供 SurfaceFlinger 接受缓冲区的新方法。

图形实现

OpenGL ES 图层

Android 10 为 GLES 引入了分层系统

EGL 1.5

Android 10 实现了 EGL 1.5 接口。有关 EGL 1.5 中新增功能的信息,请参阅 Khronos 发布 EGL 1.5 规范

Vulkan

Android 10 包括对 Vulkan 1.1 图形的支持。该平台还支持 VK_KHR_swapchain v70,因此 Vulkan 应用能够创建由交换链内存支持的 VkImage

性能刷新率

Android 10 添加了对性能刷新率的支持。此功能默认处于关闭状态。

互动

汽车

车载音频

在 Android 10 中,音频 HAL 上下文映射到 AudioAttributes.usage 以识别声音。Android 支持每个上下文一个 AUDIO_DEVICE_OUT_BUS 实例。IAudioControl HAL 提供了 特定于车辆的音频 HAL 扩展

手势导航

Android 10 引入了完全手势系统导航的选项。有关如何准备应用以使用此功能的信息,请参阅 Android 开发者网站上的 手势导航页面。

神经网络

Android 10 引入了对神经网络 API 和神经网络 HAL 的更新。有关更改摘要,请参阅神经网络

适用于 Android 10 的新增和更新的神经网络文档

传感器

传感器 HAL 2.0

传感器 HAL 2.0 支持使用快速消息队列 (FMQ) 将传感器事件从 HAL 发送到 Android 传感器框架中。

传感器关闭

Android 10 包含一个开发者设置,用于关闭设备上的所有传感器。此功能可帮助开发者在传感器不可用的情况下测试其应用的功能,并让用户可以控制其设备中的传感器。

如果您的设备使用 SensorServiceCameraServiceAudioPolicyService 的默认实现,则无需对参考设计进行额外自定义。如果您有其他传感器,请参阅自定义,详细了解如何支持此功能。

媒体

可更新的媒体组件

Android 10 提供了可更新的媒体组件,可通过 Google Play 商店基础架构或合作伙伴提供的无线 (OTA) 机制更新与媒体相关的模块化系统组件

媒体 DRM

Android 10 提高了 MediaDrm Java 和 NDK API 的实用性和可用性。

解码

Android 10 支持 AV1 SW 解码。

权限

Android 10 提供了额外的权限配置,以实现透明度和用户隐私。

联系人提供程序和亲密度信息

从 Android 10 开始,由联系人提供程序组件管理的联系人亲密度相关数据的访问方式与 Android 9 及更低版本不同。这些关于数据可访问性的更改提高了所有使用联系人提供程序组件的 Android 10 设备中的用户隐私。底层数据库不再包含联系人亲密度数据。因此,应用无法写入或从中读取数据。

Android 10 中的更改预计会对 API 产生重大影响。如果您的应用依赖于联系人提供程序和亲密度信息中提到的已弃用功能,您可能需要更新您的应用以补偿任何更改。此外,如果您使用联系人提供程序的派生版本,则必须更新您的联系人提供程序。

三态位置权限

Android 10 中的三态位置权限让用户可以更好地控制应用访问其设备位置的方式。

后台位置访问提醒

Android 10 具有后台访问位置提醒功能,该功能提高了应用对设备位置的访问权限的透明度,并帮助用户保持对此类访问权限的控制。

限制机会性位置信息

当应用请求设备的位置时,应用可以等待请求响应,也可以通过使用活动位置监听器来获取机会性位置更新。从 Android 10 开始,要获得机会性位置更新,开发者必须指定他们需要来自 FusedLocationProviderClient 类的被动位置更新。

后台应用启动

在 Android 10 中,没有可见窗口的非特权应用无法自动启动到前台。此更改抑制了广告弹出窗口和恶意接管。无需执行任何操作即可启用此功能。

应用沙盒

在 Android 10 中,应用对文件系统的原始视图有限,无法直接访问 /sdcard/DCIM 等路径。但是,应用仍然可以完全原始访问其软件包特定的路径,例如 Context.getExternalFilesDir() 返回的任何适用方法。应用仍然可以完全原始访问其软件包特定的路径。

使用应用沙盒文件共享指南以提供适当的数据共享粒度。

限制应用剪贴板访问

在 Android 10 中,剪贴板访问已更改,因此无法通过调用 ClipboardManager.getPrimaryClip 或添加 onPrimaryClipChangedListener 监听器来监视剪贴板内容,以在剪贴板更改时接收通知。这提高了用户隐私,并禁用了恶意广告应用修改剪贴板的功能。

在 Android 10 中,仅允许当前具有输入焦点的应用或当前键盘进行读取访问。ClipboardManager.onPrimaryClipChanged() 监听器调用现在仅为满足此类限制的应用触发。ClipboardManager.getPrimaryClipClipboardManager.getPrimaryClipDescription 如果请求的应用不是默认输入法编辑器 (IME),或者没有输入焦点,则返回 null

运行时权限包括 Activity Recognition

现在,当应用在后台访问设备位置时,用户会看到 Activity Recognition 对话框。在 Android 10 中,必须将硬性限制的运行时权限正确列入白名单。

MANAGE_DEVICE_ADMINS 权限

Android 10 将 MANAGE_DEVICE_ADMINS 权限从签名或特权权限更改为仅签名权限。这意味着只有平台签名的应用才能将其他应用设置为设备管理员。

共享 API 改进

Android 10 提供了许多与共享相关的新 Android 平台 API 功能。如果您已修改实现中的“共享表单”代码,请确保您的实现支持这些新功能。如果您未修改实现中的“共享表单”代码,则无需执行任何操作来支持这些新功能。

Android 运行时 (ART)

签名配置

签名配置功能允许在 APK 中嵌入非 SDK 接口限制的配置。这允许从黑名单中删除特定的非 SDK 接口,以便 AndroidX 可以安全地使用它们。通过此更改,AndroidX 可以在较旧的 Android 版本上添加对新功能的支持。

性能

Cgroup 抽象层

Android 10 包括cgroup 抽象层和任务配置文件,开发者可以使用它们来描述要应用于线程或进程的一组限制。

Low Memory Killer Daemon (lmkd)

Android 10 支持新的 lmkd 模式,该模式使用内核压力停滞信息 (PSI) 监视器进行内存压力检测。

电源

平台电源管理

在 Android 10 中,Doze 模式可以在常显设备以及电池供电设备上启用。

例行省电模式

Android 10 引入了一个名为基于例程的新省电模式计划选项。例行省电模式允许 OEM 选择的应用向系统提供信号,以进行更智能的省电模式计划。此选项需要配置,并且是可选的实现。

电源统计信息 HAL

在 Android 10 中,IPowerStats.hal 替换了 IPower.hal 中的电源统计信息收集 API。虽然电源 HAL 仍支持这些 API,但将来它们将专门迁移到电源统计信息 HAL。

电源统计信息 HAL 包括新的 API,以支持从受支持设备上的设备上电源测量收集数据。现有的电源统计信息收集 API 也已更新,以提高灵活性。电源提示 API 仍保留在电源 HAL 中,并且没有更改。

热缓解

Android 10 中的热框架抽象了热子系统温度传感器(包括 CPU、GPU、电池、皮肤和冷却设备)的设备接口。该框架引入了一个轮询接口来查询热状态以启动节流,以及一个回调接口,以便在超过阈值时向用户发送消息。

Android 10 通过 IThermalService 接口使用以下三个新方法提供新的数据类型

应用在 PowerManager 类中添加和删除监听器并访问温度状态。只有受信任的系统服务(例如 Android API 或设备制造商 API)才能访问有关关联的因果事件的信息。设备制造商或 SoC 制造商必须实现 thermal HAL 2.0 才能启用新热框架的全部功能。

有关热缓解实施示例,请参阅 参考实现

更新

APEX 文件格式

Android Pony EXpress (APEX) 是一种新的容器格式,用于模块化系统组件的安装流程中。

动态分区

动态分区为 Android 引入了用户空间分区系统,允许在 OTA 更新期间创建、调整大小或销毁分区。设备制造商不必担心各个分区的大小,例如 systemvendorproduct。而是分配一个大的 super 分区,并且可以在其中动态调整子分区的大小。

动态系统更新

动态系统更新 (DSU) 允许您制作 Android 系统映像,用户可以从互联网下载并试用,而不会有损坏当前系统映像的风险。

多用户备份和恢复

Android 10 支持设备上所有用户的 备份和恢复 功能。以前,备份和恢复仅适用于系统用户。非系统用户的备份和恢复默认处于关闭状态,因为它仅部分覆盖设置、壁纸和系统组件。

Overlayfs

使用 userdebugeng 版本进行工作的用户希望能够有效地将系统分区重新挂载为读写模式,然后添加或修改任意数量的文件,而无需重新刷写系统映像。您可以使用 Overlayfs,它会自动为可写文件系统设置后备存储作为上层引用,并挂载在下层之上。这些操作发生在 adb disable-verityadb remount 请求中。有关更多详细信息,请参阅 AOSP 中的 Overlayfs README

恢复模式下的共享库支持

在 Android 10 中,共享库在恢复分区中可用,这消除了所有恢复模式可执行文件必须是静态的需要。共享库位于分区中的 /system/lib(或 64 位设备的 /system/lib64)目录下。

要将新的共享库添加到恢复分区,请将 recovery_available: truerecovery: true 添加到共享库的 Android.bp 中。前者将库安装到系统分区和恢复分区,而后者仅将其安装到恢复分区。

共享库支持无法使用 Android 基于 make 的构建系统构建。要将现有的恢复模式静态可执行文件转换为动态可执行文件,请删除 Android.mk 中的 LOCAL_FORCE_STATIC_EXECUTABLE := trueAndroid.bp 中的 static_executable: true

用户数据检查点 (UDC)

Android 10 引入了用户数据检查点 (UDC) 功能,该功能允许 Android 在 Android 无线 (OTA) 更新失败时回滚到之前的状态。