Android 12 首个开发者预览版到来
作者 / Dave Burke,工程副总裁
对于每一个版本,我们都致力于使操作系统更智能、更易用、更强劲,并且始终以隐私和安全为核心。在 Android 12 中,我们还将为您提供新的工具,帮助您为用户打造更出色的体验。首先是兼容媒体转码,即便您的应用尚不支持,这个功能也可以帮助应用使用最新的视频格式。此外,图像和视频等富媒体内容现在可以更轻松地复制/粘贴到您的应用里。我们还将添加隐私保护并优化性能,使您的应用保持及时响应。
首个预览版只是 Android 12 的开始,随着发布的进行,我们会有更多的内容分享给开发者。请继续阅读本文,了解 Android 12 的最新变化,并访问 Android 12 开发者网站,获取有关下载并安装到 Pixel 设备和发布时间表的详细信息。与往常一样,尽早获得您的反馈并将其纳入最终产品对我们来说非常重要,因此请务必告诉我们您的想法!
Android 12 开发者网站 https://developer.android.google.cn/about/versions/12 下载并安装到 Pixel 设备 https://developer.android.google.cn/about/versions/12/download 发布时间表 https://developer.android.google.cn/about/versions/12/overview#timeline 提交反馈 https://developer.android.google.cn/about/versions/12/feedback
除了我们在 Android 12 中所做的工作之外,我们还发布了另一个重要工具的最新进展,那就是可以帮助您更轻松地创建出色用户体验的 Jetpack Compose,这是我们用于构建原生界面的新一代工具包。欢迎您在评论区留言,告诉我们对 Jetpack Compose 最关切的问题。
Jetpack Compose https://developer.android.google.cn/jetpack/compose
信任和安全
隐私是我们一切工作的核心,在 Android 12 中,我们继续专注于为用户提供更多的透明度和控制权,同时保证设备和数据安全。在新版本中我们做出了很多改动,包括对可用于跟踪的标识符增加了新的限制,为应用组件增加了更安全的默认值,等等。这些变更可能会对应用产生影响,因此,我们建议您尽快开始测试。同时,请继续留意将在后续预览版中提供的更多隐私和安全功能。
WebView 中的现代 SameSite cookie 行为 - WebView 顺应 Chrome 和其他浏览器的变化,加入了新的 SameSite cookie 行为,提供额外的安全性和隐私性,让用户对 cookie 跨站点的使用方式拥有更多的透明度和控制权。请访问官方文档了解详细信息。
SameSite cookie 变更 (2020 年 2 月) https://blog.chromium.org/2020/02/samesite-cookie-changes-in-february.html 官方文档: WebView 中的现代 SameSite cookie 行为 https://developer.android.google.cn/about/versions/12/behavior-changes-12#samesite
限制使用 Netlink MAC - 我们将继续帮助开发者迁移到保护隐私的可重置标识符。为了在多次版本发布中简化设备级别 Netlink MAC 的迁移,我们在 Android 11 中将这个功能限制在了 API 级别 30。而在 Android 12 中,无论 targetSDK 级别是多少,我们将对所有应用施加这一限制。请访问官方文档了解详细信息。
唯一标识符最佳做法 https://developer.android.google.cn/training/articles/user-data-ids 官方文档: 受限的 Netlink MAC https://developer.android.google.cn/about/versions/12/behavior-changes-all#mac-address
更安全地导出组件 - 为了防止应用意外导出 activity、服务和接收器,我们更改了 android:exported 属性的默认处理方式,使其更加明确。借助这项变更,声明一个或多个 intent 过滤器的组件现在必须显式声明一个 android:exported 属性。您应检查清单文件中的组件,避免与此变更相关的安装错误。请访问官方文档了解详细信息。
android:exported https://developer.android.google.cn/guide/topics/manifest/activity-element#exported 官方文档: 更安全地导出组件 https://developer.android.google.cn/about/versions/12/behavior-changes-12#exported
更安全地处理 Intent - 为了使 PendingIntents 的处理更加安全,Android 12 要求应用为每个 PendingIntent 显式声明一个可变性标志,即 FLAG_MUTABLE 或新的 FLAG_IMMUTABLE。请访问官方文档了解详细信息。
FLAG_MUTABLE https://developer.android.google.cn/reference/android/app/PendingIntent#FLAG_MUTABLE FLAG_IMMUTABLE https://developer.android.google.cn/reference/android/app/PendingIntent#FLAG_IMMUTABLE 官方文档: PendingIntent 需要声明可变性 https://developer.android.google.cn/about/versions/12/behavior-changes-12#pending-intent-mutability
https://developer.android.google.cn/about/versions/12/behavior-changes-12
更好的用户体验工具
在 Android 12 中,我们在完善体验和改进性能的关键领域持续投入资源。以下是目前的部分进展。
兼容媒体转码 (compatible media transcoding) - 随着 HEVC 硬件编码器在移动设备上的普及,相机应用也多以 HEVC 格式进行拍摄。与旧的编解码器相比,HEVC 在质量和压缩方面都具有明显提升。大多数应用都应支持 HEVC,但对于无法支持 HEVC 的应用,我们引入了兼容媒体转码。
借助此功能,不支持 HEVC 的应用可以让平台自动将文件转码为广泛兼容的 AVC 格式。转码过程需要一定时间,具体取决于视频的内容和设备的硬件属性。例如,30fps 的一分钟 1080p 视频在 Pixel 4 上转码需要 9 秒左右。您可以通过声明应用不支持的媒体格式来选择使用转码服务。我们强烈建议开发者使应用支持 HEVC,如果无法支持,再启用兼容媒体转码。该功能将在所有使用 HEVC 格式进行视频拍摄的设备上启用。我们希望听到您对此功能的反馈。请访问官方文档了解详细信息。
官方文档: 兼容媒体转码 https://developer.android.google.cn/about/versions/12/features/compatible-media-transcoding
AVIF 图像支持 - Android 12 引入了对 AV1 图像文件格式 (AVIF) 的平台支持,提供更高的图像质量和更高效的压缩。AVIF 是一种使用 AV1 编码的图像和图像序列的容器格式。与其他现代图像格式一样,AVIF 利用了视频压缩的帧内编码内容。相较于旧的图像格式 (如 JPEG),在相同的文件大小下,AVIF 可以极大地提高图像质量。
△ 上图: AVIF (18.2kB);下图: JPEG (20.7kB)
AV1 图像文件格式 https://en.wikipedia.org/wiki/AV1#AV1_Image_File_Format_(AVIF) AV1 https://en.wikipedia.org/wiki/AV1 AVIF 已经到来 https://jakearchibald.com/2020/avif-has-landed/ 图像对比 https://jakearchibald.com/2020/avif-has-landed/demos/compare/?show=f1&img=/c/f1-match-ff75e344.jpg
前台服务优化 - 前台服务是应用管理某些面向用户任务的重要方式,但过度使用会影响性能,甚至导致应用被系统终止。为了确保用户获得更好的体验,对于以新平台为目标的应用,我们将阻止从后台启动前台服务。为了帮助大家更轻松地摆脱这种做法,我们在 JobScheduler 中引入了一个新的加急作业 (expedited job),该作业具有较高的进程优先级、网络访问权限,并且立即运行,不受省电模式 (Battery Saver) 或低电耗模式 (Doze) 等电耗约束的影响。为了实现向下兼容,我们还将加急作业集成到了最新版本的 Jetpack WorkManager 库中。另外,为了减轻对用户的干扰,我们现在将部分前台服务通知的显示延迟了最多 10 秒。这使短暂的任务有机会在通知显示之前完成。请访问官方文档了解详细信息。
加急作业 https://developer.android.google.cn/reference/android/app/job/JobParameters.html#isExpeditedJob() Jetpack WorkManager https://developer.android.google.cn/topic/libraries/architecture/workmanager 官方文档: 前台服务启动限制 https://developer.android.google.cn/about/versions/12/behavior-changes-12#foreground-service-launch-restrictions
富内容插入 (rich content insertion) - 用户喜欢看图像、视频和其他富有表现力的内容,但在应用中插入和移动这些内容并不总是那么容易。为了让您的应用能够快速接收富内容,我们引入了一个新的统一 API,让您能够接受任何来源的内容: 剪贴板、键盘或拖放。您可以将新接口 OnReceiveContentListener 附加到界面组件上,并在通过任何机制插入内容时获得回调。此回调将成为代码处理所有内容插入的唯一位置,从纯文本和样式文本到标记、图像、视频、音频文件等。为了实现向下兼容,我们已将统一的 API 加入了 AndroidX。请访问官方文档了解详细信息。
OnReceiveContentListener https://developer.android.google.cn/reference/android/view/OnReceiveContentListener OnReceiveContentListener (AndroidX) https://developer.android.google.cn/reference/androidx/core/view/OnReceiveContentListener 官方文档: 接收内容的统一 API https://developer.android.google.cn/about/versions/12/features/unified-content-api
音频耦合触感效果 (audio-coupled haptic effect) - 在 Android 12 中,应用可以通过手机的振动单元提供音频耦合触感反馈。振动强度和频率来自于音频会话,让您可以创建更沉浸的游戏和音频体验。例如,视频通话应用可以使用自定义铃声,通过触感反馈识别来电者,您还可以在赛车游戏中模拟崎岖地貌。请访问官方文档了解详细信息。
官方文档: HapticGenerator https://developer.android.google.cn/reference/android/media/audiofx/HapticGenerator
多声道音频 - Android 12 为包含空间信息的音频带来了多项增强。添加了对 MPEG-H 透传 (passthrough) 和分载 (offload) 模式的播放支持,音频混音器、重采样器和效果经过优化,支持多达 24 个通道 (过去最大仅支持 8 个)。
手势导航的沉浸模式 API 改进 - 我们简化了沉浸模式,使手势导航在多种场景下,如观看视频、阅读书籍或玩游戏时,更简单、更连贯。在游戏相关的全屏体验中,我们仍然会保护应用不受意外手势的影响,但在所有其他全屏或沉浸式体验中 (如视频播放器、阅读、图册),对于针对新平台的应用,我们将改变默认设置,允许用户通过单次滑动来进行导航。请访问官方文档了解详细信息。
确保应用不受意外手势影响 https://developer.android.google.cn/reference/android/view/WindowInsetsController#BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE 官方文档: 沉浸模式改进 https://developer.android.google.cn/about/versions/12/behavior-changes-12#immersive-mode-improvements
通知界面更新 - 我们对通知设计进行改版,使其更现代、更易用、更实用。在首个预览版中,您可以发现从抽屉式导航栏和控件到模板本身都有所变化。我们还优化了整个系统的转场和动画,使其更加流畅。作为更新的一部分,对于针对 Android 12 的应用,我们会使用自定义内容、图标以及展开提示来对通知进行美化,从而使其观感与其他通知一致。请访问官方文档了解详细信息。
官方文档: 自定义通知变更 http://developer.android.google.cn/about/versions/12/behavior-changes-12#custom-notifications
更快、更灵敏的通知 - 用户点按通知时,期望的是立即跳转到应用,越快越好。为了满足这一期望,开发者需确保点击通知应直接触发 Activity 启动,而不是使用 "蹦床" (通过广播接收器或服务) 启动 Activity。通知蹦床会造成明显的延迟,影响用户体验。为了保持通知的响应速度,Android 12 将阻止通知蹦床启动目标 Activity,我们也要求开发者不再使用这种实践模式。此项变更仅适用于针对新平台的应用,但对于所有应用,我们都会显示消息框,使您和用户可以看到蹦床。请访问官方文档了解详细信息。
官方文档: 通知蹦床不可由服务或广播接收器创建 https://developer.android.google.cn/about/versions/12/behavior-changes-12#notification-trampolines
改进的 Binder IPC 调用 - 在提升性能方面,我们关注如何降低系统可变性。经过对延迟和工作负载分布的深入观察,我们做出优化,减少了末端的中位数体验 (或 99% 的用例)。在此期间,我们有针对性地改进了系统绑定调用,增加了轻量级缓存策略,并专注于消除锁争用以改善延迟分布。这样一来,Binder 调用整体性能提升约 2 倍,特定调用的性能提升显著,如 refContentProvider() 提升了 47 倍、releaseWakeLock() 提升了 15 倍、JobScheduler.schedule() 提升了 7.9 倍。
应用兼容性
发布新的平台版本时,我们优先考虑应用的兼容性,让系统更新的体验更快、更顺畅。在 Android 12 中,大多数面向应用的变更都是可选的,以便您有更多时间调整适应。我们还更新了工具和流程,帮助您更快做好准备。我们还为 Google Play 系统更新添加了新功能,在 Android 12 设备上为您的应用提供更好的运行环境。
通过 Google Play 进行更多的 Android 更新 - 我们将继续扩大对 Google Play 系统更新 (Project Mainline) 的投入,为各设备上的应用营造更一致、更安全的环境。Android 12 新增了 Android Runtime (ART) 模块,支持向 Android 12 设备的核心运行时和库推送更新。我们可以提高运行时的性能和正确性,更有效地管理内存,并使 Kotlin 操作更为迅速 —— 这些都不再需要完整的系统更新。我们还扩展了现有模块的功能,例如,我们在一个可更新模块中提供了兼容媒体转码功能。
通过 Project Treble 和 Mainline 及时更新操作系统 https://android-developers.googleblog.com/2019/05/fresher-os-with-projects-treble-and-mainline.html
针对平板电脑、可折叠设备和电视的优化 - 随着越来越多的人开始在可折叠设备、平板电脑和电视等大屏幕设备上使用应用,现在是确保您的应用或游戏为这些设备做好准备的大好时机。您可以从针对平板电脑进行优化和为可折叠设备构建应用开始着手。同时,针对家庭中最大的屏幕,首个适用于 Android TV 的 Android 12 预览版也已推出。您不仅可以通过此预览版将最新的 Android 功能带到电视,还可以在全新的 Google TV 环境测试您的应用。请前往 Android TV 开发者网站了解更多信息并使用 ADT-3 开发者工具包上手开发。
平板电脑应用质量 https://developer.android.google.cn/docs/quality-guidelines/tablet-app-quality 为可折叠设备构建应用 https://developer.android.google.cn/guide/topics/ui/foldables Android TV 开发者网站 https://developer.android.google.cn/tv ADT-3 开发者工具包 https://store.askey.com/adt-3.html
非 SDK 接口列表更新 - 我们增加了受限制的非 SDK 接口,和往常一样,我们期待着您的反馈,也欢迎您提出公开 API 的需求。
非 SDK 接口 https://developer.android.google.cn/about/versions/12/non-sdk-12 提交公开 API 需求 https://developer.android.google.cn/guide/app-compatibility/restrictions-non-sdk-interfaces#feature-request
更轻松地针对变更进行测试和调试 - 为了让您更轻松地测试会影响应用的可选变更,我们已经将许多变更设置为可开关。您可以在开发者选项或 adb 中通过这些开关逐一强制启用或停用这些变更。请访问官方文档了解详细信息。
官方文档: 兼容框架变更 https://developer.android.google.cn/about/versions/12/reference/compat-framework-changes
平台稳定性里程碑 - 和去年一样,我们会提前告知我们的平台稳定性里程碑,让您有更多的时间规划应用兼容性工作。在此里程碑,我们不仅会锁定最终版的 SDK/NDK API,还会锁定最终内部 API 和面向应用的系统行为。我们预计将在 2021 年 8 月抵达平台稳定性里程碑。这样在正式发布前,您将有几周的时间进行最终测试。发布时间表详见:
https://developer.android.google.cn/about/versions/12/overview
即刻开始体验 Android 12
不论您想体验 Android 12 的功能、测试应用还是提交反馈,都可以从这次的开发者预览版开始。只需将设备系统映像下载并刷入 Pixel 3 / 3 XL、Pixel 3a / 3a XL、Pixel 4 / 4 XL、Pixel 4a / 4a 5G 或 Pixel 5 设备,即可立即开始使用。如果您没有 Pixel 设备,可以将 64 位系统映像刷入 Android Studio 中的 Android Emulator 使用。
分享使用反馈 https://developer.android.google.cn/about/versions/12/feedback 获取系统映像 https://developer.android.google.cn/about/versions/12/download
体验新功能和 API - 在开发者预览版的早期阶段,您的反馈至关重要。您可以在我们的跟踪页报告问题,也可以前往反馈和需求页面,通过特定功能的调查问卷提供直接反馈。 测试您现有应用的兼容性 - 这是为了了解您的应用是否受到 Android 12 中默认行为变更的影响。您只需要将当前发布的应用安装到运行 Android 12 的设备或模拟器上并开始测试即可。 使用可选变更项测试您的应用 - Android 12 拥有可选的行为变更,这些变更仅在您的应用以新平台为目标时才会造成影响。尽早了解和评估这些变更非常重要。为了更易于测试,您可以单独启用或禁用这些变更。
设置 Android 12 SDK https://developer.android.google.cn/about/versions/12/setup-sdk 反馈与需求 https://developer.android.google.cn/about/versions/12/feedback 兼容框架变更 https://developer.android.google.cn/about/versions/12/reference/compat-framework-changes
我们将在整个 Android 12 发布周期内定期更新预览版系统映像和 SDK。这次发布的初始预览版仅供开发者使用,不面向日常或消费者使用,因此我们仅提供手动下载。您可以将系统映像刷入 Pixel 设备,或在运行 Android 11 的设备上加载 (sideload) OTA 映像,在后一情况下您甚至不需要解锁引导加载程序 (bootloader) 或擦除数据。而无论使用哪种方式,在手动安装预览版本后,您都将能够通过无线方式自动获取未来所有后续预览版和 Beta 版更新。请访问官方文档了解详细信息。
官方文档: 获取 Android 12 https://developer.android.google.cn/about/versions/12/get
推荐阅读