本页总结了 Android 10 版本中的主要功能,并提供了其他信息的链接。根据各个功能的介绍文档在本网站上的位置,整理了以下功能摘要。
build
java_sdk_library
Android 10 引入了 java_sdk_library
,这是一个新的 build 规则,可修复共享 Java 库的兼容性问题。设备制造商可以将此机制用于自己的共享 Java 库,以保持其 API 的向后兼容性。
架构
模块化系统组件
Android 10 中采用了一些模块化 Android 系统组件,使其能够在正常的 Android 发布周期之外进行更新。下面列举了几种模块:
- Android 运行时
- Conscrypt
- DNS 解析器
- DocumentsUI
- ExtServices
- 媒体
- ModuleMetadata
- 网络
- PermissionController
- 时区数据
硬件抽象层 (HAL)
Android 10 增加了对 HAL 的支持,以便它们在没有任何客户端时自动关停。
内核
ABI
Android 10 支持新的 ABI 监控实用程序,可帮助比较、跟踪和减少那些会影响与内核模块的兼容性的内核 ABI 更改。
Android 10 还引入了基于符号的 ABI 使用情况检查工具。该检查工具可以在构建时检测过时的预构建二进制文件,以便共享库开发者了解哪些预构建二进制文件可能会因更改而出现问题,以及哪些预构建二进制文件必须重新构建。
Android Live-Lock 守护进程
Android 10 包含 Android Live-Lock 守护进程 (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 内存耗用量高且难以使用。
Config File Schema API
Android 平台包含大量用于存储配置数据的 XML 文件。很多 XML 文件都位于 vendor
分区中,但读取它们的操作在 system
分区中进行。在这种情况下,XML 文件的架构充当这两个分区之间的接口,因此您必须明确指定架构,并且必须以向后兼容的方式改进该架构。在 Android 10 之前的版本中,Android 平台没有提供需要指定和使用 XML 架构的机制,也没有提供防止架构中出现不兼容更改的机制。Android 10 提供了这种机制,称为 Config File Schema 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 引入了两种方法:suggestConversationActions
和 detectLanguage
。suggestConversationActions
方法可根据给定的对话生成建议的回复和操作,而 detectLanguage
方法可检测文本所使用的语言。
支持 Zawgyi 字体渲染
Zawgyi 是缅甸最受欢迎的字体。Android 9 及更低版本不支持渲染 Zawgyi,因为它不符合 Unicode 标准。Android 10 通过添加一个能够同时渲染 Unicode Burmese 和 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 中得到了更改。如果您要自定义“设置”,请确保支持此功能。如果您的设备上有超时的界面元素,请针对这些元素使用超时 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 会在免安装应用模式下运行,这意味着 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 更改为用户 build 类型,因为 GSI 已进行版本签名。但是,用户 build 中未提供 adb root
,该命令可向受测 Android 设备授予主机 root 权限。这会带来问题,因为 VTS 需要 adb root
才能运行。
Android 10 中引入了调试 ramdisk,以便在设备处于解锁状态时启动 adb root
。这样就可以重复使用相同的用户编译版本 system.img
(GSI 或 OEM 的 system.img
),从而简化测试流程。
硬件混合渲染器验证
Android 10 通过 IComposerClient.hal
中的 readback
接口为硬件混合渲染器验证提供了新的 VTS 测试类。如果供应商未实现 readback
,则会自动通过测试。
调试
使用不同的类加载器加载共享库
在 Android 9 及更低版本中,应用会在应用的类加载器中加载其关联的 Java 共享库。Android 10 框架使用与应用的类加载器不同的类加载器来加载通过 uses-library
或 uses-static-library
关联的 Java 共享库。
通常,应用不应依赖于使用特定的类加载器,因此该更改不会破坏应用行为。但是,如果应用依赖于使用单个类加载器,则该行为将会遭到破坏。此外,Android 10 仍支持对同一软件包内的类进行包级私有的访问,但这一功能在共享库中不受支持。
设备制造商在测试搭载 Android 10 的设备时,可能会遇到应用兼容性问题。
安全功能
如需查看只与安全和隐私相关的增强功能的更为完整的列表,请参阅 Android 10 安全和隐私增强功能页面。
人脸识别身份验证
借助人脸识别身份验证功能,用户只需将面孔对准设备正面即可将其解锁。Android 10 添加了对一种全新人脸识别身份验证堆栈的支持,该堆栈可安全处理相机帧,从而在支持的硬件上进行人脸识别身份验证时保障安全和隐私。Android 10 还提供了一种可确保安全性的简单实现,以便通过应用集成来完成交易(例如网上银行或其他服务)。
扩展访问权限
可信代理是 Smart Lock 等三重身份验证机制使用的底层机制,只能在 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 包含一个名为 AudioPlaybackCapture
的新 API,应用可以借助此 API 复制其他应用正在播放的音频。此功能类似于屏幕截图,但针对的是音频。主要使用场景是让影音在线播放应用能够捕获游戏当前播放的音频。
对于其音频正在由其他应用捕获的应用,Capture API 不会影响此应用的延迟时间。
MIDI
Android 10 可更轻松地将使用 MIDI 的专业音频应用移植到使用 AMidi
NDK API 的 Android 平台。
相机
有关 Android 10 中引入的对 Camera API、Camera HAL 以及摄像头模块的变更摘要,请参阅 Android 10 摄像头更新。
相机框架隐私性改进
Android 10 针对相机框架引入了隐私增强功能。为避免在未经用户同意的情况下泄露 CameraCharacteristics
中潜在的敏感静态相机信息,应用必须获取 CAMERA
权限,才能使用 getCameraCharacteristics
方法检索具有敏感隐私标记的静态元数据。
如需获取需要 CAMERA
权限的相机特征密钥列表,请调用 getKeysNeedingPermission
方法。
会话重新配置查询
Android 10 添加了会话重新配置查询功能,该功能可更好地控制内部会话参数重新配置逻辑,从而提高性能。
Camera HAL3 缓冲区管理 API
Android 10 引入了可选的 Camera HAL3 缓冲区管理 API,它使您能够实现缓冲区管理逻辑,以便在 Camera 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.0
和 android.frameworks.cameraservice.device@2.0
来访问和控制相机设备。为了更方便地使用 HIDL 接口,Android 10 还引入了一个供应商可用的库 libcamera2_vendor
。此库类似于相机 NDK 库,但经过了一些小的修改。
数据流配置
Android 10 添加了一些功能,可允许相机供应商向相机客户端宣传推荐的相机数据流,并支持 API 查询数据流组合。
相机数据流组合要求
搭载 Android 10 的设备不再需要支持与物理子相机数据流的数据流组合。但是,搭载 Android 10 且相机 HAL 设备版本为 3.5 的设备必须支持 isStreamCombinationSupported()
,以便应用查询是否支持包含物理数据流的数据流组合。
如需了解详情,请参阅多摄像头支持。
HEIF 图片处理
Android 10 提供针对高效图片文件格式 (HEIF) 图片的原生摄像头支持,从而能够提供具有更高图片质量和更小尺寸的 JPEG 图片。设备必须具有 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。如需了解详情,请参阅实现 eSIM 卡和 HAL 要求。
5G 非独立组网 (NSA)
Android 10 增加了对 5G 非独立组网 (NSA) 的支持。5G NSA 是一种 5G 网络解决方案,其网络由现有的 4G 基础架构提供支持。Android 10 设备在连接到 5G 网络后,便可以在状态栏上显示 5G 图标。
电话帐号建议
Android 10 引入了电话帐号建议服务,该服务允许在用户拨打电话时向其显示电话帐号建议。
运营商
迁移移动网络设置
Android 10 重新设计了移动网络设置界面代码的架构,并将其从电话堆栈移动至设置堆栈。若要支持迁移后的代码,请将以下移动网络设置配置值从 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 以及 build 序列号)由特许权限进行保护,并且还会向设备和资料所有者应用授予访问权限。由于 IMSI 和 SIM 序列号由运营商提供,因此会对具有运营商权限的软件包提供对这些标识符的访问权限。
Wi-Fi
网络选择
Android 会不断评估已连接网络的质量,并评定可用网络的质量。Android 10 更新了用于在 Wi-Fi 网络之间进行选择和切换的算法和流程。
WLAN 首选分流网络扫描
Android 10 在 WifiManager
中引入了一个名为 setDeviceMobilityState()
的可选 API 方法,可在设备静止时增加首选分流网络 (PNO) 扫描之间的间隔,从而减少耗电量。
运营商 WLAN
具有运营商 Wi-Fi 功能的 Android 10 设备会自动连接到已配置的运营商 Wi-Fi 网络(具有公钥证书的网络)。
WLAN Easy Connect
Android 10 设备可以使用 Wi-Fi Easy Connect,该功能使用由 Wi-Fi 联盟 (WFA) 引入的设备配置协议 (DPP) 来配置 Wi-Fi 设备。
WLAN 低延迟模式
Android 10 引入了 WLAN 低延迟模式,该模式可配置 WLAN 芯片以降低延迟。
已更新 DHCP 服务器
为了更好地构造“IP 服务器”服务体系,我们删除了 dnsmasq
。Android 10 将其 DHCPv4 服务器功能替换为单独的组件,该组件主要使用 Java 编写,以便更好地与 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 直连
Wi-Fi 直连又称“Wi-Fi 点对点”,它允许支持设备直接使用 Wi-Fi 直连协议发现其他设备并与之互连(无需连接到互联网或移动网络)。
随机分配 MAC 地址增强功能
自 Android 10 起,默认会为客户端模式、SoftAp 和 Wi-Fi 直连启用随机分配 MAC 地址功能。设备必须在系统界面中提供为每个 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,并且以下接口和方法已弃用。
接口:
NfcAdapter.CreateBeamUrisCallback
NfcAdapter.CreateNdefMessageCallback
NfcAdapter.OnNdefPushCompleteCallback
方法:
createBeamUris
invokeBeam
isNdefPushEnabled
setBeamPushUris
setBeamPushUrisCallback
setNdefPushMessage
setNdefPushMessageCallback
setOnNdefPushCompleteCallback
createNdefMessageCallback
onNdefPushCompleteCallback
如需使用 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 中更新了 Neural Networks API 和 Neural Networks HAL。有关变更摘要,请参阅神经网络。
针对 Android 10 新建及更新的神经网络文档如下:
传感器
传感器 HAL 2.0
传感器 HAL 2.0 支持使用快速消息队列 (FMQ) 将传感器事件从 HAL 发送到 Android 传感器框架。
关闭传感器
Android 10 中包含一个开发者设置,用于关闭设备上的所有传感器。此功能可帮助开发者在这些传感器不可用的情况下测试其应用的功能,也为用户提供了控制其设备中的传感器的方法。
如果您的设备使用 SensorService
、CameraService
和 AudioPolicyService
的默认实现,则无需对参考设计进行额外的自定义。如果您有其他传感器,请参阅自定义,详细了解如何支持此功能。
媒体
可更新的媒体组件
Android 10 提供可更新的媒体组件,它们可以通过 Google Play 商店基础架构或通过合作伙伴提供的无线下载 (OTA) 机制更新与媒体相关的模块化系统组件。
媒体数字版权管理
Android 10 提高了 MediaDrm
Java 和 NDK API 的实用性和易用性。
解码
Android 10 支持 AV1 软件解码。
权限
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()
监听器调用目前仅触发满足此类限制的应用。如果发起请求的应用既不是默认的输入法 (IME),也没有输入焦点,则 ClipboardManager.getPrimaryClip
和 ClipboardManager.getPrimaryClipDescription
会返回 null
。
运行时权限包括运动状态识别
当应用在后台访问设备位置信息时,用户现在可以看到运动状态识别对话框。在 Android 10 中,必须将受到硬性限制的运行时权限正确列入白名单。
MANAGE_DEVICE_ADMINS 权限
Android 10 将 MANAGE_DEVICE_ADMINS
权限从签名权限或特许权限更改为仅签名权限。这意味着仅经平台签名的应用才可将其他应用设置为设备管理员。
共享 API 方面的改进
Android 10 提供了许多与共享相关的 Android Platform API 新功能。如果您已在实现中修改了共享表单代码,请确保您的实现支持这些新功能。如果您尚未在实现中修改共享表单代码,则无需执行任何操作即可支持这些新功能。
Android Runtime (ART)
签名配置
签名配置功能允许在 APK 中嵌入有关非 SDK 接口受限情况的配置。借助此功能,可以从屏蔽名单中移除特定的非 SDK 接口,以便 AndroidX 能够安全地使用它们。在进行这项更改后,AndroidX 可针对旧版 Android 上的新功能添加支持。
性能
Cgroup 抽象层
Android 10 包含一个 cgroup 抽象层和一些任务配置文件,开发者可以使用它们来描述一系列可应用到线程或进程的限制。
低内存终止守护进程 (lmkd)
Android 10 支持新的 lmkd
模式,它使用内核压力失速信息 (PSI) 监视器来检测内存压力。
电源
平台电源管理
始终开启的 Android 10 设备以及电池供电的 Android 10 设备始终可以启用低电耗模式。
常规省电模式
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
接口并使用以下三种新方法来提供新的数据类型:
getCurrentThermalStatus()
能够以整数形式返回设备的当前热状态(除非该设备正处于受限状态)。addThermalStatusListener()
可添加一个监听器。removeThermalStatusListener()
可移除之前添加的监听器。
应用通过 PowerManager
类来添加和移除监听器以及获取温度状态。只有可信系统服务(例如 Android API 或设备制造商 API)才能访问有关因果关联事件的信息。设备制造商或 SoC 制造商必须实现 thermal HAL 2.0
才能启用全新热框架的完整功能。
如需查看热缓解实现的示例,请参阅参考实现。
更新
APEX 文件格式
Android Pony EXpress (APEX) 是一种在模块化系统组件的安装流程中使用的新容器格式。
动态分区
动态分区为 Android 引入了一个用户空间分区系统,可允许在 OTA 更新期间创建或销毁分区,或调整其大小。设备制造商无需担心各个分区(例如 system
、vendor
和 product
)的大小。取而代之的是,系统会分配一个大的 super
分区,其中的子分区可动态地调整大小。
动态系统更新
借助动态系统更新 (DSU),您能够制作 Android 系统映像,供用户从互联网下载并试用,而不会遇到损坏当前系统映像的风险。
多用户备份和恢复
Android 10 针对设备上的所有用户提供备份和恢复功能支持。之前,备份和恢复功能仅供系统用户使用。对非系统用户来说,备份和恢复功能默认处于停用状态,因为它仅涉及部分设置、墙纸和系统组件。
Overlayfs
使用 userdebug
或 eng
build 的用户希望能够高效地将 system 分区重新装载为读写分区,然后添加或修改任意数量的文件,而无需重新刷新系统映像。您可以使用 Overlayfs
,它能够自动将可写文件系统的后备存储设置为上层参考,并装载在下层参考之上。这些操作在 adb disable-verity
和 adb remount
请求中执行。如需了解详情,请参阅 AOSP 中的 Overlayfs 自述文件。
恢复模式下的共享库支持
在 Android 10 中,共享库在恢复分区内可用,无需再使所有恢复模式可执行文件都处于静态。共享库位于该分区内的 /system/lib
(在 64 位设备中,则为 /system/lib64
)目录下。
要将新的共享库添加到恢复分区,请将 recovery_available: true
或 recovery: true
添加到共享库的 Android.bp
中。前者会将库安装到系统和恢复分区,而后者仅将其安装到恢复分区。
无法使用 Android 基于 Make 的构建系统构建共享库支持。若要将恢复模式的现有静态可执行文件转换为动态可执行文件,请移除 Android.mk
中的 LOCAL_FORCE_STATIC_EXECUTABLE := true
或 Android.bp
中的 static_executable: true
。
用户数据检查点 (UDC)
Android 10 引入了用户数据检查点 (UDC) 功能,该功能允许 Android 在 Android 无线下载 (OTA) 更新失败时回滚至之前的状态。