Android O 迁移应用官方指南

Android O 引入了若干新的功能和 API,并加入了即便您未对应用做任何更改仍可能对其行为产生影响的一些变动。为帮助您做好准备,本文将说明如何执行兼容性测试,以及如何更新应用以便利用 Android O 的新功能:

确保平台兼容性

验证您的应用能够在新版本平台上全功能运行。在此阶段,您不需要使用新的 API,也不需要更改应用的 targetSdkVersion,但可能需要进行一些细微的更改。

使用 Android O SDK 构建应用

当您准备好利用平台的新功能时,将 targetSdkVersion 更新至 “O”,验证应用是否仍可按预期方式运行,然后开始使用新的 API。

确保平台兼容性

这一步的目标是确保应用在 Android O 上可照常运行。由于一些平台变化可能影响应用的行为方式,因此可能需要进行一些调整,但您不需要使用新的 API 或更改 targetSdkVersion。

准备一台运行 Android O 的设备

如果您有一台兼容设备(Pixel、Pixel XL、Pixel C、Nexus 5X、Nexus 6P 或 Nexus Player),请从下面链接中包含的下载页面获得适合您的设备的 Android O 系统映像,然后按照说明将映像刷入设备。

下载链接

或下载适用于 Android Emulator 的 Android O 系统映像。它列于 SDK 管理器的Android O Preview下,显示为Google APIs Intel x86 Atom System Image

注:Android O 系统映像只能通过 Android Studio 3.0 Canary 下载。如需了解详细信息,请参阅下面一节以获取 Android O SDK。

执行兼容性测试

与 Android O 的兼容性测试多半与您准备发布应用时执行的测试属于同一类型。这时有必要回顾一下核心应用质量准则和测试最佳做法。

核心应用质量准则

测试最佳做法:


不过,测试还有另一个层面:Android O 向 Android 平台引入了一些变化,即便不对 targetSdkVersion 做任何变动,仍可能影响应用的行为或令其根本无法运行。因此,您必须回顾表 1 中的关键变化,并对任何为适应这些变化而实现的修复进行测试。

表 1. 对运行在 Android O 设备上的所有应用都有影响的关键变化。

变化摘要其他参考资料

后台位置更新频率下降如果应用接收来自后台服务的位置更新,则其在 Android O 上接收更新的频率要比旧版本 Android 低。具体地讲,后台服务接收位置更新的频率不能超过每小时几次。不过,当应用位于前台时,位置更新频率不变。后台位置限制

不再支持net.hostname查询net.hostname系统属性返回的结果为空。无

send(DatagramPacket)引发新异常如果之前执行的connect(InetAddress, int)方法失败,send(DatagramPacket)方法会引发SocketException。行为变更:网络连接和 HTTP(S) 连接

AbstractCollection方法引发正常的NullPointerException现在,AbstractCollection.removeAll(null)和AbstractCollection.retainAll(null)始终引发NullPointerException;之前,当集合为空时不会引发NullPointerException。此项变更使行为符合文档要求。行为变更:集合的处理

Currency.getDisplayName(null)引发正常的NullPointerException调用Currency.getDisplayName(null)会引发NullPointerException。行为变更:语言区域和国际化

如需查看更详尽的 Android O 行为变更列表,另请参阅以下链接中包含的 Android O 行为变更。

参考链接

构建具有 Android O 功能的应用

如 “如何测试 Android O 应用” 章节中的表 2 所述,除了提供新的 API 外,Android O 还会在您更新 targetSdkVersion 时引发其他行为变更。本节说明如何将开发环境设置为以新平台为目标,以及如何着手构建和测试 Android O API 带来的变化和新功能。

注:上述旨在确保平台兼容性的步骤是面向 Android O 构建应用的先决条件,因此请您务必先完成这些步骤。

获取 Android O SDK

安装 Android Studio 3.0 Canary。

只有 Android Studio 3.0 包含对 Android O 提供的所有新开发者功能的支持。因此您需要获得 Android Studio 3.0 Canary 版本,以便开始使用 Android O SDK。但您仍可保留已安装的 Android Studio 稳定版。

启动 Android Studio 3.0,然后点击Tools > Android > SDK Manager打开 SDK 管理器。

SDK Platforms标签中,选中Show Package Details。在Android O Preview下选中下列项:

Android SDK Platform O

Google APIs Intel x86 Atom System Image(只需在使用模拟器时选中)

切换到SDK Tools标签,选中所有已提供更新的项(点击每个显示破折号  的复选框)。这应该包括下列必需项:

Android SDK Build-Tools 26.0.0(rc2 或更高版本)

Android SDK Platform-Tools 26.0.0(rc2 或更高版本)

Android Emulator 26.0.0

Support Repository

点击OK安装所有选定的 SDK 软件包。

现在您就可以开始使用 Android O Developer Preview 进行开发了。

更新构建配置

将 compileSdkVersion、buildToolsVersion、targetSdkVersion 和 Support Library 版本更新为下列版本:

android {  compileSdkVersion 'android-O'  buildToolsVersion '26.0.0-rc2'  defaultConfig {    targetSdkVersion 'O'  }  ...}dependencies {  compile 'com.android.support:appcompat-v7:26.0.0-beta1'}// REQUIRED: Google's new Maven repo is required for the latest

// support library that is compatible with Android Orepositories {    maven {        url 'https://maven.google.com'    }}

您不能在此配置下发布应用。“O” 版本是一个临时 API 级别,只能用于 Android O Developer Preview 期间的开发和测试。您必须等到最终 API 级别发布时再发布 Android O 变更,届时再次更新配置。

从清单文件中移除广播接收器

由于 Android O 引入了新的广播接收器限制,因此您应该移除所有为隐式广播 Intent 注册的广播接收器。将它们留在原位并不会在构建时或运行时令应用失效,但当应用

运行在 Android O 上时它们不起任何作用。

显式广播Intent(只有您的应用可以响应的 Intent)在 Android O 上仍以相同方式工作。

这个新增限制有一些例外情况。如需查看在以 Android O 为目标平台的应用中仍然有效的隐式广播的列表,请通过点击以下链接参阅隐式广播例外。

参考链接

测试 Android O 应用

完成以上准备工作后,您就可以构建应用,然后对其做进一步测试,以确保 Android O 为目标平台时它能正常工作。这时您可以再次查阅我们的核心应用质量准则和测试最佳做法说明文档。

如果您构建应用时设置了适用于 Android O 的 targetSdkVersion,应该注意特定的平台变化。即便您不实现 Android O 中的新功能,其中的一些变化仍可能严重影响应用的行为或令其根本无法运行。

表 2 列出了这些变化以及可获得更多信息的链接。

表 2.targetSdkVersion 设置为 “O” 时影响应用的关键变化。

变化摘要其他参考资料

隐私性Android O 不支持使用 net.dns1、net.dns2、net.dns3 或 net.dns4 系统属性。行为变更:隐私性

实行了可写且可执行的代码段对于原生库,Android O 实行的规则是:数据不应可执行,代码不应可写。行为变更:原生库

ELF 标头和节验证动态链接器对 ELF 标头和节头中的更多值进行检查,如果值无效则失败。行为变更:原生库

通知以 SDK 的 Android O 版本为目标平台的应用必须实现一个或多个通知渠道,以便向用户发布通知。API 概览:通知

List.sort()方法该方法的实现不得再调用Collections.sort(),否则应用将因堆栈溢出而引发异常。行为变更:集合的处理

Collections.sort()方法在列表实现中,Collections.sort()现在会引发ConcurrentModificationException。行为变更:集合的处理

如果您对 Android O 迁移应用的过程中遇到问题或不解之处,欢迎您通过留言等的方式与我们联系。我们也会陆续发布更多开发者所关心的 Android O 内容。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容