Android 10 版本说明

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

建造

java_sdk_库

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 活锁守护进程

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

ARM64 上的 vDSO32

Android 10 支持在 64 位内核上使用 vDSO32 ,这可将电池寿命延长 0.4%,并提供其他性能改进。

早期安装分区的 fstab 条目

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

HIDL

卸载广播队列

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

系统暂停服务

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

HIDL 中的 safe_union

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

配置

配置存储 HAL

由于内存消耗高、使用困难,Android 10 弃用了ConfigStore HAL ,并用系统属性替代了 HAL。

配置文件架构 API

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

作为 API 的系统属性

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

供应商接口 (VINTF) 对象

温特夫

Android 10 中对 VINTF 的更改包括:

引导装载程序

内存盘

在 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 及更高版本中,设备的恢复映像必须包含覆盖映像中的信息。设备制造商可以使用DeviceTree或高级配置和电源接口(ACPI)来描述所有不可发现的设备。 Android 10 及更高版本支持使用 ACPI 而不是 DeviceTree 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 的自定义实现,您可以:

隐藏应用程序图标的限制

Android 10 限制应用程序隐藏其启动器图标的能力。如果应用程序没有启用启动器 Activity,系统会在启动器中显示合成的 Activity ;此合成活动代表系统设置中应用程序的详细信息页面。

有关用于显示应用程序图标的逻辑的更多信息(包括不显示应用程序图标的应用程序类型),请参阅 API 参考中的getActivityList()文档。

设置

为了提高可访问性,Android 10 包含用户可自定义的超时设置。 API 和设置更改随 Android 10 一起提供。如果您自定义设置,请确保支持此功能。如果您的设备上有超时的 UI 元素,请在这些元素上使用超时 API 。有关更多信息,请参阅Android 开发人员辅助功能指南

兼容性

Android 兼容性定义文档 (CDD)

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

测试

兼容性测试套件 (CTS)

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

CTS下载

支持 Android 10 的 CTS 包可在CTS 下载页面上获取。所包含测试的源代码可以与开源树中的android-cts-10_r1标签同步。

CTS 垫片 APEX

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

测试线束模式

CTS 测试工具模式可帮助开发人员自动测试一个设备或一组设备。

即时应用程序模式

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

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

CTS Verifier 专业音频测试

Android 10 添加了针对Pro Audio 合规性的CTS Verifier 测试。

CTS Verifier MIDI 测试

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

CTS测试解读

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

供应商测试套件 (VTS)

使用调试 ramdisk 进行 VTS 测试

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

如果设备已解锁,则引入调试 ramdisk以使adb root成为可能。这通过重用相同的用户构建system.img (GSI 或 OEM 的system.img )来简化测试流程。

Hardware Composer 验证

Android 10 通过IComposerClient.hal中的readback接口添加了一个新的 VTS 测试类,用于 Hardware Composer 验证。如果供应商不实现readback ,测试会自动通过。

调试

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

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

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

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

安全特性

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

人脸认证

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

扩展访问

信任代理是 Smart Lock 等三级身份验证机制使用的底层机制,在 Android 10 中只能延长解锁时间。信任代理无法再解锁锁定的设备,并且只能将设备保持解锁状态最多四个小时。

加密

OEM加密

Android 10 使用 OEMCrypto API 版本 15。

测试

边界消毒剂

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是一种动态用户模式内存分配器,旨在更好地抵御堆相关漏洞。它提供标准 C 分配和释放原语以及 C++ 原语。

影子调用栈

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

声音的

音频哈尔

Android 10 包含以下音频 HAL的新功能。

  • AudioSource
  • AudioFormat
  • AudioChannelMask

添加了针对音频 HAL 和子系统实现的附加要求。

预处理效果

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

音频策略管理器

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

高分辨率音频

Android 10 对高分辨率音频进行了以下改进。

  • 浮动支撑
  • 192KHz频率支持
  • 八通道支持
  • 包含计时信息

并发捕获

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

音频回放捕捉

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

捕获 API 不会影响正在捕获音频的应用程序的延迟。

MIDI

Android 10 可以更轻松地将使用 MIDI 的专业音频应用程序通过AMidi NDK API移植到 Android 平台。

相机

有关 Android 10 中引入的相机 API、相机 HAL 和相机模块的更改摘要,请参阅Android 10 相机更新

相机框架隐私改进

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

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

会话重新配置查询

Android 10 添加了会话重新配置查询功能,该功能可以通过对内部会话参数重新配置逻辑的更多控制来提高性能。

相机 HAL3 缓冲区管理 API

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

Camera 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 的设备不再需要支持与物理子摄像头流的流组合。但是,运行 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 主机设备上的消息应用程序使用蓝牙等机制通过手机发送 SMS 消息。有关详细信息,请参阅getSubscriptionType方法和SUBSCRIPTION_TYPE_REMOTE_SIM常量的参考文档。

多个 eSIM 卡

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

eSIM 更新

对于运行支持 eSIM 的 Android 10 的设备,必须定义不可移动的 eUICC 插槽 ID 数组。设备还必须支持 IRadio HAL v1.4 和 IRadioConfig HAL v1.2。有关更多信息,请参阅实施 eSIMHAL 要求

5G 非独立组网 (NSA)

Android 10 增加了对5G 非独立组网 (NSA)的支持。 5G NSA 是一种由现有 4G 基础设施支持的 5G 网络解决方案。在 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 序列号是运营商提供的,因此具有运营商权限的包裹可以访问这些标识符。

无线上网

网络选择

Android 不断评估所连接网络的质量并评估可用网络的质量。 Android 10 更新了用于选择和切换 Wi-Fi 网络的算法和程序。

Wi-Fi 首选网络卸载扫描

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

运营商无线网络

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

Wi-Fi 轻松连接

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

Wi-Fi 低延迟模式

Android 10引入了Wi-Fi低延迟模式,该模式可配置Wi-Fi芯片以减少延迟。

更新了 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 增强开放

Android 10 增加了对Wi-Fi 保护访问 3 (WPA3) 和 Wi-Fi 增强开放安全标准的支持,以提供更好的隐私性和针对已知攻击的稳健性。

无线直连

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

MAC 随机化增强

从 Android 10 开始,客户端模式、SoftAp 和 Wi-Fi Direct 默认启用MAC 随机化。设备必须提供一个选项来启用或禁用系统 UI 中每个 SSID 的 MAC 随机化。

通行点R2

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

近场通信

安全 NFC

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

Android Beam 已弃用

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

接口:

方法:

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

图形

表面控制

Android 10 添加了ASurfaceControl ,这是SurfaceFlinger接受缓冲区的新方式。

图形实现

OpenGL ES 层

Android 10 引入了 GLES分层系统

东GL 1.5

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

伏尔甘

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) 机制更新媒体相关的模块化系统组件

媒体数字版权管理

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()侦听器调用现在仅针对满足此类限制的应用程序触发。如果请求应用程序不是默认输入法编辑器 (IME),或者没有输入焦点, ClipboardManager.getPrimaryClipClipboardManager.getPrimaryClipDescription将返回null

运行时权限包括活动识别

现在,当应用程序在后台访问设备位置时,用户会看到活动识别对话框。硬限制的运行时权限必须在 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 抽象层和任务配置文件,开发人员可以使用它们来描述应用于线程或进程的一组限制。

低内存杀手守护进程 (lmkd)

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

力量

平台电源管理

在 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接口提供新的数据类型:

应用程序在PowerManager类中添加和删除听众和访问温度状态。只有可信赖的系统服务(例如Android API或设备制造商API)才能访问有关关联因果事件的信息。设备制造商或SOC制造商必须实施thermal HAL 2.0 ,以实现新的热框架的全部功能。

有关降低热量实施示例,请参见参考实现

更新

Apex文件格式

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

动态分区

动态分区向Android介绍了一个用户空间分区系统,从而允许在OTA更新期间创建,调整或破坏分区。设备制造商不必担心systemvendorproduct等各个分区尺寸。取而代之的是,分配了一个大型super分区,并且可以在其中动态大小。

动态系统更新

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

多源备份和还原

Android 10支持设备上所有用户的备份和还原功能。以前,备份和还原仅适用于系统用户。默认情况下关闭了非系统用户的备份和还原,因为它仅针对设置,墙纸和系统组件具有部分覆盖范围。

覆盖

使用userdebugeng构建的用户期望能够有效地重新安装系统分区为read-Write,然后在不重新刷新系统映像的情况下添加或修改任何数量的文件。您可以使用Overlayfs ,该叠加FS会自动为可写文件系统设置备份存储作为上部参考,并安装在下部。这些动作发生在adb disable-verityadb remount请求中。有关更多详细信息,请参阅AOSP中的overlayfs readme

在恢复模式下共享库支持

在Android 10中,共享库可在恢复分区中找到,这消除了所有恢复模式可执行文件均为静态的需求。共享库位于分区中的/system/lib (64位设备)目录下方(OR /system/lib64 )。

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

无法使用Android的基于Make Build System构建共享库支持。要将现有的静态可执行文件转换为恢复模式的静态可执行文件,请删除in Android.mk或static_executable中的LOCAL_FORCE_STATIC_EXECUTABLE := true static_executable: true (in Android.bp )。

用户数据检查点(UDC)

Android 10介绍了用户数据检查点(UDC)功能,该功能允许Android在Android直播(OTA)更新失败时回归其先前状态。