昨天,谷歌宣布推出Android 11正式版,主要加强了聊天气泡、安全隐私、电源菜单,以及对瀑布屏、折叠屏、双屏的支持。Pixel、一加、小米、OPPO、realme手机用户将在未来几天收到更新推送,其他手机用户将在未来几个月内收到更新推送。开发者可以通过Android 开源项目 (AOSP)来下载最新的源代码。
对比最近两年发布的几个版本可以发现,安卓系统其实变化不是很大,底层改变也不是很多,更新的内容主要是围绕着消息、 隐私和如何更好地控制所有的智能设备来开发的。下面让我们来具体看一下Android 11的一些新特性。
以人为本、灵活控制与隐私安全
以人为本
Android 11 致力于凸显人的要素,并且更好的进行沟通,因此,Android 11 重塑了手机上进行沟通的方式,也让操作系统能识别出那些对您来说更重要的人,让您能更快速地和他们联系。对于开发者来说,Android 11 可以帮助您在应用中实现更深入的会话和更个性化的互动体验。主要体现在以下几个方面:
会话通知: 会显示在通知栏顶部的专门区域,其设计更凸显联系对象,且提供了会话特定的操作,例如以 Bubbles 的形式打开聊天、在主屏幕中创建会话快捷方式,以及设置提醒。 Bubbles :可以让用户在手机上进行多任务切换时依然保持对话可见并且可交互。消息和聊天应用可以通过基于通知的 Bubbles API,在 Android 11 上提供这种全新体验。 键盘提示整合功能: 可以让自动填写应用以及 IME (输入法编辑器) 在 IME 建议栏中安全地向用户提供基于上下文的实体和字符串,使得输入更加便利。
灵活控制
Android 11 让用户们得以快速访问所有的智能设备,并集中控制它们。开发者们则可以通过全新的 API 来帮助用户控制智能设备和管理媒体播放。
设备控制 ( Device Controls ) :让用户得以更快、更轻松地访问和控制他们连接的设备。只需长按电源按钮就可以调出设备控制菜单,一站式完成设备控制。应用也可以通过新的 API 出现在这个控制菜单中,详情可以查看官方文档。 媒体控制 ( Media Controls ): 让用户得以更快捷地切换音频和视频内容的播放设备——不论是耳机、麦克风还是电视,详情查看官方文档。
隐私安全
Android 11 对权限管进行了升级,可以让我们更好地管理敏感权限。 单次授权 :用户现在可以授予应用一次性的权限来访问设备的麦克风、摄像头或者位置信息。应用下次被使用时需要再次请求权限。详细信息请访问 官方文档。
后台位置 :如果想访问后台位置信息,现在需要用户在授予运行时权限外进行更进一步的操作。如果您的应用需要访问后台位置信息,系统会要求您必须先请求前台位置权限。您可以通过 单独的权限申请 来进一步要求访问后台位置信息,系统会将用户带到设置页面 (Settings) 中完成授权操作。
另外需要注意的是,我们在今年二月宣布,Google Play 开发者需要获得批准后才可以让应用在后台访问位置信息,以防止滥用。现在我们为开发者提供更长的时间来做出修改,在 2021 年之前我们不会强行要求现有的应用遵守本政策。详细信息请访问 官方文档。
权限自动重置 : 如果用户在很长一段时间里未使用某应用,Android 11 将 “自动重置” 所有与该应用关联的运行时权限并通知用户。在用户下次使用该应用时,应用可以再次请求权限。详细信息请访问 官方文档。
分区存储: Android一直在努力更好地保护外部存储上的应用和用户数据,还加入了更多的改进以便让开发者更轻松地进行迁移。详细信息请访问 官方文档。
Google Play 系统更新:自去年发布以来,Google Play 系统更新让我们能更快速地更新操作系统核心组件,并覆盖 Android 生态系统中的众多设备。在 Android 11 中,可更新的模块数量增加了一倍有余,新增的 12 个可更新模块,为用户和开发者带来更好的隐私性、安全性和一致性。
BiometricPrompt API :开发者现在可以通过 BiometricPrompt API 来指定其应用所需的生物识别身份验证强度类型,用来解锁或者访问应用中的敏感内容。为了向下兼容,我们也将这些功能加入到了 Jetpack Biometric 开发库 中。随着工作的进展,我们会为大家带来进一步的更新。
身份认证 API ( Identity Credential API ) - 这个 API 会带来全新的使用场景,支持包括驾驶执照、国民身份证和数字身份证。我们正在与各政府机构和行业伙伴合作,以确保 Android 11 为数字化身份认证体验做好准备。
实用创新
更强的 5G 支持 :Android 11 可以让开发者利用 5G 网络更快的速度和更低的延迟。您可以知晓用户何时 连接到 5G 网络,查看 连接是否处于计费状态,并且 估测连接的带宽。为了帮助您即刻打造 5G 体验,我们也在 Android Emulator 中加入了 5G 支持。请访问 5G 开发者网页,了解如何在 Android 上使用 5G 功能。
新的屏幕类型 :设备厂商们也在持续进行创新,将新的屏幕形态投入市场,包括挖孔屏和瀑布屏。Android 11 已经在平台中增加了对这些屏幕的支持,并提供了相应的 API 方便您优化应用。您可以通过现有的 Display Cutout API 来管理挖孔屏和瀑布屏。您可以通过设置 新的窗口布局属性 来使用整个瀑布屏,并通过 瀑布屏边衬区 (insets) API 来管理屏幕边缘附近的互动。
呼叫过滤服务 : Android 11 可以帮助呼叫过滤应用更好地管理骚扰电话。应用在呼叫详细信息中可以获取来电的 STIR/SHAKEN 验证状态 (这个标准可以防止来电 ID 欺诈),并能报告拒接来电的原因。应用还可以自定义系统提供的 呼叫后屏幕 (post call screen),方便用户执行诸如 “将呼叫方标记为骚扰电话” 或 “添加到联系人” 之类的操作。
优化与品质
操作系统弹性 :在 Android 11 中,我们通过对内存回收操作 (比如根据 RSS HWM 阈值强制用户无法感知的进程重启) 进行微调,使操作系统整体更具动态性和弹性。另外,为了改善性能和内存的使用,Android 11 还增加了 Binder 缓存,通过缓存那些检索相对静态数据的系统服务,优化了使用率高的 IPC 调用。Binder 缓存还通过减少 CPU 时间延长了电池寿命。
同步 IME 切换效果 : 这是一组全新的 API,让您可以在 IME (输入法编辑器,也叫软键盘) 和系统栏进出屏幕时同步调整应用中的内容,从而更轻松地创建出自然、直观、流畅的 IME 切换效果。为了确保切换时做到逐帧精确,新的 WindowInsetsAnimation.Callback API 会在系统栏或 IME 移动时逐帧告知应用边衬区的变化。此外,您可以通过新的 WindowInsetsAnimationController API 控制系统 UI,包括系统栏、IME、沉浸模式等。
HEIF 动画可绘制对象 :ImageDecoder API 现在允许您解码和渲染存储在 HEIF 文件中的图像序列动画,方便您引入高品质的素材,同时最大程度地减少流量消耗和 APK 尺寸。相对于 GIF 动画,HEIF 图像序列可以显著减小文件尺寸。
原生图像解码器 :应用可以使用新的 NDK API 来通过原生代码解码和编码图像 (如 JPEG、PNG、WebP),以便进行图形或后期处理,而且因为您无需捆绑外部代码库,从而得以保持较小的 APK 尺寸。原生解码器还可以从 Android 持续的平台安全更新中获益。
MediaCodec 中的低延迟视频解码: 低延迟视频对于 Stadia 等实时视频流应用和服务至关重要。支持低延迟播放的视频编解码器会在解码开始后尽快返回流的第一帧。应用可以使用新 API 来针对特定编解码器 检查 和 配置 低延迟播放。
可变刷新率 : 应用和游戏现在可以通过 新的 API 为其窗口设置首选帧率。大多数 Android 设备以 60Hz 的刷新率更新屏幕,但是某些设备支持多种刷新率,例如 90Hz 和 60Hz,并可在运行时切换。在这些设备上,系统会基于首选帧率来为应用选择最佳刷新率。您可以通过 SDK 和 NDK 来使用该 API。
动态资源加载器: Android 11 提供了一个新的公开 API 来让应用在运行时动态加载资源和素材。通过 Resource Loader 框架,您可以在应用或游戏中包含一套基本资源,然后在运行时根据需要加载其他资源,或更改已加载的资源。
Neural Networks API (NNAPI) 1.3: 我们持续增加算子和控制,以支持 Android 设备上的机器学习。为了优化常见的使用场景,NNAPI 1.3 增加了优先级和超时、内存域 (memory domains) 以及异步指令队列的 API。新的算子支持包含有符号整数非对称量化以及分支和循环的高级模型,hard-swish 算子则可以用于加速下一代设备上视觉模型 (如 MobileNetV3)。
开发者体验
应用兼容性工具: 我们努力将大多数 Android 11 行为变更设置为可选择开启,从而最大限度地减少对兼容性带来的影响,除非您将应用的 targetSdkVersion 设置为 30,否则这些变更不会生效。如果您是通过 Google Play 发布应用,则有一年多的时间来选择支持这些变更,但我们建议尽早开始测试。为了帮助您进行测试,Android 11 允许您单独开启或关闭其中的许多变更。详细信息请访问 官方文档。
应用退出原因 :了解应用退出的原因以及当时的状态十分重要——包括应用所在的设备类型、内存配置和运行场景。Android 11 通过 退出原因 API 让这个事情变得更加容易: 您可以使用该 API 来查看应用最近退出的 详细信息。
数据访问审核: 数据访问审核可以让您更好地了解自己的应用访问用户数据的情况,以及访问来自的用户流程。例如,它能帮您识别无意的私有数据访问,不论其来自于您自己的代码还是其他 SDK。详细信息请访问 官方文档。
ADB 增量安装 ( ADB Incremental ) : 在开发过程中使用 ADB (Android Debug Bridge) 安装体积较大的 APK 可能会拖慢速度,影响您的工作效率,对 Android 游戏开发者而言尤其如此。Android 11 带来了 ADB Incremental,现在从开发机向 Android 11 设备上部署大型 APK (2GB 以上) 的速度可以提高 10 倍之多。
Kotlin 可空性注解: Android 11 为公共 API 中的更多方法增加了可空性注解。而且,它将一些现有的注解从警告升级为错误。这可以帮助您在构建时就发现问题,不用等到运行时才出错。阅读 此文 了解更多。
Android 11 适配
兼容性适配
随着Android 11 版本的发布,现在你可以进行应用的兼容性测试并发布更新的应用了。
作为一个Android开发者,你需要重点关注 针对所有应用的行为变更,重点关注以下几个方面的适配。
单次权限:现在,用户可以为位置信息、设备麦克风和摄像头授予单次使用权限。 外部存储访问权限 : 应用无法再访问外部存储空间中其他应用的文件。 Scudo Hardened Allocator :现在它是应用内原生代码的堆内存分配器。 文件描述符排查器 :此功能现在默认启用,以检测应用原生代码的文件描述符处理错误。
使用新功能和 API 改进您的应用
Android 11 提供了很多的 新功能和 AP,下面是一些您可以优先考虑的重点功能。
深色主题(自 Android 10 开始支持) : 通过添加 Dark Theme (深色主题) 或启用 Force Dark,确保为启用全系统深色主题的用户提供一致的体验。 手势导航 (自 Android 10 开始支持):请支持手势导航,包括提供边到边的沉浸式体验,以及确保自定义手势与默认手势配合良好。 共享快捷方式 (自 Android 10 开始支持) :想要接收共享数据的应用应该使用 共享快捷方式 API 来创建共享目标。想要发送共享数据的应用应确保使用 Android Sharesheet。 同步 IME 切换效果: 使用新的 WindowInsets 和相关 API 为用户提供流畅的切换效果。 新的屏幕类型 :对挖孔屏或瀑布屏设备,请确保根据需要针对这些屏幕测试和调整您的内容。详细信息请访问 官方文档。
除此之外,Android 11还在以下功能上做了改进和优化。
会话 :消息和通信应用可以通过提供长效 共享快捷方式 和在通知中呈现对会话来融入用户的对话体验。 聊天气泡 ( Bubbles ) :Bubbles 可以在多任务切换时依然保持对话可见及可用。应用通过基于通知的 Bubbles API 来实现此功能。 5G: 如果您的应用或内容可以利用 5G 更快的速度和更低的延迟,请参考我们的 开发者资源,开始构建 5G 体验。 设备控制: 如果您的应用支持外部智能设备,请确保这些设备可以从新的 Android 11 设备控制菜单访问。 媒体控制: 对于媒体应用,我们建议支持 Android 11 媒体控制,这样用户就可以从快速设置 (Quick Settings) 菜单中管理媒体播放。
参考:Android 11 Beta版