欢迎体验 | Android 12 开发者预览版 3
作者 / Dave Burke,工程副总裁
Android 12 开发者网站 https://developer.android.google.cn/about/versions/12 提交反馈 https://developer.android.google.cn/about/versions/12/feedback
更好的用户体验工具
今天发布的新版本为您带来了新的工具,助您为用户提供更加精美的体验和更好的性能。下面介绍其中的一些亮点。
改进的应用启动体验 - Android 12 中应用启动的体验更加一致,更令人愉悦。我们为所有应用添加了新的应用启动动画,在启动时屏幕会显示应用图标,并过渡到应用本身。新的体验为每个应用的启动带来了标准化的设计元素,但我们也允许进行定制,以便应用保持自己独特的品牌特色。例如,您可以使用新的 SplashScreen (启动屏幕) API 和资源来管理启动屏幕的背景颜色,用自定义图标或动画来替换静态的启动图标,控制呈现应用的时机,指定这套体验是使用浅色模式或是深色模式,还可以管理退出动画。
SplashScreen (启动屏幕) https://developer.android.google.cn/reference/android/window/SplashScreen 启动屏幕背景颜色 https://developer.android.google.cn/reference/android/R.attr#windowSplashScreenBackground 使用自定义图标 https://developer.android.google.cn/reference/android/R.attr#windowSplashScreenBrandingImage 使用动画图标 https://developer.android.google.cn/reference/android/R.attr#windowSplashScreenAnimatedIcon 管理退出动画 https://developer.android.google.cn/reference/android/window/SplashScreen.OnExitAnimationListener
所有应用都已默认启用了这个新特性,您无需做任何事情即可获益。我们建议您在应用中尽快测试这个新特性,尤其是已经在使用启动屏幕的应用。欢迎大家查看新的 API 并开始定制应用启动体验,并和我们分享使用反馈。请访问官方文档了解详细信息:
新的通话通知模板 - 正在拨入或进行的通话对用户来说很重要,它们需要易于查看和管理。在 Android 12 中,我们改进了呼叫通知,提升了可见性,且更易于快速浏览,并加强了与其他通知组件的一致性。如果您的应用 (比如拨号器应用或带有视频通话的聊天应用) 能够提供电话功能,不妨试试新增的 CallStyle 模板。您可以用它来创建来电、呼出和屏蔽电话的通知。每种类型都支持多种操作,包括默认操作和应用自定义操作。您还可以附加大型头像图片,提供文字,并设置按钮颜色。操作系统赋予了 CallStyle 通知高度的可见性,比如将它们置于通知区块的顶部。请访问官方文档了解详细信息。
官方文档: 新的通话特性 https://developer.android.com/about/versions/12/features#new-calls CallStyle https://developer.android.google.cn/reference/android/app/Notification.CallStyle.html
精确闹钟的新权限 - 闹钟是应用安排定时工作的重要方式。在大多数情况下,应用应该使用非精确闹钟 (inexact alarms),这样可以减少电池消耗。Android 系统可以通过低电耗模式 (Doze) 和应用待机模式 (App Standby) 等机制管理这些闹钟,从而最大限度地减少设备唤醒和电池消耗。对于那些需要精确闹钟的情况,例如闹铃应用和定时器,您仍然可以使用精确闹钟 (exact alarms)。精确闹钟功能非常方便可靠,但也会加大电量消耗,在过度使用的情况下尤其如此。所以在 Android 12 中,我们正在做出一些改变,让用户拥有更多的控制权。
非精确闹钟 https://developer.android.google.cn/reference/android/app/AlarmManager#setAndAllowWhileIdle(int,%20long,%20android.app.PendingIntent) 针对低电耗模式和应用待机模式进行优化 https://developer.android.google.cn/training/monitoring-device-state/doze-standby 精确闹钟 https://developer.android.google.cn/reference/android/app/AlarmManager#setExact(int,%20long,%20android.app.PendingIntent)
针对 Android 12 的应用如果想要使用精确闹钟,现在需要申请一个新的权限: SCHEDULE_EXACT_ALARM。这是一个一般权限,所以只要您的应用在清单中进行了声明,就会在第一次启动时被自动授予该权限。不过,我们也会让用户看到拥有这个权限的应用,并让他们通过设置中的特殊应用权限 (Special App Access Permissions) 授予和撤销这个 "闹钟和提醒" 权限。如果您的应用需要精确闹钟,请务必处理好应用不再拥有这个权限的情况。我们已经添加了一个新的 API,canScheduleExactAlarms(),供您检查应用的权限状态。一般来说,我们建议您尽可能将应用调整为不再需要使用精确闹钟。请访问官方文档了解详细信息。
官方文档: 精确闹钟权限 https://developer.android.com/about/versions/12/behavior-changes-12#exact-alarm-permission SCHEDULE_EXACT_ALARM https://developer.android.google.cn/reference/android/Manifest.permission#SCHEDULE_EXACT_ALARM canScheduleExactAlarms() https://developer.android.google.cn/reference/android/app/AlarmManager.html#canScheduleExactAlarms()
改进的网络链接 - 在 Android 12 中,我们正在做出一些改变,以确保用户能更快速顺畅地访问内容。首先,我们修改了对未经 Android 应用链接 (App Links) 验证或者未经用户手动批准的链接的处理方式。现在操作系统会直接在默认浏览器中打开这些链接,而不是展示一个选择对话框。为了让用户更容易批准您的应用使用链接,我们准备了一个新的 Intent 来将用户带到设置的 "默认打开方式" 选项中。如果您希望确保只有您的应用能处理来自您的域的链接,您可以使用 App Links。我们还添加了新的 adb 命令来帮助您配置和测试自己的链接。请访问官方文档了解详细信息。
官方文档: 网络 Intent 解决方案 https://developer.android.google.cn/about/versions/12/web-intent-resolution Android 应用链接 https://developer.android.google.cn/training/app-links 新的 Intent https://developer.android.google.cn/reference/android/provider/Settings?ENABLE_REBRAND=false#ACTION_APP_OPEN_BY_DEFAULT_SETTINGS
丰富的震动体验 - 我们扩展了提供的工具,用来为 UI 事件打造富有情景感的震动反馈,为游戏提供更沉浸愉悦的体验,以及营造有助于提升生产力的触觉效果。通过活用最新震动单元提供的更宽广的频率范围,我们带来了更具表现力的震动效果,比如 "低声滴答"。游戏开发者也可以控制游戏手柄里的多个不同的震动单元,让它们同步产生相同的震动效果,或是通过多个单元的组合产生不同的效果。我们推荐开发者使用这些常量和原语来构建丰富的震动效果: 常量用于强化 UI 事件,震动合成器 (haptic composer) 用于组合不同的原语来实现更复杂的效果。您现在可以在 Pixel 4 设备上完整体验这些 API,我们也在和设备制造商合作伙伴们一起为生态系统内的用户们带来最新的震动支持。
低声滴答: PRIMITIVE_LOW_TICK https://developer.android.google.cn/reference/android/os/VibrationEffect.Composition#PRIMITIVE_LOW_TICK 震动单元: VibratorManager https://developer.android.google.cn/reference/android/os/VibratorManager.html 多个震动单元: CombinedVibrationEffect https://developer.android.google.cn/reference/android/os/CombinedVibrationEffect.html 常量: HapticFeedbackConstants https:///developer.android.google.cn/reference/android/view/HapticFeedbackConstants 原语/震动合成器: VibrationEffect.Composition https://developer.android.google.cn/reference/android/os/VibrationEffect.Composition#summary
视频编码改进 - Android 12 对控制视频编码量化参数 (Quantization Parameter, QP) 范围的键集进行了标准化,使开发者能够规避厂商专用代码。新的键已经加入 MediaFormat API 和 NDK Media 库。此外,视频编码方需要设置最低视频质量阈值,以确保当视频比较复杂时用户不会看到极低质量的画面。
MediaFormat API https://developer.android.google.cn/reference/android/media/MediaFormat.html#KEY_VIDEO_QP_B_MAX NDK Media 库 https://developer.android.google.cn/ndk/reference/group/media
Camera2 设备厂商扩展 - 我们的许多设备厂商合作伙伴已经构建了自定义的摄像头效果,比如散景 (bokeh)、HDR、夜间模式等,他们希望应用能够使用这些效果,从而在各自的设备上创造出差异化的体验。我们已经通过 CameraX 库中的一组厂商扩展为这些自定义效果提供了支持,现在在 Android 12 中,我们也将在平台中直接提供这些厂商扩展。这样一来,那些拥有复杂的 Camera2 实现的应用就可以方便地使用这些扩展,而无需对之前的代码进行重大修改。扩展 API 提供的效果与 CameraX 中的效果完全相同,而且这些效果已经在许多不同的设备上得到支持,因此您可以开箱即用。请访问官方文档了解详细信息。
官方文档: CameraExtensionCharacteristics https://developer.android.google.cn/reference/android/hardware/camera2/CameraExtensionCharacteristics CameraX: 设备厂商扩展 https://developer.android.google.cn/training/camerax/vendor-extensions Camera2 https://developer.android.google.cn/reference/android/hardware/camera2/package-summary CameraX 设备 https://developer.android.google.cn/training/camerax/devices
四拜耳 (Quad bayer) 摄像头传感器支持 - 如今,许多 Android 设备都配备了超高分辨率的摄像头传感器,通常采用四/九 (quad / nona) 拜耳模式,在图像质量和低光性能方面提供了极大的灵活性。在 Android 12 中,我们将引入新的平台 API,让第三方应用能够充分利用这些强大灵活的传感器。新的 API 支持这些传感器的独特行为,并考虑到了它们在全分辨率或 "最大分辨率" 模式与 "默认" 模式下运行时可能支持不同的流配置与组合。
CameraMetadata https://developer.android.google.cn/reference/android/hardware/camera2/CameraMetadata.html#REQUEST_AVAILABLE_CAPABILITIES_ULTRA_HIGH_RESOLUTION_SENSOR
更快的机器学习 - 在 Android 12 中,我们通过在关键领域的投入,使得开发者们能充分利用 ML 加速器,并通过 Neural Networks API 始终获得最佳的性能表现。在性能方面,通过引入填充、同步隔离和可重用执行对象等手段,我们得以将推断调用的开销降低了一半以上。我们还通过 Google Play 服务让 ML 加速器驱动得以独立于平台版本进行更新。这让开发者们能在任何兼容的设备上使用最新的驱动,同时也让 ML 的性能改进和错误修复得以更快地抵达用户手中。
标准化 GPU 计算 - 我们正在废弃 RenderScript APIs,转而采用跨平台的 GPU 计算解决方案,如 Vulkan 和 OpenGL。我们希望您可以充满信心地在 GPU 硬件上运行高性能工作负载。现在许多设备在出厂时仅支持使用 CPU 运行 RenderScript。现有的 API 将暂时继续工作,我们已经开源了一个 RenderScript 内置函数库,包含诸如使用高度优化的内置函数平台代码实现的模糊。我们还提供了使用 Vulkan 进行图像处理的示例和迁移指南。请阅读官方博文了解详细信息:
更好地调试原生代码崩溃 - 开发者们向我们反馈道,调试 NDK 相关的崩溃很困难。在 Android 12 中,我们提供了更多可操作的诊断,让调试变得更加简单。在这个平台上,我们使用崩溃转储文件 (称为 tombstone) 来调试原生崩溃,文件里包含了诊断各种问题所需的信息,包括通过 ART 进行调用堆栈展开 (unwinding),与 fdsan 集成,以及针对 GWP-ASan/HWASan/MTE 崩溃堆栈生成的录制文件。现在,我们通过 App Exit Reasons API,让应用得以访问其自身的 tombstone 文件。当您的应用通过 REASON_CRASH_NATIVE 使用 ApplicationExitInfo 时,您可以调用 getTraceInputStream() 来获取 protobuf 格式的 tombstone 数据。
崩溃转储和 Tombstone https://source.android.google.cn/devices/tech/debug#debuggerd 文件描述符排错程序 (fdsan) https://developer.android.google.cn/about/versions/11/behavior-changes-all#fdsan GWP-ASan https://developer.android.google.cn/ndk/guides/gwp-asan HWASan https://source.android.google.cn/devices/tech/debug/hwasan MTE https://source.android.google.cn/devices/tech/debug/tagged-pointers App Exit Reasons API https://developer.android.google.cn/reference/kotlin/android/app/ActivityManager#gethistoricalprocessexitreasons REASON_CRASH_NATIVE https://developer.android.google.cn/reference/kotlin/android/app/ApplicationExitInfo#reason_crash_native ApplicationExitInfo https://developer.android.google.cn/reference/kotlin/android/app/ApplicationExitInfo getTraceInputStream() https://developer.android.google.cn/reference/android/app/ApplicationExitInfo#getTraceInputStream()
更灵活的备份配置 - Android 的备份服务让用户可以毫不费力地将数据还原或迁移到新设备上。应用是用户体验的核心,确保用户能够转移应用数据,并继续使用应用十分重要。备份服务既支持云端备份到 Google Drive,也支持设备到设备的传输,开发者只需对应用进行极小的改动,就可以使用这些功能。对于以 Android 12 为目标的应用,我们正在改进服务,为您提供更多的灵活性和控制权。我们更新了 XML 配置格式,因此您现在可以为云端备份和设备到设备传输设置不同的规则。例如,您可以将体积较大的文件从云端备份中排除,但在设备到设备的传输中将其加入。您还可以为备份或传输分别设置加密需求。最后,如果您想关闭设备到设备传输的自动备份,请使用新的配置格式代替 allowBackup 清单属性。请访问官方文档了解详细信息。
官方文档: 备份还原 https://developer.android.google.cn/about/versions/12/backup-restore allowBackup https://developer.android.google.cn/reference/android/R.attr.html#allowBackup
https://developer.android.google.cn/about/versions/12
应用兼容性
反馈与需求 https://developer.android.google.cn/about/versions/12/feedback
Android 12 第一个 Beta 版即将到来,是时候开始进行兼容性测试,并确保您的应用准备就绪了。我们建议您在未来几周发布一个兼容更新。目前暂时不需要更改应用的 targetSdkVersion,但您可以通过行为变更切换开关来初步了解 Android 12 的可选变更对您的应用可能造成的影响。
迁移至 Android 12 https://developer.android.google.cn/about/versions/12/migration 兼容框架变更 https://developer.android.google.cn/about/versions/12/reference/compat-framework-changes
我们将于 2021 年 8 月达到平台稳定性里程碑,届时所有面向应用的系统行为、SDK/NDK API 和非 SDK 列表都将最后确定。届时您就可以完成最终兼容性测试,发布完全兼容的应用、SDK 或开发库。发布时间表详见:
平台稳定性里程碑 https://developer.android.google.cn/about/versions/12/overview#platform_stability
△ 开发者选项中的应用兼容性切换开关
即刻开始体验 Android 12
官方文档: 获取 Android 12 https://developer.android.google.cn/about/versions/12/get 分享使用反馈 https://developer.android.google.cn/about/versions/12/feedback 获取系统映像 https://developer.android.google.cn/about/versions/12/download
了解本次发布的完整信息,请访问 Android 12 开发者网站:
https://developer.android.google.cn/about/versions/12
推荐阅读