架构
AlwaysOnHotwordDetector 类更新
从 Android 12 开始,AlwaysOnHotwordDetector 类(包括其工厂方法 android.service.voice.VoiceInteractionService.createAlwaysOnHotwordDetector()
)是一个系统 API (@SystemApi
),而不是公共 API。AlwaysOnHotwordDetector
类旨在供具有系统级权限的 Google 助理应用使用,通常与操作系统版本捆绑。在 Android 11 及更低版本中,系统会运行检查以确保调用方是当前活跃的 Google 助理应用,使其他第三方应用无法使用该 API,从而保护 API。
此外,Android 12 包含声音触发器功能方面的增强功能,可以通过声音触发器 API 改善与使用麦克风相关的权限归因和执行。麦克风的使用(包括间接使用,例如通过 SoundTriggerManager
或 AlwaysOnHotwordDetector
类使用)将归因于调用 AlwaysOnHotwordDetector
类的源软件包(Google 助理应用)。这可以增强用户隐私保护并提高使用麦克风的软件包的透明度。在 Android 11 及更低版本中,麦克风的使用归因于系统用户,因为源软件包并不直接使用声音触发器 API,而是通过位于 system_server
进程中更高级别的服务使用麦克风。
这些变更的影响如下:
- 使用
AlwaysOnHotwordDetector
类的非系统应用无法基于 Android 12 API 进行编译,因为该 API 已从公开 Surface 中移除。 - 系统可能会拒绝使用
AlwaysOnHotwordDetector
类的现有系统应用在运行时使用声音触发器功能。若要解决此问题并允许这些应用通过声音触发器访问麦克风,请为这些应用声明RECORD_AUDIO
和CAPTURE_AUDIO_HOTWORD
权限。
Android Rust 语言支持
Android 12 现在支持使用 Rust 代码。“设置”文档中新增了一个部分,为使用 Rust 在 Android 上进行开发提供指导。
如需详细了解 Android Rust 和各个模块并查看示例(以及获取 IDE 设置信息),请参阅新增的 Android Rust 部分:Android Rust 简介。
启动映像头文件
Android 12 新增对启动映像头文件版本 4 的使用,该版本是支持通用内核映像 (GKI) 架构的设备的主要启动映像。Android 12 还提供了一个 boot_signature
,用于检查内核和 ramdisk 的完整性。该检查在 VtsSecurityAvbTest 中完成,是使用 GKI 架构的设备必须执行的检查。
如需了解详情,请参阅启动映像头文件页面。
bootconfig 实现方面的变更
Android 12 中的 bootconfig 功能是一种将配置详细信息从 build 和引导加载程序传递给 Android 12 的机制,它取代了用于 Android 11 及更低版本的 androidboot.*
内核 cmdline 选项。此功能可用于将 Android 用户空间的配置参数与内核的配置参数分离开。
如需了解详情,请访问实现 Bootconfig。
自定义后备字体
在 Android 12 之前,更新 AOSP 中设备已安装的字体文件(位于 /system/fonts
分区中)或供应商分区中设备已安装的字体文件(位于 /product/fonts
或 /system/fonts
分区中)需要由 OEM 进行系统更新。此要求对表情符号的兼容性具有重大影响。在 Android 12 中,借助 FontManager
系统服务,您可以管理已安装的字体文件,并且无需进行系统更新即可更新设备已安装的字体文件。
如需了解这项新功能,请参阅实现自定义后备字体。
DMA-BUF 堆
在 Android 12 中,GKI 2.0 以 DMA-BUF 堆取代了 ION 分配器。
启用语言区域过滤器
Android 12 引入了一项功能,可用于为新的设备类型配置默认系统语言和语言区域过滤器。借助此功能,您可以在出厂校准期间通过 oem/oem.prop
设置过滤器属性值和默认语言,并且无需将过滤器烘焙 (bake) 到系统映像中即可配置限制。
如需了解详情,请参阅启用语言区域过滤器。
刷写供应商 ramdisk
Android 12 开始支持通过 fastboot 命令从设备中提取整个 vendor_boot
映像,从而刷写供应商 ramdisk。该命令会提示主机端 fastboot 工具读取供应商启动头文件、重置映像并刷写新映像。这包括对引导加载程序和 fastbootd 变更的支持,用于获取分区大小和偏移等必要数据。
如需了解详情,请参阅用户空间中的 fastboot 页面上的刷写供应商 ramdisk。
GKI 版本控制
从 Android 12 开始,可以在构建时从内核提取 KMI 版本的 Android 版本部分并将其注入设备清单中。
如需更多详细信息,请参阅 GKI 版本控制。
MM 事件 - 历史内存统计信息
在发布时搭载 Android 12 的设备可以使用 mm_events
,这是一组在系统遇到内存压力时定期捕获的内存相关统计信息。mm_events
与 perfetto
跟踪机制集成,尽量避免增加性能开销。统计信息的收集在一段时间内(此时间可配置)保持活跃状态,定期捕获统计信息。
如需了解如何使用 mm_events
统计信息,请参阅 MM 事件 - 历史内存统计信息。
系统提醒窗口的限制
为了提高 Android 生态系统的安全性,Android 12 加大了获取 SYSTEM_ALERT_WINDOW 权限的难度,并允许第三方应用阻止来自其他第三方应用的叠加层。
在 Android 12 中,系统不会向预安装应用自动授予 SYSTEM_ALERT_WINDOW
应用操作权限。此权限必须由用户明确授予后才能供预安装应用使用。系统应用仍会默认获得该权限。
第三方应用可以选择不在其上绘制应用叠加层。这提供了一种防范 cloak and dagger 式攻击的保护机制。此功能可供所有应用使用,以便让银行应用等安全敏感应用能够保护自身。如需使用此功能,应用必须在其清单中声明 HIDE_OVERLAY_WINDOWS 权限。
HIDE_NON_SYSTEM_OVERLAY_WINDOWS(signature|privileged)
已废弃,取