Android 7.0 Nougat 引入了各种 为用户和开发者提供新功能。 本文重点介绍面向开发者的新变化。
请务必查看 <ph type="x-smartling-placeholder"></ph> Android 7.0 行为变更:了解平台变更的方面 可能会影响您的应用
要详细了解 Android 7.0 的个人用户功能,请访问 www.android.com。
多窗口支持
Android 7.0 中引入了呼声很高的全新 多任务处理功能 - 多窗口支持。
用户现在可以在屏幕上同时弹出两个应用。
- 在手机和平板电脑上 在运行 Android 7.0 的设备上,用户可以同时运行两个应用,或者 在分屏模式下将画面叠加在另一个画面上用户可以通过拖动来调整应用大小 分隔线。
- 在 Android TV 设备上,应用可以将自己置于画中画模式 模式,以便在用户浏览或浏览内容时继续显示内容。 与其他应用交互
![在分屏模式下运行的移动应用](https://developer.android.google.cn/static/images/android-7.0/mw-portrait.png?authuser=0000&hl=lt)
图 1. 在分屏模式下运行的应用。
多窗口模式支持,尤其是在平板电脑和其他更大屏幕的设备上 为您提供吸引用户的新方式。您甚至可以在 GCP 控制台中 让用户可以方便地将内容拖放到您的应用或从其中拖出内容 - 这对 提升用户体验的方式。
向应用添加多窗口支持并配置多窗口支持的方式非常简单 处理多窗口显示。例如,您可以指定 activity 的 允许的最小尺寸,防止用户调整以下 activity 的尺寸 该尺寸。您还可以为应用停用多窗口显示, 确保系统将仅以全屏模式显示您的应用。
如需了解详情,请参阅多窗口模式支持 开发者文档。
通知增强功能
在 Android 7.0 中,我们重新设计了通知,使其变得更简单、 使用起来更加方便部分变更包括:
- 模板更新:我们正在将通知模板更新为 重新强调英雄形象和化身。开发者将能够 充分利用新模板,只需对代码进行少量调整。
-
消息样式自定义:您可以自定义更多元素
使用
MessagingStyle
类。您可以配置消息 会话标题和内容视图。 - 捆绑通知:系统可以将消息分组 (例如按消息主题),以及显示相应群组。用户可以 适当地对它们执行“关闭”或“归档”等操作。如果您 那么您已经熟悉了 模型。
- 直接回复:对于实时通信应用, Android 系统支持内联回复,以便用户快速回复 短信或短信。
- 自定义视图:两个新的 API 使您可以利用系统 使用自定义控件时,如通知标题和操作 通知。
![显示捆绑式消息通知的移动设备](https://developer.android.google.cn/static/images/android-7.0/notifications-1.png?authuser=0000&hl=lt)
![移动设备上显示单条消息通知](https://developer.android.google.cn/static/images/android-7.0/notifications-3.png?authuser=0000&hl=lt)
![移动设备在通知界面中显示内嵌消息回复](https://developer.android.google.cn/static/images/android-7.0/notifications-2.png?authuser=0000&hl=lt)
图 2. 捆绑通知和直接回复。
要了解如何实现新功能,请参阅 通知 指南。
配置文件指导的 JIT/AOT 编译
在 Android 7.0 中,我们添加了 Just in Time (JIT) 编译器, 对 ART 进行性能分析,以便持续提升 Android 应用。JIT 编译器对 ART 当前的 预先 (AOT) 编译器,有助于提升运行时性能, 还可加快应用更新和系统更新速度。
配置文件引导的编译可让 ART 管理以下各项的 AOT/JIT 编译: 根据实际使用情况以及设备上的条件为每个应用提供自定义代码。 例如,ART 会维护每个应用热方法的配置文件,并且可以 预编译和缓存这些方法以实现最佳性能。它保留了 在实际使用之前不会编译应用的某些版本。
除了提高应用的关键部分的性能之外,配置文件引导的 编译有助于减少应用的总体 RAM 占用,包括 二进制文件此功能对于低内存设备非常尤其重要。
ART 在管理配置文件指导的编译时,可最大限度降低对 设备电池。仅当设备处于空闲状态时,它才会进行预编译 从而节省时间和电量。
快速的应用安装路径
Android 运行组件的 JIT 编译器最实际的好处之一就是 安装和系统更新。即使是需要几分钟时间的大型应用, Android 6.0 中的优化和安装功能现在仅需几步即可完成安装 。系统更新也变得更快,因为省去了更多优化步骤。
随时随地低电耗模式...
Android 6.0 引入了低电耗模式,它是一种系统模式,可将 应用的设备处于空闲状态时(例如在设备处于闲置状态时)的 CPU 和网络活动 放在桌子上或抽屉里
现在,在 Android 7.0 中,低电耗模式更进一步,可随时随地节省电量。 只要屏幕关闭一段时间且设备未接通电源, 低电耗模式会对应用施加熟悉的 CPU 和网络限制。 这意味着,即使用户随身携带设备,也可以节省电量 。
![低电耗模式如何应用第一级系统活动限制以延长电池续航时间的图示](https://developer.android.google.cn/static/images/android-7.0/doze-diagram-1.png?authuser=0000&hl=lt)
图 3. 低电耗模式现在适用 限制以延长电池续航时间,即使设备未处于静止状态也是如此。
屏幕关闭片刻后,设备在使用电池时,进入低电耗模式 限制网络访问、延迟作业和同步。短暂维护期间 允许应用程序访问网络,以及任何被延迟的 作业/同步执行。打开屏幕或将设备插入电源 退出低电耗模式。
设备再次处于静止状态(屏幕关闭且使用电池)时
低电耗模式会对 PowerManager.WakeLock
、AlarmManager
闹钟和
GPS/WLAN 扫描。
无论设备处于低电耗模式, 因此,如果您已以适当的方式 处理低电耗模式,一切都已就绪。如果不能,请开始调整 应用进入低电耗模式。
Project Svelte:后台优化
Project Svelte 在持续改善,以最大程度减少系统和应用占用的 RAM 并覆盖生态系统中各种 Android 设备。在 Android 7.0 中,Project Svelte 注重优化应用在后台运行的方式。
后台处理是大多数应用的重要组成部分。如果处理得当 可为您打造出色的用户体验 - 即时、快速且情境感知。 如果处理不当,后台处理可能会不必要地消耗 RAM(并且 电池)并影响其他应用的系统性能。
从 Android 5.0 开始,JobScheduler
就一直是
以良好的方式执行后台工作
。应用可以安排作业,同时让系统根据
内存、电源和连接情况。JobScheduler 可让您
我们希望所有应用都使用它
另一个不错的选择是<ph type="x-smartling-placeholder"></ph>
GCMNetworkManager
(Google Play 服务的一部分),
提供类似的作业安排,且与
Android。
我们会继续扩展 JobScheduler
,并
GCMNetworkManager
与以下成员会面
您的应用场景,例如,在 Android 7.0 中,您现在可以安排后台运行时间
基于内容提供方的变化。与此同时,我们开始
弃用了一些可能会降低系统性能的较旧模式
尤其是在低内存设备上。
在 Android 7.0 中,我们移除了三个常用的隐式广播 -
CONNECTIVITY_ACTION
、ACTION_NEW_PICTURE
和 ACTION_NEW_VIDEO
,因为它们可以唤醒
同时运行多个应用的后台进程,并且会同时耗尽内存和电池。如果
您的应用收到这些通知,请充分利用 Android 7.0
请迁移到 JobScheduler
和相关 API。
请参阅背景信息 优化文档。
SurfaceView
Android 7.0 支持同步移至 SurfaceView
该类可提供更好的电池性能
在特定情况下高于 TextureView
:呈现视频或
3D 内容、支持滚动和动画视频位置的应用消耗的电量更少
与使用 TextureView
相比,价格为 SurfaceView
。
SurfaceView
类可实现更省电的合成
屏幕,因为它是在专用硬件中合成,与应用分开
窗口内容。因此,中间层
TextureView
之后的副本数量。
SurfaceView
对象的内容位置现在会同步更新
应用内容相关联。这一变更的一个结果就是
SurfaceView
中播放的视频的翻译或缩放比例
在视图移动时,不会再在视图旁边生成黑边。
从 Android 7.0 开始,我们强烈建议您使用
SurfaceView
,而非 TextureView
。
流量节省程序
![“设置”中的流量节省程序](https://developer.android.google.cn/static/images/android-7.0/datasaver.png?authuser=0000&hl=lt)
图 4. “设置”中的流量节省程序。
在移动设备的整个生命周期中,移动数据网络计划的费用通常 超过设备本身的成本。对许多用户而言,移动数据网络是 他们想要节省的昂贵资源
Android 7.0 引入了流量节省程序模式,这是一项新的系统服务,可帮助减少 应用在结算周期即将结束时使用移动数据(无论是在漫游), 或小号的预付费流量包流量节省程序让用户可以控制应用 使用移动数据网络,并可让开发者在连接到移动数据网络时提供更高效的服务 节省程序已开启。
当用户在设置中启用流量节省程序时, 连接到按流量计费的网络时,系统会阻止后台流量使用并向应用发出信号 尽可能减少在前台使用的流量 - 例如通过限制 比特率、降低图片质量、推迟乐观预缓存 依此类推。用户可以允许特定应用允许使用后台按流量计费的流量 (即使流量节省程序处于开启状态)。
Android 7.0 扩展了 ConnectivityManager
,以便为应用提供
获取
用户的流量节省程序偏好设置并监控
偏好设置更改。所有应用都应检查用户是否已启用数据网络
节省流量,并努力限制前台和后台流量消耗。
Vulkan API
Android 7.0 将新的 3D 渲染 API VulkanTM 集成到平台中。点赞 OpenGLTM ES,Vulkan 是 3D 图形和渲染维护的一项开放标准 由 Khronos Group 打造。
Vulkan 是从零开始设计的,旨在最大限度地降低驱动程序中的 CPU 开销, 让应用能够更直接地控制 GPU 操作。Vulkan 它还允许多个线程在执行作业时 例如命令缓冲区构建
Vulkan 开发工具和库都已卷入 Android 7.0 SDK 中。他们 包括:
- 标头
- 验证层(调试库)
- SPIR-V 着色器编译器
- SPIR-V 运行时着色器编译库
Vulkan 仅适用于搭载支持 Vulkan 的硬件的设备上的应用, 例如 Nexus 5X、Nexus 6P 和 Nexus Player。我们正在与 合作伙伴尽快将 Vulkan 推广到更多设备。
如需了解详情,请参阅 API 文档。
Quick Settings Tile API
![通知栏中的“快捷设置”图块](https://developer.android.google.cn/static/images/android-7.0/quicksettings.png?authuser=0000&hl=lt)
图 5. 通知栏中的“快捷设置”图块。
通过“快捷设置”,您可以轻松查看关键设置和操作 。在 Android 7.0 中,我们扩展了 快捷设置,让 Google 助理更加实用、更方便。
我们为额外的“快捷设置”图块添加了更多空间 左右滑动即可访问分页的显示区域。我们还 让用户可以控制显示哪些“快捷设置”图块以及它们的位置 显示—用户只需拖放图块即可添加或移动图块。
对于开发者,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)
方法。 - 检查表情符号是否支持变体选择器。 利用变体选择器,您可以 以彩色或黑白显示某些表情符号。 在移动设备上,应用应以彩色(而不是黑白)表示表情符号。不过, 如果您的应用显示内嵌在文本中的表情符号,则应使用黑白变体。 要确定表情符号是否有变量,请使用变量选择器。 如需完整的字符及变体列表,请查看 表情符号变体序列部分 <ph type="x-smartling-placeholder"></ph> 有关变体的 Unicode 文档。
-
检查表情符号是否支持肤色。Android 7.0 允许用户修改
使表情符号的肤色符合用户偏好。键盘应用应提供视觉元素
针对具有多个肤色的表情符号的指示符,并且应该允许用户
选择自己喜欢的肤色。确定系统表情符号的
肤色修饰符,请使用
hasGlyph(String)
方法。您可以确定哪些表情符号使用肤色,只需阅读 <ph type="x-smartling-placeholder"></ph> Unicode 文档。
Android 中的 ICU4J API
Android 7.0 现在在 Android 框架下提供一部分 ICU4J API(位于
android.icu
软件包。迁移很简单,主要包括以下步骤:
只需将“com.java.icu
”命名空间更改为
android.icu
。如果您已在
应用,改用 Android 中提供的 android.icu
API
框架可大幅缩减 APK 大小。
如需详细了解 Android ICU4J API,请参阅 ICU4J 支持。
WebView
Chrome 和 WebView 配合使用
从 Android 7.0 及更高版本上的 Chrome 51 版开始,设备上的 Chrome APK 用于提供和呈现 Android 系统 WebView。这种方法可提高内存 同时减少为使视频保持新鲜度所需的带宽 WebView 已是最新版本(因为独立版 WebView APK 将不再更新) 只要 Chrome 保持启用状态即可)。
您可以通过启用“开发者选项”和 选择 WebView 实现。您可以使用任何兼容的 您设备上安装的 Chrome 版本(开发者版、测试版或稳定版), 独立的 WebView APK,以充当 WebView 实现。
多进程
从 Android 7.0 中的 Chrome 版本 51 开始,WebView 将在 当开发者选项“多进程 WebView”时,运行一个单独的沙盒进程 已启用。
我们正在寻求关于 Android N 的兼容性和运行时性能的反馈 然后再在未来版本的 Android 中启用多进程 WebView。在本课中, 版本、启动时间回归、总内存用量和软件 预期的渲染性能
如果您在多进程模式下遇到意外问题,欢迎告诉我们 。请通过 Chromium 错误跟踪工具与 WebView 团队联系。
Javascript 在页面加载之前运行
从以 Android 7.0 为目标平台的应用开始,JavaScript 上下文将重置 在加载新页面时触发。目前,上下文会沿用到 在新的 WebView 实例中加载第一个页面。
希望将 JavaScript 注入 WebView 的开发者应执行 脚本。
不安全起点上的地理定位
从以 Android 7.0 为目标平台的应用开始,地理定位 API 将仅 允许来自安全源(通过 HTTPS)。此政策旨在 用户的隐私信息。
测试 WebView 测试版
WebView 会定期更新,因此我们建议您测试兼容性 经常使用 WebView 的 Beta 渠道测试您的应用。要开始测试 Android 7.0 上的 WebView 的预发布版本,请下载并安装 Chrome 开发者版或 Chrome Beta 版,然后选择相应的 WebView 实现 开发者选项(如上所述)。请通过Chromium bug 跟踪器,以便在新版本 WebView 发布之前修复问题 发布。
OpenGLTM 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 时,请务必声明
使用 <uses-feature>
标记和
android:glEsVersion
属性。
有关使用 OpenGL ES 的信息,包括如何查看设备的 支持的 OpenGL ES 版本,请参阅 OpenGL ES API 指南。
Android TV 录制
Android 7.0 增加了从 Android TV 输入录制和播放内容的功能 通过新的录制 API 访问这些服务。基于现有的时移模式构建 TV 输入服务可以控制可以录制的频道数据、 系统会保存录制的会话,并管理用户与录制内容的互动。
如需了解详情,请参阅 Android TV Recording API。
Android for Work
Android for Work 针对运行 Android 7.0 的设备添加了许多新功能和 API。 下面列出了一些要点。要查看完整的功能列表,请参阅 Android Enterprise 功能 列表。
工作资料安全验证
针对 N SDK 的配置文件所有者
可以为在 Google Cloud 中运行的应用指定单独的安全性挑战,
工作资料。当用户尝试打开文件时显示工作挑战
任何工作应用。成功完成安全性挑战可解锁
并根据需要解密工作资料。对于商家资料所有者:
ACTION_SET_NEW_PASSWORD
提示用户设置工作
挑战和 ACTION_SET_NEW_PARENT_PROFILE_PASSWORD
条提示
用户设置设备锁定。
个人资料所有者可以为工作挑战设置不同的密码政策
(例如 PIN 码需要多长时间,或者是否可以使用指纹
使用 setPasswordQuality()
解锁个人资料),
setPasswordMinimumLength()
和相关方法。个人资料
机主也可以使用DevicePolicyManager
设置设备锁定
返回新的 getParentProfileInstance()
方法。
此外,个人资料所有者还可以自定义
工作挑战,新的setOrganizationColor()
和
setOrganizationName()
方法。
关闭工作应用
在设置了工作资料的设备上,用户可以切换工作模式。工作模式处于 关闭受管理的用户已暂时关闭,这会停用工作资料 后台同步和通知。这包括商家资料所有者 应用。当工作模式关闭时,系统会显示持续状态 图标以提醒用户他们无法启动工作应用。启动器 表示工作应用和微件无法访问。
始终开启的 VPN
设备所有者和资料所有者可以确保工作应用始终能够连接 安全连接。在 启动。
新的 DevicePolicyManager
方法是
setAlwaysOnVpnPackage()
和
getAlwaysOnVpnPackage()
。
因为 VPN 服务无需应用即可由系统直接绑定
交互,VPN 客户端需要为始终开启的 VPN 处理新的入口点。如
之前,由与
操作 android.net.VpnService
。
用户也可以手动设置始终开启的 VPN 客户端,
VPNService
方法使用
设置 > 更多 > VPN。用于启用“始终开启的 VPN”的选项
仅当 VPN 客户端以 API 级别 24 为目标平台时,“设置”中的功能才可用。
自定义配置
应用可以自定义资料所有者和设备所有者配置
并带有企业颜色和徽标。
DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR
自定义
流程颜色。DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI
使用企业徽标来自定义流程。
无障碍增强功能
Android 7.0 现在直接在欢迎屏幕上提供 Vision Settings 设备设置。这样,用户就可以更轻松地发现和配置 无障碍功能,包括放大手势、字体 大小、显示大小和 TalkBack。
随着这些无障碍功能更为突出,您的用户 在启用这些功能后,用户更有可能试用您的应用。务必测试您的应用 以便尽早启用这些设置您可以前往“设置 > ”启用这些功能。 无障碍功能。
同样在 Android 7.0 中,无障碍服务现在可以帮助行动不便的用户 使用屏幕的障碍人士。这个新 API 允许使用 例如面部跟踪、眼球追踪、点扫描等, 满足这些用户的需求
有关详情,请参阅
GestureDescription
。
直接启动
直接启动可以缩短设备启动时间, 应用的功能会受到限制,即使在意外重启后也是如此。 例如,如果加密的设备在用户睡觉时重新启动, 注册的闹钟、消息和来电现在可以继续通知 和普通用户一样这也意味着,无障碍服务 可在重启后立即可用。
在 Android 7.0 中,直接启动利用基于文件的加密 为系统和应用数据启用精细的加密策略。 系统针对选定的系统数据使用设备加密的存储, 注册应用数据。默认情况下,凭据加密存储用于 其他系统数据、用户数据、应用和应用数据。
启动时,系统以受限模式启动,并且可以访问
仅限设备加密的数据,而不会对应用或数据进行常规访问。
如果您有想要在此模式下运行的组件,可以先注册
方法是在清单中设置一个标记重启后,系统会激活
通过广播 LOCKED_BOOT_COMPLETED
intent。系统确保注册的设备加密应用数据可用
。在用户确认锁定之前,所有其他数据均不可用
屏幕凭据解密。
密钥认证
Android 7.0 引入了密钥认证,这是一种新的安全工具,可帮助 您需要确保在设备的由硬件支持的 Keystore 正确保护您的应用 用途。通过使用此工具,您可以更加确信 与驻留在安全硬件中的密钥交互,即使设备 已取得 root 权限。如果您使用由硬件支持的密钥库中的密钥 您应使用此工具,尤其是在您使用按键 验证应用内的敏感信息。
借助密钥认证功能,您可以验证是否已被 RSA 或 EC 密钥对 在设备的 可信执行环境 (TEE) 的要求。通过该工具,您还可以使用 设备外服务(例如应用的后端服务器)来确定和 严格验证密钥对的使用情况和有效性。借助这些功能, 保护密钥对的一道额外的安全保障,即使有人 对设备启用 root 权限,或危及运行 Android 平台的 Android 平台的安全性 。
注意 :只有一小部分搭载 Android 7.0 的设备
支持硬件级密钥认证;所有其他搭载 Android 7.0 的设备
改用软件级密钥认证。验证资源前的准备工作
设备硬件支持的密钥在生产级环境中使用,
应确保设备支持硬件级密钥认证。接收者
您应检查认证证书链是否包含根
由 Google 认证根密钥签名的证书,并且
键中的 attestationSecurityLevel
元素
description 数据结构已设为 TrustedEnvironment 安全性
。
有关详情,请参阅 密钥认证 开发者文档。
网络安全性配置
在 Android 7.0 中,应用可以自定义其安全(HTTPS、TLS)的行为 使用声明式 API 安全地进行连接,而无需修改 网络安全配置,而不是使用 容易出错的程序化 API(例如 X509TrustManager)。
支持的功能:
- 自定义信任锚。让应用可以自定义 证书授权机构 (CA) 因其安全连接而受到信任。对于 例如信任特定的自签名证书或受限的公共 CA 集。
- 仅用于调试的替换。让应用开发者安全地进行调试 安全连接,而不会增加安装 数据。
- 选择停用明文流量。让应用可以自我保护 意外使用明文流量。
- 证书固定。一项高级功能 限制哪些服务器密钥可信,以建立安全连接。
如需了解详情,请参阅网络安全配置。
默认受信任的证书颁发机构
默认情况下,以 Android 7.0 为目标平台的应用仅信任系统提供的证书 并且不再信任用户添加的证书授权机构 (CA)。以 Android 7.0 为目标平台的应用 如果希望信任用户添加的 CA,则应使用 网络安全配置 指定信任用户 CA 的方式。
APK 签名方案 v2
Android 7.0 引入了 APK Signature Scheme v2,这是一种新的应用签名方案, 提供更快的应用安装速度,并针对未经授权的交易提供更强大的保护 对 APK 文件的更改。默认情况下,Android Studio 2.2 和 Android Plugin for Gradle 2.2 同时使用 APK Signature Scheme v2 和 传统签名方案,也就是使用 JAR 签名。
虽然我们建议对您的应用采用 APK Signature Scheme v2,但这项新
协议不是强制性的。如果您的应用在使用 APK 时无法正确构建
签名方案 v2,您可以停用此新方案。停用过程
会使 Android Studio 2.2 和 Android Plugin for Gradle 2.2 为您的
只使用传统签名方案的应用。要仅使用
传统方案,打开模块级 build.gradle
文件,然后
将 v2SigningEnabled false
行添加到您的发布签名
配置:
android { ... defaultConfig { ... } signingConfigs { release { storeFile file("myreleasekey.keystore") storePassword "password" keyAlias "MyReleaseKey" keyPassword "password" v2SigningEnabled false } } }
注意: 如果您使用 APK 为应用签名
签名方案 v2,并进一步更改应用的签名
无效。因此,请使用 zipalign
等工具
使用 APK 签名方案 v2 为应用签名之前,而不是之后。
有关详情,请参阅 Android Studio 文档,其中介绍了如何 <ph type="x-smartling-placeholder"></ph> 如何在 Android Studio 中为应用签名以及如何 配置 使用 Android Plugin for Gradle 为应用签名的 build 文件。
作用域目录访问
在 Android 7.0 中,应用可以使用新的 API 请求访问特定外部
storage 目录,包括可移动介质(如 SD)上的目录
卡片。新 API 大大简化了应用访问标准
外部存储目录,如 Pictures
目录。应用
例如照片应用可以使用这些 API
READ_EXTERNAL_STORAGE
,该角色会授予对所有存储空间的访问权限
或存储访问框架,以便用户导航到
目录。
此外,新的 API 简化了用户向外部人员授予外部权限的步骤 应用的存储空间访问权限。当您使用新的 API 时,系统会使用简单的 清楚地详细说明应用是什么目录的权限界面 请求访问权限。
有关详情,请参阅 范围 目录访问权限开发者文档。
键盘快捷键辅助工具
在 Android 7.0 中,用户可以按 Meta + / 触发
键盘快捷键屏幕,其中显示同时可用的所有快捷键
从系统和获得焦点的应用中获取。系统会检索这些
从应用的菜单自动添加快捷方式(如果存在快捷方式)。您可以
还可以为屏幕提供经过微调的快捷方式列表。您可以
只需替换 onProvideKeyboardShortcuts()
方法即可。
注意:并非所有设备上都存在 Meta 键 键盘:在 Macintosh 键盘上,它是 Command 键, 按 Windows 键,而按键盘上的 如果是 Pixel C 和 ChromeOS 键盘,则为搜索键。
要在应用的任何位置触发键盘快捷键助手,请调用
requestShowKeyboardShortcuts()
相关活动
自定义指针 API
Android 7.0 引入了 Custom Pointer API,让您能够自定义 指针的外观、可见性和行为。此功能 在用户使用鼠标或触控板与 界面对象。默认指针使用标准图标。此 API 还包含 更改指针图标的外观等高级功能 鼠标或触控板的特定移动事件。
如需设置指针图标,请替换 onResolvePointerIcon()
方法中 View
类。此方法使用
PointerIcon
对象,用于绘制
特定动作事件。
Sustained Performance API
长期运行的应用的性能可能会发生剧烈波动,因为 系统会在设备组件到达 温度限制。此波动表明,应用的目标值并非一成不变 。
为了解决这些限制,Android 7.0 加入了对 持续性能模式,使原始设备制造商 (OEM) 能够提供有关 对长期运行应用的设备性能功能进行定义。应用开发者 可以根据这些提示来调整应用,使之具有可预测、 长时间保持稳定的设备性能水平。
应用开发者可以在 Android 7.0 中试用这一新 API,
仅限 Nexus 6P 设备。要使用此功能
设置窗口的持续性能窗口标志
您希望以持续性能模式运行的应用使用
Window.setSustainedPerformanceMode()
方法结合使用。系统会自动
当窗口不再对焦时停用此模式。
VR 支持
Android 7.0 为新的 VR 模式添加了平台支持和优化,让开发者 打造高品质移动 VR 体验。对每个广告资源 增强功能,包括允许 VR 应用访问某个专属的 CPU 核心。 在您的应用中,您可以充分利用智能头部跟踪功能、 以及适用于 VR 的立体声通知功能。最重要的是,Android 7.0 为 超低延迟图形如需全面了解如何构建适用于 Android 7.0 的 VR 应用, 请参阅 Android 版 Google VR SDK。
打印服务增强
在 Android 7.0 中,打印服务开发者现在可以显示更多信息, 有关各个打印机和打印作业的信息。
列出各打印机时,打印服务现在可以按打印机进行设置 图标:
- 您可以通过调用
setIconResourceId()
。 - 您可以通过调用
setHasCustomPrinterIcon()
, 并使用onRequestCustomPrinterIcon()
。
此外,您还可以提供按打印机的活动,
通过调用 setInfoIntent()
获取相关信息。
您可以在打印任务中指示打印任务的进度和状态
通过调用
setProgress()
和
setStatus()
。
帧指标 API
借助 Frame Metrics API,应用可以监控其界面呈现情况
性能该 API 通过公开流式传输 Pub/Sub API 来提供此功能,以传输帧
应用当前窗口的时间信息。返回的数据
与 adb shell
dumpsys gfxinfo framestats
显示的帧数相当,但不限于过去 120 帧。
您可以使用 Frame Metrics API 来衡量互动级界面
无需 USB 连接即可在生产环境中实现出色性能。此 API
可让系统以比 Google Analytics
adb shell dumpsys gfxinfo
。这种较高的粒度之所以可行
系统可以收集应用内特定互动的数据;系统
不需要捕获有关整个应用的
或清除任何全局状态。您可以使用
能够收集性能数据和捕捉界面性能回归
真实用例。
要监控某个窗口,请在
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 版本中,您的应用可以使用 Storage Access 该框架允许用户从他们的云端存储账号中选择文件, 例如 Google 云端硬盘但是,无法用表示已指定 没有直接字节码表示法;每个文件都必须提供 输入流。
Android 7.0 在存储访问机制中添加了“虚拟文件”的概念
框架。通过虚拟文件功能
DocumentsProvider
,用于返回可设置为
与 ACTION_VIEW
intent 结合使用,即使它们
未采用直接字节码表示形式。Android 7.0 还可让您
为用户文件提供替代格式,可以是虚拟文件,也可以是其他格式。
有关打开虚拟文件的更多信息,请参阅 在 存储访问框架指南。