Android N版本(7.0)适配


Android N版本适配

AndroidN beta版本已经出来了, 虽然还没有搭载的机器上市,但是已经Android N版本早早的就可以体验试用了。

近期使用Nexus 6 刷了7.0版本, 对负责的项目进行了适配。大问题不多,小问题不少,还是耗费了些时间。整理如下:

相关资料:

https://developer.android.com/preview/api-overview.html官方说明(Android N for Developers)

https://developer.android.com/preview/samples.html官方demo

可查到的总结:

http://gold.xitu.io/entry/577bbc9d7db2a20054e70f56http://www.trinea.cn/android/android-n-adaptation/

简单总结(具体的官方文档中都有描述):

1,多窗口支持:

在 Android N 中,引入了一个新的而且非常需要的多任务处理功能 — 多窗口支持。

现在,用户可以一次在屏幕上打开两个应用。

在运行 Android N 的手机和平板电脑上

,用户可以并排运行两个应用,或者处于分屏模式时一个应用位于另一个应用之上。 用户可以通过拖动两个应用之间的分隔线来调整应用。

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

2,通知增强功能(请参阅通知指南)

在 Android N 中,重新设计了通知,使其更易于使用并且速度更快。 部分变更包括:

模板更新

消息样式自定义

捆绑通知

直接回复

自定义视图

3,个人资料指导的 JIT/AOT 编译

在 Android N 中,添加了 Just in Time (JIT) 编译器,对 ART 进行代码分析,让它可以在应用运行时持续提升 Android 应用的性能。 JIT 编译器对 Android 运行组件当前的 Ahead of Time (AOT) 编译器进行了补充,有助于提升运行时性能,节省存储空间,加快应用更新和系统更新速度。

4,快速的应用安装路径

Android 运行组件的 JIT 编译器最实际的好处之一是应用安装和系统更新的速度。 即使在 Android 6.0 中需要几分钟进行优化和安装的大型应用,现在只需几秒钟就可以完成安装。 系统更新也变得更快,因为省去了优化步骤。

5,随时随地低电耗模式

现在,在 Android N 中,低电耗模式又前进了一步,随时随地可以省电。只要屏幕关闭了一段时间,且设备未插入电源,低电耗模式就会对应用使用熟悉的 CPU 和网络限制。这意味着用户即使将设备放入口袋里也可以省电。


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

6,Project Svelte:后台优化

Project Svelte 在持续改善,以最大程度减少生态系统中一系列 Android 设备中系统和应用使用的 RAM。 在 Android N 中,Project Svelte 注重优化在后台中运行应用的方式。

7,Data Saver

Android N 推出了 Data Saver 模式,这是一项新的系统服务,有助于减少应用使用的蜂窝数据,无论是在漫游,账单周期即将结束,还是使用少量的预付费数据包。 Data Saver 让用户可以控制应用使用蜂窝数据的方式,同时让开发者打开 Data Saver 时可以提供更多有效的服务。

8,Vulkan API(API 文档

Android N 将一项新的 3D 渲染 API Vulkan™ 集成到平台中。就像 OpenGL™ ES 一样,Vulkan 是 3D 图形和渲染的一项开放标准,由 Khronos Group 维护。

9,Quick Settings Tile API( API 参考

Android N 添加了一个新的 API,可以定义自己的“快速设置”图块,使用户可以轻松访问应用中的关键控件和操作。

10,号码屏蔽(API 参考

Android N 现在支持在平台中进行号码屏蔽,提供框架 API,让服务提供商可以维护屏蔽的号码列表。 默认短信应用、默认手机应用和提供商应用可以对屏蔽的号码列表进行读取和写入操作。 其他应用则无法访问此列表。

11,来电过滤(API 参考 android.telecom.CallScreeningService

Android N 允许默认的手机应用过滤来电。手机应用执行此操作的方式是实现新的 CallScreeningService,该方法允许手机应用基于来电的Call.Details 执行大量操作

12,多区域设置支持、多语言(多语言支持

Android N 现在允许用户在设置中选择多个区域设置,以更好地支持双语用例。 应用可以使用新的 API 获取用户选择的区域设置,然后为多区域设置用户提供更成熟的用户体验 — 如以多个语言显示搜索结果,并且不会以用户了解的语言翻译网页。

13,新增的表情符号

Android N 引入更多表情符号和表情符号相关功能,包括肤色表情符号和支持变量选择符

14,Android 中的 ICU4J API( ICU4J 支持

Android N 目前在 Android 框架(位于 android.icu 软件包下)中提供 ICU4J API的子集。 迁移很简单,主要是需要从 com.java.icu 命名空间更改为 android.icu。如果您已在您的应用中使用 ICU4J 捆绑包,切换到 Android 框架中提供的 android.icu API 可以大量节省 APK 大小

15,OpenGL™ ES 3.2 API

Android N 添加了框架接口和对 OpenGL ES 3.2 的平台支持

16,Android TV 录制

Android N 通过新的录制 API 添加了从 Android TV 输入服务录制和播放内容的功能。 构建在现有时移 API 之上,TV 输入服务可以控制能够录制的渠道数据、保存录制的会话的方式,同时可通过录制的内容管理用户交互。

17,Android for Work

Android for Work 针对运行 Android N 的设备添加了许多新功能和 API。部分重要内容如下— 有关变更的完整列表,请参阅 Android forWork 更新

18,无障碍增强功能(API 参考 中的 android.accessibilityservice.GestureDescription)

Android N 现在针对新的设备设置直接在欢迎屏幕上提供“Vision Settings”。 这使用户可以更容易发现和配置他们设备上的无障碍功能,包括放大手势、字体大小、显示屏尺寸和 TalkBack。

19,直接启动

在 Android N 中,直接启动充分利用基于文件的加密,以针对系统和应用数据启用细化的加密策略。为系统和应用数据。系统针对选定的系统数据和显式注册的应用数据使用设备加密的存储。 默认情况下,凭据加密的存储可用于所有其他系统数据、用户数据、应用及应用数据。

20,密钥认证

为了让硬件支持的密钥库使用起来更简单和更安全,Android N 引入了密钥认证。 应用和关闭的设备可使用密钥认证以坚决地确定 RSA 或 EC 密钥对是否受硬件支持、密钥对的属性如何,以及其使用和有效性有何限制。

21,网络安全性配置(安全性配置

在 Android N 中,通过使用说明性“网络安全性配置”(而不是使用传统的易出错的编程 API(例如,X509TrustManager)),应用可以安全地自定义其安全(HTTPS、TLS)连接的行为,无需任何代码修改。

22,APK signature scheme v2(建议行方案)

23,作用域目录访问

在 Android N 中,应用可以使用新的 API 请求访问特定的外部存储目录,包括可移动媒体上的目录,如 SD 卡。新 API 大大简化了应用访问标准外部存储目录的方式,如 Pictures 目录。 应用(如照片应用)可以使用这些 API(而不是使用 READ_EXTERNAL_STORAGE),其授予所有存储目录的访问权限或存储访问框架,从而让用户可以导航到目录。

24,键盘快捷键辅助工具

在 Android N 中,用户可以按“Alt + /”触发“键盘快捷键”屏幕,它会显示的系统和对焦的应用中可用的所有快捷键

25,VR 支持(面向 Android Google VR SDK

26,打印服务增强

27,FrameMetricsListener API

FrameMetricsListenerAPI 允许应用监测它的 UI 渲染性能。 API 通过公开流式传输 Pub/Sub API 来提供此能力,以传递应用当前窗口的帧计时信息。 返回的数据相当于 adb shell dumpsysgfxinfo framestats 显示的数据,但不限定于在过去的 120 帧内。

28,虚拟文件

Android N 在存储访问框架中增加了“虚拟文件”的概念。 虚拟文件功能可以让您的 DocumentsProvider 返回可与 ACTION_VIEWIntent使用的文件 URI,即使它们没有直接字节码表示。 Android N 还允许您为用户文件(虚拟或其他类)提供备用格式。

 

适配问题:

问题1:

支持StatusbarTranslucent时显示URL bar位置需要在状态栏之下 (setcontent view时统一处理,但状态栏位置是动态添加所以需要特殊处理)

多窗口时:

1,在窗口下的位置时,控制显示的urlbar位置需要特殊处理;在窗口上位置时时,无需处理。所以面临多窗口状态下需要区分多窗口的问题。

2,全屏模式下可解决1的问题, 但是全屏模式下在多窗口里无法隐藏状态栏,所以在窗口上位置时,存在和状态栏重叠的问题。

3,多窗口变化时动态改变状态栏显示(理论上可行,但是增加额外的处理成本和页面重绘)

最终处理:

对24及以上版本,去除对StatusbarTranslucent支持。

问题2:

使用了24版本的API,则编译版本需指向Target 24

指向24后,很容易出现JDK版本冲突问题:

1,(Can't process class[dalvik/system/DexClassLoader.class] (Unsupported class version number [52.0](maximum 51.0, Java 1.7)))

2,如果找不对JDK 冲突的包单方面指向1.8还会有:

UNEXPECTEDTOP-LEVEL EXCEPTION:

com.android.dx.cf.iface.ParseException:bad class file magic (cafebabe) or version (0034.0000)

3, javac:无效的源发行版:1.8

最终处理:

使用android-24里的android.jar那么就得支持java 8版本, 需要检查编译的Jar包,proguard (proguard5.2.1支持) 是否均支持java 8版本。

问题3:

多窗口UI显示问题

1,      显示不全的页面,添加滚动支持。

2,      通过屏幕宽高计算显示位置和数量的,区分状态显示处理。

3,      输入法遮挡的,暂不处理。

4,      实在难兼容的,独立Task,不支持多窗口。

问题4:

涉及广播监听等和新API等问题,根据业务需要灵活适配。

你可能感兴趣的:(android项目)