在上周的世界移动通信大会 (Mobile World Congress) 上,我们看到由开发者、设备厂商以及芯片合作伙伴组成的 Android 生态系统不断为全球用户创造美妙体验。
今天,我们要向各位介绍下一个版本的操作系统 —— Android P 的首个开发者预览版。该版本早期仅面向开发者发布,每一位开发者都是我们最信任的测评人。及时获取您的反馈意见对我们至关重要,我们会根据您的反馈优化平台来更好地满足您的开发需求。希望您可以尽早着手试用 Android P 预览版的新功能和新 API,并把您的想法和建议通过留言的方式及时告诉我们。
预览版的首发只是第一步 —— 我们在五月的 Google I/O 大会上将会有更多的分享,敬请关注!
值得在您的应用中尝试的新功能
这里简要介绍一下这个开发者预览版中几项有趣的新功能,同时我们希望大家尝试后提供反馈。
使用 WiFi RTT 进行室内定位
精确室内定位一直是应用开发者面临的一个长期挑战,但它为定位服务提供了新的机会。Android P 为 IEEE 802.11mc WiFi 协议添加了平台支持 (也称为 WiFi 往返时间,RTT),这可以让您在应用中使用室内定位。
拥有硬件支持的 Android P 设备可以让您的应用使用 RTT API 测量与附近 WiFi 接入点 (AP) 的距离,设备不需要连接到 AP 便可以使用 RTT。为了保持隐私,只有手机能够确定距离,AP 无法做到这一点。
通过测量从设备到三个或更多 AP 的距离,您可以以 1 到 2 米的精度确定设备位置。这种精确度允许您创建更多新的体验:室内导航、基于位置的细粒度服务,例如,模糊语音控制 ( “打开这里的灯” ) ;基于位置的资讯服务 ( “这些优惠是针对这个产品的吗?” )。
凹口屏幕的支持
现在应用可以充分利用最新的全面屏设备来展示内容。我们在 Android 平台加入了对凹口屏幕的支持,並提供 API 供您使用,从而管理内容展示方式。
本功能可以在应用中无缝工作,系统会管理状态栏的高度从而将您的内容与裁切区域分开。如果您拥有重要的沉浸式内容,则还可以使用新的 API 查看裁切形状并创建全屏布局。您可以调用 getDisplayCutout() 来判断本地设备是否具有凹口屏幕,然后再确定裁切区域的位置和形状。平台添加了一个新的窗口布局属性 layoutInDisplayCutoutMode 让您告诉系统如何以及何时将您的内容相对于裁剪区域进行布局。
我们加入开发者选项来模拟任意设备上的裁切画面,从而简化凹口屏幕支持在您应用上的构建以及测试流程。我们建议您针对画面裁切功能进行应用测试以确保内容显示无误。
△内含沉浸式内容的应用可以使用带裁切区域的全屏显示功能。
消息通知的改进
在 Android P 中,我们特别重视改进通知的可视性和功能性。全新的 MessagingStyle 通知突出强调了来信人以及您可采用的回复方式。您可以显示对话,附加照片和表情,甚至使用智能回复。具体细节请查看文末相关链接。
△在 MessagingStyle 通知中,您可以显示对话和智能回复 (左图),甚至添加图片和表情 (右图)。
多摄像头 API
现在,在运行 Android P 的设备上您可以通过两个或更多实体摄像头同时访问视频流。所以您可以在具有双前置或双后置摄像头的设备上,实现单摄像头无法实现的创新功能:如无缝变焦、散景和立体视觉。该 API 还允许您调用可以在两台或更多台摄像头之间自动切换的逻辑或混合摄像头视频流。支持多摄像头的 Android P 设备将在未来一年面市,我们期待您的令人振奋的新创意。
摄像头的其他改进还包括:利用新的会话参数来有效减少初始捕捉时的延迟,表面共享技术让摄像头客户端无须重启视频流便可处理各种使用情况。此外,我们还添加了基于显示器的闪光灯支持以及 API 和 OIS 时间戳的访问权限,以实现应用层面的图像稳定和特效。
用于位图和 drawable 的 ImageDecoder
Android P 引入了一种更简单的方法来将图像解码为位图或 drawable,即用 ImageDecoder 替代了 BitmapFactory。ImageDecoder 允许您从字节缓冲区、文件或 URI 创建位图或 drawable。它比 BitmapFactory 多出了几个优势,包括对精确缩放的支持,单步解码至硬件存储器,对解码后处理的支持,以及对动画图像的解码。
通过调用 setResize() 时指定目标尺寸,您可以解码并缩放到一个确切的大小。您还可以调用 getSampledSize() 以特定采样率获取图像尺寸,然后缩放到这些尺寸。如果您想要对图像进行后期处理 (例如应用圆角蒙版或更复杂的效果) ,您可以给 ImageDecoder 传递任何 android.graphics.PostProcessor。您也可以使用 ImageDecoder.decodeDrawable() 直接创建 drawable。如果编码图像是动画 GIF 或 WebP,则返回的 drawable 是新加入的 AnimatedImageDrawable 的一个实例。
HDR VP9 视频、HEIF 以及媒体 APIs
Android P 增加了对 HDR VP9 Profile 2 的内置支持。现在,您可以在支持 HDR 的设备上,把启用 HDR 功能的视频内容从 YouTube、Play Movies 等资源站点上分享给您的用户。我们还添加了对 HEIF 图像编码的支持,这种格式被广泛使用,改善了照片压缩效果,并减少了所需的存储空间和网络流量。一旦确定您的应用与该数据格式兼容,可用于分享或者显示,不妨尝试利用 HEIF 为图像储存的格式。此外,您还可以通过 ImageDecoder 和 Bitmap Factory 将 jpeg 文件转化为 heic 文件,从 jpeg 文件中获取位图。您亦可使用新支持库 alpha 版本中的 HeifWriter,从字 YUV 节缓冲区、表面以及位图中写入 HEIF 静态图像。
同时,我们也正在加强和重构媒体 API,以使它们更易于开发和整合,请留意今年晚些时候更具体的发布内容。
JobScheduler 中的数据费用敏感度
JobScheduler 是 Android 的核心服务,帮助您在Doze、App Standby 和 Background Limits 状态更改时,更好地管理定时任务及工作。在 Android P 中,JobScheduler 可以更好地为用户处理与网络相关的任务,并与运营商单独提供的网络状态信号相协调。
任务现在可以声明其估计的数据大小、信号预取以及指定详细的网络要求 —— 运营商可以报告网络状况是拥塞还是不计量,然后,JobScheduler 会根据网络状态管理工作。例如,当网络拥塞时,JobScheduler 可能推迟大型网络请求。而在网络可以不计量使用时,则可以运行多种预加载作业 (例如,预读标题) 来改进用户体验。
添加任务时,尝试使用 setEstimatedNetworkBytes()、setIsPrefetch() 和 setRequiredNetwork() 来帮助 JobScheduler 妥善处理工作。执行作业时,请务必使用 JobParameters.getNetwork() 返回的 Network 对象,否则您将隐式地使用设备的默认网络,该网络可能不符合您的要求,从而导致意外的数据使用。
神经网络 API 1.1
我们在 Android 8.1 中引入了神经网络 API ,以加速 Android 上设备内置的机器学习。在 Android P 中,我们对这个 API 进行了扩展和改进,增加了对 9 个新操作的支持,它们分别是 Pad、BatchToSpaceND、SpaceToBatchND、Transpose、Strided Slice、Mean、Div、Sub 和 Squeeze。如果您拥有 Pixel 2 设备,则 DP1 版本现在包含一个带加速的 Qualcomm Hexagon HVX 驱动程序,可用于量化模型。
自动填充的改进
在 Android P 中,我们继续根据用户和开发者的反馈改进自动填充框架。除了主要的 Bug 修正之外,此版本还包含新的 API,允许密码管理程序 (Password Manager) 改进 Autofill 用户体验,例如更好的数据集过滤,输入清理和兼容模式。尤其值得一提的是,兼容性模式对用户体验作出了很大的改善,因为在还没有完全自动填充支持的应用程序中它允许密码管理员采用基于辅助功能的方法,并且不会对性能或安全性造成影响。 所有新功能的详细信息请查看文末相关链接。
用于 NFC 支付和安全交易的 Open Mobile API
Android P 将 GlobalPlatform Open Mobile API 的实现添加到 Android 中。在支持的设备上,应用可以使用 OMAPI API 访问 Android 设备上的安全元素 (SE) ,以启用智能卡支付等安全服务。硬件抽象层 (HAL) 提供了必要的 API,用于枚举多种可用的 SE (如 eSE,、UICC 等) 。
不断加强 Android 的基础
在 Android P 中,我们将一如既往地致力于把 Android 打造成为最佳的开发平台。
应用安全
在 Android P 中,我们正在转向更一致的用户界面 (UI),以便跨应用和设备进行指纹验证。Android 现在提供了一个标准系统对话框,以提示用户触摸指纹传感器,并且在文案和位置管理方面会根据不同的设备做相应的匹配。同时,应用可以使用新的 FingerprintDialog API 触发系统指纹对话框。我们建议您尽快切换到这个新的系统对话框。
我们一直致力于将所有网络流量从明文 (未加密的 HTTP) 转向 TLS,我们还将更改网络安全性配置 (Network Security Configuration) 的默认值,以阻止所有明文流量。如果您正在使用网络安全性配置,请通过 TLS 建立连接,除非您明确选择在特定域名使用明文传输。
用户隐私
为了更好地保证隐私,Android P 限制所有处于空闲状态的应用对话筒、摄像头和所有 SensorManager 传感器的访问。当一个应用的 UID 空闲时,麦克风将会报告系统 “无音频信号”,传感器将会停止报告事件。应用使用的摄像头也会断开连接,如果应用尝试使用它们,则会生成错误。在大多数情况下,这些限制不会为现有应用带来新的问题,但我们仍然建议您从应用中移除此类传感器请求。
从长远来看,我们正在努力为每个网络中对应的 MAC 地址随机化提供支持。 在有支持的 Android P 设备上,您可以通过新的开发者选项启用此功能的实验版,以进行测试。
Android P 还让用户控制是否允许访问平台 build.serial 识别码 (它被放在 READ_PHONE_STATE 权限里) 。自 Android 8.0 以来,直接访问此识别码的功能已被弃用。想要访问 build.serial 识别码的话,您可以使用 Build.getSerial() 方法。
ART 性能提升
我们将继续致力于通过 ART 运行时改善应用性能和效率提升。我们扩展了 ART 对执行配置文件的使用,以优化应用并减少已编译应用代码的内存占用量。ART 现可使用配置文件信息在设备上重写 DEX 文件,在多个人气的应用中内存占用减少高达 11%。我们期望这样借此减少系统 DEX 内存使用量并加快应用启动时间。
Kotlin 优化
Kotlin 已经成为一流的 Android 开发语言。 如果您还未尝试,还在等什么呢?我们还在 Kotlin 性能方面进行长期投入,同时继续加大对 Kotlin 的支持,包括优化 Kotlin 代码性能。在 Android P 中,您会看到这项工作的第一个成果:我们已经改进了一些编译器优化,尤其是那些针对循环的编译器优化,以实现更好的性能。我们还将继续与 JetBrains 合作,优化 Kotlin 生成的代码。只需保持更新 Android Studio 上的 Kotlin 插件,您就能获得所有最新的 Kotlin 性能更新。
电耗优化
在 Android P 中我们继续优化 Doze、App 待命模式以及后台限制,进一步改善电池寿命。请务必以这些模式为应用进行测试并分享反馈。
针对现代 Android
Android P 由我们的长期战略所塑造,以实现 Android 平台基础和运行在其上的应用的现代化。正如我们最近宣布的那样 ,Google Play 将要求所有应用在 2018 年 11 月之前针对 Android Oreo (targetSdkVersion 26 或更高版本) 进行更新,并支持将在 2022 年提供 64 位支持。
在做出这些改变的同时,Android P 将在安装针对 Android 4.2 之前的平台 (targetSdkVersion 小于17) 的应用时通过对话框向用户发出警告,未来平台将会继续提高版本下限。我们鼓励每一个 Android 开发者现在就着手计划迁移至 API 26,并尽快开始迁移工作。我们期待着您的应用能够充分利用现代 Android,并为用户带来更好的体验。
通过公开 API 增强应用兼容性
用户和开发者面临的一个关键问题是应用兼容性 —— 确保应用从一开始就支持新平台,并让用户远离崩溃风险,以及开发者不再需要针对兼容性问题做紧急更新。从 SDK 到 NDK 都使用 Android 公开 API 的应用拥有较好的兼容性,而使用私有 Android 接口和库的应用则兼容性较差。
因此,随着 Android P 的到来,我们开始逐步限制对特定非 SDK 接口的访问权限,并要求开发者 (包括 Google 内部的应用团队) 使用公开 API 里的替代接口。如果您没有公开的替代接口可用,请在文章下方留言 “【无公开 API 替代接口】+ 问题描述 “,我们希望确保开发者尽量流畅地走完这个过程,所以我们会根据您的反馈,确保新版本发布时只影响那些可以轻松被开发者迁移到公共替代接口的 API。
简单几步开始使用
首先, 使您的应用兼容,让您的用户无缝过渡到 Android P。只需下载设备系统映像或系统映像,安装您当前的应用并测试。您的应用应该能够流畅运行,并妥善处理应用行为变动。在做出必要更新后,我们建议您立即发布到 Google Play,不必更改应用的平台版本。
请记住,您不须要拥有受支持的 Pixel 设备即可针对 Android P 进行测试或开发。对于大多数情况,我们强烈建议在 Android 模拟器上设置 Android 虚拟设备作为测试环境。如果您最近没有尝试过模拟器,请务必试试。您会发现它速度非常快,可以在 6 秒内启动,使用方便,甚至可以模拟下一代屏幕。例如,长屏幕和带摄像头裁切区域的异型全面屏。
接下来, 将您应用的目标平台更改为 “P”,并使用完整的 Android P 体验运行。将应用的 targetSdkVersion 设置为 “P” 和 compileSdkVersion 设置为 “android-P”,构建并测试。请务必阅读针对 P 的应用行为变更,以查找您想要测试并可能需要调整的地方。
准备就绪后,深入 Android P 并了解在您的应用中可使用的诸多新功能和 API 。为了更方便地探索新的 API,请查看 API 差异报告以及 Android P API 参考。有关预览版的时间线和支持资源的详细信息,请查看文末 “Android P 开发者预览版” 链接。
要开始围绕 Android P 进行开发工作,请将 P Developer Preview SDK 和工具下载到 Android Studio 3.1 或使用最新的 Android Studio 3.2 Canary 版本。此外,我们还会发布 28.0.0 支持库的 alpha 版本供您试用。
接下来会有什么?
本次推出的 Android P 开发者预览版包含一个带有系统映像的更新 SDK,用于在官方 Android 模拟器、Pixel、Pixel XL、Pixel 2 和 Pixel 2 XL 设备上进行测试。
我们计划在整个预览阶段中定期更新预览系统映像和 SDK。此初始版本仅供开发者使用,不适用于日常或终端用户,因此仅限手动下载和安装 (请查看文末 “Android P 开发者预览版” 链接)。
随着我们逐步接近推出最终产品,也将会邀请消费者前来尝试,届时我们将通过 Android Beta 开放注册。请继续关注我们发布的细节,但请注意,Android Beta 目前不适用于 Android P。