Android TV 录制

Android TV 录制

Android 7.0 Nougat 为用户和开发者引入了各种新功能和新特性。本文档重点介绍了面向开发者的全新内容。

请务必查看 Android 7.0 行为变更,以了解平台变更可能会影响您应用的哪些方面。

如需详细了解面向消费者的 Android 7.0 功能,请访问 www.android.com。

多窗口支持

在 Android 7.0 中,我们为该平台引入了一项备受期待的全新多任务处理功能——多窗口支持。

用户现在可以同时在屏幕上打开两个应用。

在运行 Android 7.0 的手机和平板电脑上,用户可以在分屏模式下左右或上下并排运行两个应用。用户可以通过拖动两个应用之间的分割线来调整应用的大小。

在 Android TV 设备上,应用可以将其自身置于画中画模式,从而允许其在用户浏览其他应用或与其他应用互动时继续显示内容。

图 1. 在分屏模式下运行的应用。

特别是在平板电脑和其他大屏设备上,多窗口支持为您提供了吸引用户的新方法。您甚至可以在应用中启用拖放功能,让用户方便地将内容拖入或拖出您的应用,这是提升用户体验的绝佳方式。

为应用添加多窗口支持并配置其处理多窗口显示的方式非常简单。例如,您可以指定 Activity 的最小允许尺寸,从而防止用户将 Activity 的大小调整到该尺寸以下。您还可以为应用禁用多窗口显示,这可以确保系统仅以全屏模式显示您的应用。

如需了解详细信息,请参阅多窗口支持开发者文档。

通知增强功能

在 Android 7.0 中,我们重新设计了通知,使其使用起来更简单、更快捷。其中的一些变化包括:

模板更新:我们正在更新通知模板,以重新突出主图(hero image)和头像。开发者只需对其代码进行微调,即可利用这些新模板。

消息样式自定义:您可以使用 MessagingStyle 类自定义更多与通知相关的用户界面标签。您可以配置消息、会话标题和内容视图。

绑定通知:系统可以将消息分组(例如,按消息主题分组)并显示该组。用户可以就地对其执行操作,例如“清除”或“归档”。如果您已经为 Android Wear 实现了通知,那么您对这种模式应该已经很熟悉了。

直接回复:对于实时通信应用,Android 系统支持内联回复,以便用户可以直接在通知界面中快速回复短信或文本消息。

自定义视图:两项全新的 API 使您在通知中使用自定义视图时,能够利用系统装饰(如通知标头和操作)。

图 2. 绑定通知和直接回复。

要了解如何实现这些新功能,请参阅通知指南。

配置文件引导的 JIT/AOT 编译

在 Android 7.0 中,我们在 ART 中引入了带代码配置(code profiling)的即时 (JIT) 编译器,这使得它可以在 Android 应用运行时不断提高其运行性能。JIT 编译器是对 ART 当前预先 (AOT) 编译器的补充,有助于提高运行性能、节省存储空间并加快应用更新和系统更新速度。

配置文件引导的编译允许 ART 根据每个应用的实际使用情况以及设备上的状况来管理其 AOT/JIT 编译。例如,ART 会维护每个应用的热门方法(hot methods)配置文件,并可以预编译和缓存这些方法以获得最佳性能。而应用的其他部分则在实际使用之前保持未编译状态。

除了提高应用关键部分的性能外,配置文件引导的编译还有助于减少应用的总内存占用(包括关联的二进制文件)。该功能在低内存设备上尤为重要。

ART 管理配置文件引导的编译的方式可将对设备电池的影响降至最低。它仅在设备空闲且处于充电状态时才进行预编译,通过提前完成这些工作来节省时间和电量。

快速的应用安装通道

ART 的 JIT 编译器最显而易见的好处之一就是应用安装和系统更新的速度。即使是在 Android 6.0 中需要几分钟进行优化和安装的大型应用,现在也可以在几秒钟内完成安装。由于不再有优化步骤,系统更新速度也变得更快。

随时随地低电耗模式...

Android 6.0 引入了低电耗模式 (Doze),这是一种在设备处于静止状态(例如放在桌子上或抽屉里)时,通过推迟应用的 CPU 和 network 活动来节省电池电量的系统模式。

现在在 Android 7.0 中,低电耗模式更进一步,可以在移动时节省电量。只要屏幕关闭一段时间且设备未插电,低电耗模式就会对应用实施大家所熟知的 CPU 和网络限制子集。这意味着用户即使将设备放在口袋里携带时也能省电。

图 3. 现在,即使设备并未处于静止状态,低电耗模式也会应用限制以延长电池寿命。

在设备处于电池供电状态且屏幕关闭后不久,低电耗模式就会限制网络访问并推迟作业和同步。在短暂的维护窗口期间,允许应用访问网络并执行其任何被推迟的作业/同步。开启屏幕或插上设备电源即可使设备退出低电耗模式。

当设备再次处于静止状态、屏幕关闭且使用电池供电一段时间后,低电耗模式会对 PowerManager.WakeLock、AlarmManager 闹钟以及 GPS/Wi-Fi 扫描应用完整的 CPU 和网络限制。

无论设备是否在移动,让应用适配低电耗模式的最佳实践都是相同的,因此,如果您已经更新了应用以完美应对低电耗模式,那么就已经大功告成了。如果还没有,请立即开始让应用适配低电耗模式。

Project Svelte:后台优化

Project Svelte 是一项持续不断的努力,旨在将生态系统中各种 Android 设备的系统和应用内存占用降到最低。在 Android 7.0 中,Project Svelte 专注于优化应用在后台运行的方式。

后台处理是大多数应用必不可少的一部分。如果处理得当,它可以带来令人惊叹的用户体验——即时、快速且能够感知上下文。如果处理不当,后台处理可能会无谓地消耗内存(和电量),并影响其他应用的系统性能。

自 Android 5.0 以来,JobScheduler 一直是以有利于用户的方式执行后台工作的首选方式。应用可以调度作业,同时让系统根据内存、电源和连接状况进行优化。JobScheduler 兼具控制力与简单性,我们希望所有应用都使用它。

另一个不错的选择是 Google Play 服务的一部分 GCMNetworkManager,它提供类似的作业调度,并兼容旧版本的 Android。

我们正在继续扩展 JobScheduler 和 GCMNetworkManager 以满足您的更多使用场景——例如,在 Android 7.0 中,您现在可以根据内容提供程序(Content Provider)的变化来调度后台工作。与此同时,我们正开始弃用一些可能会降低系统性能(尤其是在低内存设备上)的旧有模式。

在 Android 7.0 中,我们将移除三个常用的隐式广播——CONNECTIVITY_ACTION、ACTION_NEW_PICTURE 和 ACTION_NEW_VIDEO——因为这些广播会同时唤醒多个应用的后台进程,从而消耗内存和电池。如果您的应用正在接收这些广播,请利用 Android 7.0 迁移到 JobScheduler 及相关 API。

有关详细信息,请参阅后台优化文档。

SurfaceView

Android 7.0 为 SurfaceView 类带来了同步移动功能,这在某些情况下可提供比 TextureView 更好的电池性能:在渲染视频或 3D 内容时,具有滚动和动画视频位置的应用使用 SurfaceView 比使用 TextureView 更省电。

由于 SurfaceView 类是在专用硬件中进行合成的,与应用窗口内容分离,因此它在屏幕上能实现更节省电池的合成。其结果是,它比 TextureView 进行更少的中间复制。

现在,SurfaceView 对象的内容位置会与包含它的应用内容同步更新。这一变化的结果之一是,在 SurfaceView 中播放的视频的简单平移或缩放,在视图移动时不再会在其旁边产生黑边。

从 Android 7.0 开始,我们强烈建议您通过使用 SurfaceView 代替 TextureView 来节省电量。

流量节省程序

图 4. 设置中的流量节省程序。

在移动设备的使用寿命中,移动数据套餐的费用通常会超过设备本身的成本。对于许多用户来说,移动数据是一项昂贵的资源,他们希望能节省使用。

Android 7.0 引入了流量节省程序模式,这是一种新的系统服务,有助于减少应用所使用的移动数据流量,无论用户是在漫游、接近计费周期结束,还是使用的是小额预付费流量包。流量节省程序让用户能够控制应用如何使用移动数据,并允许开发者在开启该模式时提供更高效的服务。

当用户在设置中启用流量节省程序且设备处于按流量计费的网络上时,系统会阻止后台数据使用,并指示应用在可能的情况下尽量在前台减少数据使用——例如限制流媒体的比特率、降低图像质量、推迟乐观预缓存等。用户可以允许特定应用在流量节省程序开启时也允许后台按流量计费的数据使用。

Android 7.0 扩展了 ConnectivityManager,为应用提供了一种检索用户的流量节省程序偏好设置和监控偏好设置更改的方法。所有应用都应该检查用户是否启用了流量节省程序,并努力限制前台和后台的数据使用。

Vulkan API

Android 7.0 将全新的 3D 渲染 API Vulkan™ 整合到了平台中。与 OpenGL™ ES 类似,Vulkan 是由 Khronos Group 维护的 3D 图形和渲染开放标准。

Vulkan 旨在彻底降低驱动程序中的 CPU 开销,并允许您的应用更直接地控制 GPU 操作。Vulkan 还允许通过多线程同时执行命令缓冲区构建等工作,从而实现更好的并行化。

Vulkan 开发工具和库已融入 Android 7.0 SDK 中,包括:

头文件

验证层(调试库)

SPIR-V 着色器编译器

SPIR-V 运行时着色器编译库

Vulkan 仅适用于搭载支持 Vulkan 的硬件(例如 Nexus 5X、Nexus 6P 和 Nexus Player)的设备上的应用。我们正在与合作伙伴紧密合作,争取尽快将 Vulkan 推向更多设备。

如需了解详细信息,请参阅 API 文档。

快捷设置图块 API

图 5. 通知栏中的快捷设置图块。

“快捷设置”是一种广受欢迎且简单的方法,可以直接从通知栏显示关键设置和操作。在 Android 7.0 中,我们扩大了快捷设置的范围,使其更加实用和方便。

我们为更多的快捷设置图块增加了空间,用户可以通过左右滑动在分页显示区域中访问这些图块。我们还允许用户控制显示哪些快捷设置图块以及显示在何处——用户只需拖放即可添加或移动图块。

对于开发者,Android 7.0 还添加了一项全新的 API,允许您定义自己的快捷设置图块,以便用户能够轻松访问您应用中的关键控制和操作。

快捷设置图块仅保留给紧急需要或高频使用的控制或操作,不应被用作启动应用的快捷方式。

一旦您定义了您的图块,就可以将其展示给用户,用户只需通过拖放操作即可将其添加到快捷设置中。

有关创建应用图块的信息,请参阅 Tile 的参考文档。

号码拦截

Android 7.0 现在在平台中支持号码拦截,并提供了一个框架 API 以允许服务提供商维护黑名单。默认的短信应用、默认的电话应用和运营商应用可以读取和写入该黑名单。其他应用无法访问该列表。

通过将号码拦截作为平台的标准功能,Android 为应用在各种设备上支持号码拦截提供了一种一致的方法。应用可以利用的其他好处包括:

被拦截通话的号码也将被拦截短信通过“备份和恢复”功能,拦截的号码可以在设备重置和跨设备间持久保存多个应用可以共享同一个拦截号码列表

此外,通过 Android 整合运营商应用意味着,运营商可以读取设备上的黑名单,并为用户执行服务端拦截,从而阻止骚扰电话和短信通过任何媒介(例如 VOIP 终端或转接电话)到达用户。

如需了解详细信息,请参阅 BlockedNumberContract 的参考文档。

来电过滤

Android 7.0 允许默认电话应用对来电进行过滤。电话应用通过实现全新的 CallScreeningService 来达到这一目的,从而使电话应用能够基于来电的 Call.Details 执行一系列操作,例如:

拒接来电不将通话记录写入通话记录中不向用户显示该来电的通知

如需了解详细信息,请参阅 CallScreeningService 的参考文档。

多语言区域支持,更多语言

Android 7.0 现在允许用户在“设置”中选择多个语言区域,以更好地支持双语使用场景。应用可以使用全新的 API 来获取用户选择的语言区域,然后为多语言区域用户提供更丰富的用户体验——例如以多种语言显示搜索结果,以及不提议翻译用户已经掌握的语言的网页。

除了多语言区域支持外,Android 7.0 还扩大了用户可用语言的范围。它为英文、西班牙文、法文和阿拉伯文等常用语言各提供了 25 种以上的变体。此外,它还对 100 多种新语言提供了部分支持。

应用可以通过调用 LocaleList.GetDefault() 来获取用户设置的语言区域列表。为了支持增加的语言区域数量,Android 7.0 正在改变其解析资源的方式。请务必测试并验证您的应用在新资源解析逻辑下的工作情况是否符合预期。

要了解全新资源解析行为以及应遵循的最佳实践,请参阅多语言支持。

新增表情符号

Android 7.0 引入了更多的表情符号和与表情符号相关的功能,包括肤色表情符号和对变体选择器的支持。如果您的应用支持表情符号,请遵循以下指南以利用这些表情符号相关的功能。

在插入表情符号之前,请检查设备是否包含该表情符号。 要检查系统字体中存在哪些表情符号,请使用 hasGlyph(String) 方法。

检查表情符号是否支持变体选择器。 变体选择器允许您以彩色或黑白方式展示某些表情符号。在移动设备上,应用应以彩色而非黑白展示表情符号。但是,如果您的应用将表情符号与文本内联显示,则应使用黑白变体。要确定表情符号是否具有变体,请使用变体选择器。有关带有变体的字符的完整列表,请查看 Unicode 变体文档中的“emoji variation sequences”部分。

检查表情符号是否支持肤色。 Android 7.0 允许用户根据自己的喜好修改渲染的表情符号肤色。键盘应用应为具有多种肤色的表情符号提供视觉提示,并应允许用户选择他们偏好的肤色。要确定哪些系统表情符号具有肤色修改器,请使用 hasGlyph(String) 方法。您可以通过阅读 Unicode 文档来确定哪些表情符号使用肤色。

Android 中的 ICU4J API

Android 7.0 现在在 android.icu 包下的 Android 框架中提供了 ICU4J API 子集。迁移非常简单,主要只需要从 com.java.icu 命名空间更改为 android.icu。如果您已经在应用中使用 ICU4J 包,那么切换到 Android 框架中提供的 android.icu API 可以大幅缩减 APK 的大小。

要详细了解 Android ICU4J API,请参阅ICU4J 支持。

WebView

Chrome 和 WebView 携手合作

从 Android 7.0 及更高版本上的 Chrome 版本 51 开始,您设备上的 Chrome APK 将被用于提供并渲染 Android 系统 WebView。这种方法提高了设备本身的内存使用效率,也减少了保持 WebView 最新所需的带宽(因为只要启用了 Chrome,独立的 WebView APK 就不再更新)。

您可以通过启用“开发者选项”并选择WebView 实现来选择您的 WebView 提供商。您可以使用设备上安装的任何兼容的 Chrome 版本(Dev、Beta 或 Stable)或独立的 WebView APK 来作为 WebView 实现。

多进程

从 Android 7.0 中的 Chrome 版本 51 开始,在启用开发者选项“多进程 WebView”时,WebView 将在独立的沙箱进程中运行网页内容。

在未来的 Android 版本中启用多进程 WebView 之前,我们正在寻求有关 N 中兼容性和运行性能的反馈。在此版本中,启动时间、总内存使用量和软件渲染性能方面预计会出现退化。

如果您在多进程模式下发现意外问题,我们非常希望了解。请在 Chromium 错误跟踪器上与 WebView 团队联系。

网页加载前运行的 Javascript

从以 Android 7.0 为目标平台的应用开始,在加载新页面时,Javascript 上下文将被重置。目前,在新的 WebView 实例中加载的第一个页面,该上下文会被保留。

希望向 WebView 注入 Javascript 的开发者应该在页面开始加载之后执行该脚本。

非安全源上的地理定位

从以 Android 7.0 为目标平台的应用开始,地理定位 API 将仅允许在安全源(基于 HTTPS)上使用。该政策旨在保护用户在使用非安全连接时的私密信息。

使用 WebView Beta 进行测试

WebView 会定期更新,因此我们建议您使用 WebView 的测试版通道频繁测试应用的兼容性。要在 Android 7.0 上开始测试 WebView 的预发布版本,请下载并安装 Chrome Dev 或 Chrome Beta,并如上所述在开发者选项中将其选为 WebView 实现。请通过 Chromium 错误跟踪器报告问题,以便我们能在发布新版本 WebView 之前予以解决。

OpenGL™ ES 3.2 API

Android 7.0 增加了 OpenGL ES 3.2 的框架接口和平台支持,包括:

Android 扩展包 (AEP) 中的所有扩展,但 EXT_texture_sRGB_decode 除外。用于 HDR 和延迟着色的浮点帧缓冲区。BaseVertex 绘制调用以实现更好的批处理和流式处理。稳健的缓冲区访问控制以减少 WebGL 开销。

Android 7.0 上 OpenGL ES 3.2 的框架 API 是通过 GLES32 类提供的。使用 OpenGL ES 3.2 时,请务必在您的清单文件中使用 标签和 android:glEsVersion 属性声明该要求。

有关使用 OpenGL ES 的信息,包括如何在运行时检查设备支持的 OpenGL ES 版本,请参阅 OpenGL ES API 指南。

Android TV 录制

Android 7.0 增加了通过全新的录制 API 从 Android TV 输入服务录制和播放内容的能力。在现有时移 API 的基础上,TV 输入服务可以控制可以录制哪些频道的数据、如何保存录制的会话,以及管理用户与已录制内容的互动。

如需了解详细信息,请参阅 Android TV 录制 API。

Android for Work

Android for Work 为运行 Android 7.0 的设备增加了许多新功能和 API。以下是一些亮点——有关功能的完整列表,请参阅 Android 企业版功能列表。

工作资料安全挑战

针对 N SDK 的托管配置所有者(profile owners)可以为在工作资料(work profile)中运行的应用指定单独的安全挑战。当用户尝试打开任何工作应用时,系统会显示工作安全挑战。成功完成安全挑战即可解锁工作资料,并在必要时对其进行解密。对于托管配置所有者,ACTION_SET_NEW_PASSWORD 会提示用户设置工作挑战,而 ACTION_SET_NEW_PARENT_PROFILE_PASSWORD 会提示用户设置设备锁。

托管配置所有者可以使用 setPasswordQuality()、setPasswordMinimumLength() 及其相关方法为工作挑战设置不同的密码策略(例如 PIN 的长度,或者是否可以使用指纹来解锁托管配置)。托管配置所有者还可以使用由全新的 getParentProfileInstance() 方法返回的 DevicePolicyManager 实例来设置设备锁。此外,托管配置所有者还可以使用全新的 setOrganizationColor() 和 setOrganizationName() 方法为工作挑战自定义凭据屏幕。

关闭工作模式

在具有工作资料的设备上,用户可以切换工作模式。当工作模式处于关闭状态时,托管用户会被临时关闭,从而停用工作资料应用、后台同步和通知(包括托管配置所有者应用)。当工作模式关闭时,系统会显示一个持续的状态图标,以提醒用户他们无法启动工作应用。启动器也会显示工作应用和小部件不可访问。

始终开启的 VPN

设备所有者(device owners)和托管配置所有者可以确保工作应用始终通过指定的 VPN 进行连接。系统在设备启动后会自动开启该 VPN。

新增的 DevicePolicyManager 方法为 setAlwaysOnVpnPackage() 和 getAlwaysOnVpnPackage()。

由于 VPN 服务可以由系统直接绑定而无需应用交互,因此 VPN 客户端需要处理始终开启的 VPN 的新入口点。和以前一样,服务通过与操作 android.net.VpnService 匹配的意图过滤器(intent filter)来向系统指明。

用户还可以通过设置>更多>Vpn手动设置实现了 VPNService 方法的始终开启的 VPN 客户端。仅当 VPN 客户端的目标 API 级别为 24 时,从“设置”中启用始终开启的 VPN 选项才可用。

自定义配置

应用可以使用企业的颜色和徽标来自定义托管配置所有者和设备所有者的预置(provisioning)流程。DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR 可自定义流程颜色。DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI 可使用企业徽标来自定义流程。

无障碍功能增强

Android 7.0 现在直接在设置新设备的“欢迎”屏幕上提供“视觉设置”。这使得用户能够更轻松地在设备上发现和配置无障碍功能,包括放大手势、字体大小、显示大小和 TalkBack。

随着这些无障碍功能被放置在更显眼的位置,您的用户更有可能在启用这些功能的情况下试用您的应用。请务必尽早对启用了这些设置的应用进行测试。您可以通过“设置”>“无障碍”来启用它们。

同样在 Android 7.0 中,无障碍服务现在可以帮助肢体不便的用户触摸屏幕。全新的 API 允许构建具有面部跟踪、眼球跟踪、点扫描等功能的服务,以满足这些用户的需求。

如需了解详细信息,请参阅 GestureDescription 的参考文档。

直接启动

直接启动可以缩短设备启动时间,并使注册的应用即使在发生意外重启后也具有有限的功能。例如,如果加密设备在用户睡觉时重启,注册的闹钟、消息和来电现在可以继续照常通知用户。这也意味着无障碍服务也可以在重启后立即生效。

直接启动利用 Android 7.0 中的基于文件的加密功能,为系统和应用数据启用细粒度的加密策略。系统将设备加密存储用于选择的系统数据和显式注册的应用数据。默认情况下,凭据加密存储用于所有其他系统数据、用户数据、应用和应用数据。

启动时,系统以受限模式启动,仅能访问设备加密的数据,而无法常规访问应用或数据。如果您有希望在此模式下运行的组件,可以通过在清单中设置标志来注册它们。重启后,系统会通过广播 LOCKED_BOOT_COMPLETED 意图来激活已注册的组件。系统确保在解锁前已注册的设备加密应用数据可用。在用户确认其锁屏凭据以对其解密之前,所有其他数据都是不可用的。

如需了解详细信息,请参阅直接启动。

密钥验证

Android 7.0 引入了密钥验证(key attestation),这是一种新的安全工具,有助于确保存储在设备 硬件备份密钥库(hardware-backed keystore)中的密钥对能够妥善保护您的应用使用的敏感信息。通过使用此工具,即使运行您的应用的设备已取得 root 权限,您也可以更有信心地确认您的应用交互的密钥确实存在于安全硬件中。如果您在应用中使用硬件备份密钥库中的密钥,则应使用此工具,尤其是使用密钥来验证应用内的敏感信息时。

密钥验证允许您验证 RSA 或 EC 密钥对是否已在设备的受信任执行环境 (TEE) 内创建并存储在设备的硬件备份密钥库中。该工具还允许您使用设备外服务(例如应用的主机端服务器)来确定并强力验证密钥对的用途和有效性。这些特性提供了一层额外的安全保护来保护密钥对,即使有人获取了设备的 root 权限或破坏了运行在设备上的 Android 平台的安全性也是如此。

注意:只有少数运行 Android 7.0 的设备支持硬件级密钥验证;所有其他运行 Android 7.0 的设备则使用软件级密钥验证。在生产环境验证设备硬件备份密钥的属性之前,您应确保设备支持硬件级密钥验证。为此,您应该检查验证证书链是否包含由 Google 验证根密钥签名的根证书,并且 密钥说明数据结构中的 attestationSecurityLevel 元素已设置为 TrustedEnvironment 安全级别。

如需了解详细信息,请参阅密钥验证开发者文档。

网络安全配置

在 Android 7.0 中,应用可以使用声明式的网络安全配置,而不是使用传统的、容易出错的编程方式 API(例如 X509TrustManager),从而在无需修改任何代码的情况下,安全地自定义其安全连接(HTTPS、TLS)的行为。

支持的功能

自定义信任锚。 允许应用自定义哪些证书颁发机构 (CA) 是其安全连接所信任的。例如,信任特定的自签名证书或受限制的公共 CA 集合。

仅限调试的替代。 允许应用开发者安全地调试其应用的安全连接,而不会对已安装的用户群增加风险。

选择不使用明文流量。 允许应用防止自身意外使用明文流量。

证书固定。 一项高级功能,允许应用限制哪些服务器密钥是安全连接所信任的。

For more information, see Network security configuration.

默认信任的证书颁发机构

默认情况下,以 Android 7.0 为目标平台的应用仅信任系统提供的证书,不再信任用户添加的证书颁发机构 (CA)。以 Android 7.0(API 级别 24)为目标平台且希望信任用户添加的 CA 的应用,应使用网络安全配置来指定应如何信任用户 CA。

APK 签名方案 v2

Android 7.0 引入了 APK 签名方案 v2,这是一种全新的应用签名方案,它能提供更快的应用安装时间,并能对 APK 文件未经授权的修改提供更多保护。默认情况下,Android Studio 2.2 和 Android Plugin for Gradle 2.2 会使用 APK 签名方案 v2 以及使用 JAR 签名的传统签名方案来对您的应用进行签名。

虽然我们建议对您的应用采用 APK 签名方案 v2,但这一新方案并非强制性的。如果您的应用在使用 APK 签名方案 v2 时无法正常构建,您可以禁用此新方案。禁用过程将使 Android Studio 2.2 和 Android Plugin for Gradle 2.2 仅使用传统签名方案对您的应用进行签名。要仅使用传统方案签名,请打开模块级的 build.gradle 文件,然后将 v2SigningEnabled false 添加到您的 release 签名配置中:

android {

...

defaultConfig { ... }

signingConfigs {

release {

storeFile file("myreleasekey.keystore")

storePassword "password"

keyAlias "MyReleaseKey"

keyPassword "password"

v2SigningEnabled false

}

}

}

注意:如果您使用 APK 签名方案 v2 对应用进行了签名,然后对应用进行了进一步的修改,则应用的签名将失效。因此,请在使用 APK 签名方案 v2 对应用进行签名之前使用 zipalign 等工具,而不是在此之后。

如需了解详细信息,请阅读介绍如何在 Android Studio 中为应用签名,以及如何使用 Android Plugin for Gradle 配置构建文件以为应用签名的 Android Studio 文档。

作用域目录访问

在 Android 7.0 中,应用可以使用新的 API 来请求访问特定的外部存储目录,包括 SD 卡等可卸载介质上的目录。新的 API 极大地简化了应用访问标准外部存储目录(例如 Pictures 目录)的方式。像照片类应用可以使用这些 API,而不是使用授权访问所有存储目录的 READ_EXTERNAL_STORAGE,或者要求用户导航至该目录的存储访问框架(Storage Access Framework)。

此外,新的 API 简化了用户授予您的应用访问外部存储空间的步骤。当您使用新 API 时,系统会使用一个简单的权限 UI,其中清晰详细地列出了应用正在请求访问的目录。

如需了解详细信息,请参阅作用域目录访问开发者文档。

键盘快捷键助手

在 Android 7.0 中,用户可以按 Meta + / 触发一个键盘快捷键屏幕,该屏幕显示系统和当前获取焦点的应用中所有可用的快捷键。如果快捷键存在,系统会自动从应用的菜单中检索这些快捷键。您还可以为该屏幕提供自己精心调整的快捷键列表。您可以通过重写 onProvideKeyboardShortcuts() 方法来实现。

注意: 并不是所有的键盘上都有 Meta 键:在 Macintosh 键盘上,它是 Command 键;在 Windows 键盘上,它是 Windows 键;在 Pixel C 和 ChromeOS 键盘上,它是 Search 键。

若要从应用的任何位置触发键盘快捷键助手,请在相关的 Activity 中调用 requestShowKeyboardShortcuts()。

自定义指针 API

Android 7.0 引入了自定义指针 API,允许您自定义指针的外观、可见性和行为。当用户使用鼠标或触摸板与 UI 对象交互时,此功能特别有用。默认指针使用标准图标。此 API 还包括高级功能,例如根据特定的鼠标或触摸板移动来改变指针图标的外观。

要设置指针图标,请重写 View 类的 onResolvePointerIcon() 方法。此方法使用 PointerIcon 对象来绘制与特定动作事件(motion event)相对应的图标。

持续性能 API

对于长时间运行的应用,性能可能会大幅波动,因为当设备组件达到温度极限时,系统会限制芯片系统(SoC)引擎。这种波动对于开发高性能、长生命周期应用的开发者来说就像一个不断变化的目标。

为了解决这些限制, Android 7.0 增加了对持续性能模式的支持,使原始设备制造商 (OEM) 能够为长时间运行的应用提供有关设备性能能力的提示。应用开发者可以使用这些提示来调整应用,以便在长时间内保持可预测且一致的设备性能水平。

应用开发者在 Android 7.0 上只能在 Nexus 6P 设备上试用这项新 API。要使用此功能,请为您希望在持续性能模式下运行的窗口设置持续性能窗口标志。使用 Window.setSustainedPerformanceMode() 方法设置此标志。当该窗口不再处于焦点时,系统会自动停用此模式。

VR 支持

Android 7.0 增加了对全新 VR 模式的平台支持和优化,以让开发者能够为用户打造高品质的移动端 VR 体验。其中包含多项性能增强,包括为 VR 应用分配专用的 CPU 核心。在您的应用内,您可以利用智能头部跟踪,以及适用于 VR 的立体通知。最重要的是,Android 7.0 提供了极低延迟的图形渲染。有关为 Android 7.0 构建 VR 应用的完整信息,请参阅 Google VR SDK for Android。

打印服务增强功能

在 Android 7.0 中,打印服务开发者现在可以显示有关个别打印机和打印任务的额外信息。

列出个别打印机时,打印服务现在可以通过两种方式设置每台打印机的图标:

您可以通过调用 setIconResourceId() 从资源 ID 设置图标。

您可以通过调用 setHasCustomPrinterIcon() 来显示来自网络的图标,并使用 onRequestCustomPrinterIcon() 设置请求图标时的回调。

此外,您还可以通过调用 setInfoIntent() 来提供每台打印机的专属 Activity 以显示额外的信息。

您可以分别通过调用 setProgress() 和 setStatus(),在打印任务通知中显示打印任务的进度和状态。

Frame Metrics API

Frame Metrics API 允许应用监控其 UI 渲染性能。该 API 通过公开一个流式发布/订阅(Pub/Sub) API 来传输应用当前窗口的帧时间信息,从而提供这一功能。返回的数据等同于 adb shell dumpsys gfxinfo framestats 所显示的数据,但不局限于过去的 120 帧。

您可以使用 Frame Metrics API 在实际使用中测量交互级别的 UI 性能,而无需 USB 连接。此 API 允许以比 adb shell dumpsys gfxinfo 更高的粒度收集数据。由于系统可以收集应用中特定交互的数据,因此可以实现这种更高的粒度;系统不需要捕获整个应用性能的全局摘要,也不需要清除任何全局状态。您可以使用此功能来收集性能数据,并在应用内的实际使用场景中捕获 UI 性能方面的下降。

若要监控窗口,请实现 OnFrameMetricsAvailableListener.onFrameMetricsAvailable() 回调方法并将其注册到该窗口。

该 API 提供了一个 FrameMetrics 对象,其中包含渲染子系统针对帧生命周期中的各种关键点所报告的时间数据。支持的指标包括:UNKNOWN_DELAY_DURATION、INPUT_HANDLING_DURATION、ANIMATION_DURATION、LAYOUT_MEASURE_DURATION、DRAW_DURATION、SYNC_DURATION、COMMAND_ISSUE_DURATION、SWAP_BUFFERS_DURATION、TOTAL_DURATION 以及 FIRST_DRAW_FRAME。

虚拟文件

在以前的 Android 版本中,您的应用可以使用存储访问框架来允许用户从其云存储帐户(例如 Google 云端硬盘)中选择文件。然而,当时无法表示没有直接字节码表示形式(direct bytecode representation)的文件;每个文件都必须提供输入流。

Android 7.0 将虚拟文件的概念引入到了存储访问框架中。虚拟文件功能允许您的 DocumentsProvider 返回可与 ACTION_VIEW 意图配合使用的文档 URI,即使它们没有直接的字节码表示形式。Android 7.0 还允许您为用户文件(无论是虚拟文件还是其他文件)提供替代格式。

如需了解有关打开虚拟文件的更多信息,请参阅存储访问框架指南中的“打开虚拟文件”部分。

相关数据

365sport 《极品绝配》台湾电视剧完整版资源免费在线观看,全集
365大额提款要求 军用手机哪个牌子好

军用手机哪个牌子好

01-07 访问量: 1034
365sport 鹿晗住在哪

鹿晗住在哪

10-04 访问量: 8585