满足 Google Play 目标 API 等级 (targetSdkLevel) 的要求

从 2018 年 8 月起,所有向 Google Play 提交的新应用都必须针对 Android 8.0 (API 等级 26) 开发。2018 年 11 月起,所有 Google Play 的现有应用更新同样必须针对 Android 8.0。

Android 每次版本更新都会作出变更,显著提升应用安全性以及性能并改善整体用户体验。其中部分变更仅适用于那些通过 manifest 文件中的 targetSdkVersion 属性 (即目标 API 等级) 明确指出支持新版 API 行为的应用。

请将您的应用目标 API 等级设置为最新版本并确保用户能够享用这些改进项目,同时允许应用在低版本 Android 仍旧可以运行。适配新目标等级后,应用可以利用 Android 平台最新功能 (latest features) 给用户创造更美好的体验。

本文重点说明了开发者在更新目标 API 中应该注意的几个事项,从而满足 Google Play 的要求。在进行下一步前,请根据您的 app 现有 API 等级阅览:

早于 Android 5.0 (API 等级 21)

早于 Android 6.0 (API 等级 23)

早于 Android 7.0 (API 等级 24)

早于 Android 8.0 (API 等级 26)

注意:如果您的 gradle 文件包含 manifest 条目,您可确认或者更改文件中 targetSdkVersion 的当下值,详情请阅览《如何配置您的构建》(Configure Your Build)。或者说,您也可以使用 manifest 文件中的 android:targetSdkVersion 配置项,具体操作请阅览  manifest 属性的相关文档。


早于 Android 5.0 (API 等级 21)

请根据 API 版本阅览相应的《行为变更》页面,确保您的应用能够顺利应对各个版本发布:

Android 5.0 (API 等级 21)

Android 4.4 (API 等级 19)

Android 4.1 x (API 等级 16)

早于 Android 6.0 (API 等级 23)

下文列举内容适用于针对 Android 6.0 或更高版本平台开发的应用:

在运行时请求权限

- 危险权限只可以在运行时被授予。应用的 UI 流必须提供相应可供性向用户请求这些权限;

- 但凡可能,您的应用要准备好应对权限请求被拒的情况。譬如说,如果某个用户拒绝您的应用访问设备 GPS,应用须通过其它方法继续运行。

要了解 Android 6.0 (API 等级 23) 的详细变更,请阅览该版本的《行为变更》(Behavior Changes) 文档。


早于Android 7.0 (API 等级 24)

下文列举内容适用于针对 Android 7.0 或更高版本平台开发的应用:

Doze 以及应用待机模式:

请根据《Doze 以及应用待机模式优化》一文中的相关描述设计您的 app,文章涵盖适用几个 Android 版本的逐步变更。

当设备进入 Doze 或者待机模式时,会产生下述系统行为:

- 网络访问限制;

- 推迟应用的 alarms、syncs 和 jobs;

- GPS 以及 Wi-Fi 扫描限制;

- 普通优先级 Firebase Cloud Messaging 消息限制;

权限变更

- 系统将限制访问应用私有目录;

- 在应用外公开 file://URI会导致 FileUriExposedException。开发者可以使用 FileProvider 在应用间进行文件共享;

系统阻止应用链接非 NDK 库。

要了解 Android 7.0 (API 等级 24) 的详细变更,请阅览该版本的《行为变更》(Behavior Changes) 文档。


早于 Android 8.0 (API 等级 26)

下文列举内容适用于针对 Android 8.0 或更高版本平台开发的应用:

后台执行限制 (Background Execution Limits)

- 若您的应用不运行在前台,系统将会限制服务:

·· 当应用试图调用 startService() 而 startService 又被禁止时,startService() 会抛出异常;

·· startForegroundService() 应用必须使用 startForeground() 和 startForegroundService() 函数启动前台服务;

·· 请前往 Android 8.0 (API 等级 26) 《行为变更》页面,仔细阅读关于 JobScheduler API 的变更;

·· Firebase Cloud Messaging 要求 10.2.1 或更高版本的 Google Play 服务 SDK;

·· Firebase Cloud Messaging documentation 在使用 Firebase Cloud Messaging 时,消息投递受限于后台执行限制。若消息接收需要必要后台工作,如后台数据同步,您的应用须要通过 Firebase Job Dispatcher 或者 JobIntentService 调度任务。详情请阅览《Firebase Cloud Messaging 文档》。

- 隐式广播限制:

·· 系统会限制隐式广播。有关处理后台事件详情,请阅读 JobSechduler API 文档;

   ·· 后台位置限制;

   ·· 后台运行的应用访问位置数据受限;

支持 Google Play 服务的设备可以通过 fused location provider 定期获取位置更新。

通知渠道

- 您应该为每个渠道分别定义通知中断设特性:

   ·· 您必须将通知分配到某一渠道 (channel),以便通知显示;

·· 该版本 Android 平台支持 NotificationCompat.Builder;

隐私

- ANDROID_ID 会根据每个应用签署密钥确定作用域。

要了解 Android 8.0 (API 等级 26) 的详细变更,请阅览该版本的《行为变更》(Behavior Changes) 文档。


现代化您的应用

当您在更新应用目标 API 等级时,请考虑应用平台近期发布的新功能,让您的应用更为现代化并为用户带去更好的体验。

请将您的 app 从 Google Cloud Messaging (GCM) 迁移至 Firebase Cloud Messaging 最新版本;

使用高级窗口管理:

- Declare Restricted Screen Support 支持更大宽屏比率 (大于 16:9),让应用能够利用最新的硬件技术。确保您的应用调整大小后能填充可用的屏幕空间。万不得已情况下,可以声明最大屏幕宽高比。更多有关最大屏幕宽高比信息,请阅览《声明受限屏幕支持》;

- multiple displays 添加多窗口支持,提升 app 效率并管理多屏幕适配;

- 如果最小化应用能够帮助您改善用户体验,您可添加画中画支持;

- 针对凹口屏幕设备的优化:

·· 不要假定状态栏高度,而是使用 WindowInsets 以及 View.OnApplyWindowInsetsListener;

·· 不要假定应用是全屏显示的,而是通过调用 View.getLocationInWindow() (注意:不是 View.getLocationOnScreen()) 来确定应用屏幕位置;

·· 在处理 MotionEvent 时,调用 MotionEvent.getX()和 MotionEvent.getY();而非 MotionEvent.getRawX() 或 MotionEvent.getRawY();

使用现代摄像头支持:

- 使用 Camera2 API 最大化摄像头利用率;

- Pixel 2 devices 在 Pixel 2 设备上启用 Pixel Visual Core 加速 HDR+ 处理。

检查并更新您的 SDK 和库

请确保您使用的三方 SDK 依赖项支持 API 26:部分 ADK 供应商会在发布说明中写明是否支持;其它供应商则须要进一步调查。如果您使用的 SDK 不支持 API 26,请尽快与 SDK 供应商合作解决该问题。

此外,请注意您的应用或者游戏中的 targetSdkVersion 可能会限制访问私有 Android 平台库,请阅览《将 NDK 应用链接至平台库》获取进一步信息。

您还须要验证您正在使用的 Android 支持库可能存在的任何限制。和以往一样,您必须确保应用中的 compileSdkVersion 与 Android 支持库主要版本能够顺利兼容。

我们推荐您选择小于或等于 Support Library 主要版本的 targetSdkVersion ,并建议您升级到近期发布的兼容 Support Library,从而能够使用到最新版本的兼容性特性和错误修正功能。

 点击文末 | 阅读原文 |查看更多指导文档链接

测试您的应用

在更新完应用的 API 等级和功能后,您须要测试一些核心用例。下文列举的几条建议并没有涵盖所有情况,但希望能给您提供指导作用。我们建议进行以下几个方面的测试:

测试应用兼容 API 26, 不产生错误和警告;

您的应用应该有相应策略来妥善应对用户拒绝访问权限的情况,并提示用户授予权限。为了达到该效果,您须要:

- 前往应用的信息页面,然后拒绝每个权限;

- 开启应用,确保没有崩溃;

- 进行核心用例测试,并确保所有必须权限请求再被显示;

妥善应对 Doze 模式,达到预期效果且不导致错误:

- 在应用运行时,使用 adb 让您的测试设备进入 Doze 模式:

   ·· 测试任何触发 Firebase Cloud Messaging 消息的用例;

   ·· 测试任何需要使用闹钟或者任务用例;

   ·· 消除所有后台服务依赖;

- 设置您的应用进入待机模式:

   ·· 测试任何触发 Firebase Cloud Messaging 消息的用例;

   ·· 测试任何需要使用闹钟的用例;

处理新拍摄的照片以及视频:

- 检查您的应用是否妥善处理 ACTION_NEW_PICTURE 以及 ACTION_NEW_VIDEO 广播限制 (即移动至 JobScheduler 任务);

- 确保任何依赖此类事件的重要用例都能顺利运行;

应用间分享文件:

- 请测试所有涉及到应用间分享文件数据的案例 (即使是同一开发者开发的应用);

- 请测试其它应用是否能够成功显示内容,而且不引发崩溃。

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

推荐阅读更多精彩内容