在上周的世界移动通讯大会 (Mobile World Congress) 上,咱们看到由开发者、设备厂商以及芯片合做伙伴组成的 Android 生态系统不断为全球用户创造美妙体验。android
今天,咱们要向各位介绍下一个版本的操做系统 —— Android P 的首个开发者预览版。该版本早期仅面向开发者发布,每一位开发者都是咱们最信任的测评人。及时获取您的反馈意见对咱们相当重要,咱们会根据您的反馈优化平台来更好地知足您的开发需求。但愿您能够尽早着手试用 Android P 预览版的新功能和新 API,并把您的想法和建议经过留言的方式及时告诉咱们。安全
预览版的首发只是第一步 —— 咱们在五月的 Google I/O 大会上将会有更多的分享,敬请关注!网络
这里简要介绍一下这个开发者预览版中几项有趣的新功能,同时咱们但愿你们尝试后提供反馈。框架
使用 WiFi RTT 进行室内定位机器学习
精确室内定位一直是应用开发者面临的一个长期挑战,但它为定位服务提供了新的机会。Android P 为 IEEE 802.11mc WiFi 协议添加了平台支持 (也称为 WiFi 往返时间,RTT),这可让您在应用中使用室内定位。ide
拥有硬件支持的 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 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 或更高版本) 进行更新,并支持将在 2019 年提供 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。
您的反馈意见对咱们来讲很是重要,因此热切欢迎您留言联系咱们,分享您的想法、建议或问题。