Android Q 适配

市场要求

  • 华为、小米督促应用开发者:5月底前适配Android Q
  • 谷歌已经于北京时间2019年3月14日正式对外发布Android Q Beta 1及预览版SDK
  • 华为应用市场已在3月15日启动Android Q版本应用适配检测工作。
  • 华为要求开发者对应用适配这一环节加以重视,并于2019年5月底前完成Android Q版本适配工作并自检通过。华为表示,针对未适配或在Android Q版本体验欠佳的应用,华为应用市场将在Android Q版本机型上采取下架、不推荐更新或屏蔽策略。
  • 小米应用商店也于4月2日向开发者发送了邮件,同样表示已启动Android Q版本应用适配检测工作,督促开发者在5月底前完成Android Q适配工作
  • 对于那些提交到Google Play商店的安卓应用,谷歌先前也定下了一个API等级的门槛。谷歌要求,从2019年8月起,提交到Play商店的应用目标API(targetSdkVersion,非最低兼容API“minSdkVersion”)应至少为APILevel 28(安卓9 Pie);2019年11月起,提交到Play商店的应用更新目标API也应至少为APILevel 28(安卓9 Pie)。

适配方案

1. 检查是否 APP 是否使用了 非SDK接口

非SDK接口描述

  • a. 黑名单:无论您的应用的 目标API级别 如何,您都无法使用的非SDK接口。如果您的应用尝试访问其中一个接口,系统将 抛出错误

  • b. 灰名单:您可以使用的非SDK接口,只要它们不受您应用的 目标API级别的 限制。

    灰名单 在Android 9(API级别28)中,灰名单分为以下两个列表

    • (1)lightgrey列表: targetSdkVersion<28 情况下可以使用的非SDK接口
    • (2)darkgrey list:targetSdkVersion>=28 情况下无法使用的非SDK接口 (greylist-max-o,greylist-max-p)

    在 Android Q 中,我们现在将这两个列表统称为 greylist(灰名单),

    • 但是受目标API级别限制: 如在 Android P 中被限制的黑灰色名单:darkgrey list 现在叫做 greylist-max-o, 在 Android Q 中被限制的非SDK接口应该称为 greylist-max-p
  • c. 白名单:可以自由使用的接口,作为官方记录的Android框架 包索引的 一部分得到支持。

三种方法

  • a. 使用Android 9 (API level 28) or higher的真机或模拟器,安装 debuggable 版 app。在应用程序上运行测试时,如果您的应用程序访问某些非SDK接口,系统会打印一条日志消息。然后使用 adb logcat 查看。
    Accessing hidden field Landroid/os/Message;->flags:I (light greylist, JNI)
  • b. 开启严苛模式 StrictMode API进行测试,再回调内捕获异常,获取日志;
  • c. 下载 veridex 工具测试 (解压veridex-xxx.zip文件到当前目录)
    • 执行命令:./appcompat.sh --dex-file=test.apk
    • 官方提示的局限性:(意思是还需要整体人工测试一下)
    • 它无法通过JNI检测到调用。
    • 它只能通过反射检测一部分调用。
    • 它对非活动代码路径的分析仅限于API级别检查。
  • 结论:a、b 还是需要人工发现问题,c 还是挺用的,但不能保证检查出所有问题;

发现使用黑名单SDK的解决办法

  1. 迁移到 SDK 替代方案。
  2. 无法找到替代方案,则应该 请求新的公共 API 。(意思是请求Google开放出来)

2. WLAN 直连广播限制:

使用Wi-Fi创建P2P连接 受限

3. Go 设备上限制 SYSTEM_ALERT_WINDOW

  • 允许应用使用类型创建窗口 WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY ,显示在所有其他应用之上。很少有应用程序应该使用此权限;这些窗口用于与用户进行系统级交互。

4. 关于以旧版 Android 系统为目标平台的应用的警告

* `compileSdkVersion 26` 可以解决

5. 应用使用情况Android Q 引入了与应用使用情况相关的以下行为变更:

  • UsageStats 应用使用情况的改进当在分屏或画中画模式下使用应用时,Android Q 现在能够使用UsageStats准确地跟踪应用使用情况。
    此外,Android Q 现在可以跟踪免安装应用的使用情况。
  • 按应用开启灰度模式Android Q 现在可以将应用设为灰度显示模式。
  • 暂停方面的改进在 Android Q 中,暂停的应用无法再播放音频。

6. 如果以 Android Q 为目标平台的应用:targetSdkVersion设置为“android-Q”或更高版本

  • 共享内存限制,不允许从后台读取剪贴板信息。
  • 禁止后台启动 Activity。 (验证推送)
  • Android 运行时只接受系统生成的 OAT 文件 。(可能涉及热修复升级)
  • 针对全屏 Intent 的权限变更。以 Android Q 或更高版本为目标平台并使用涉及全屏 Intent 的通知的应用必须在其应用的清单文件中请求 USE_FULL_SCREEN_INTENT 权限
  • Android Q 行为变更:以 Android Q 为目标平台的应用

Android 官方文档

  • Android Q 计划概览
  • Android Q 行为变更:所有应用
  • Android Q 行为变更:以 Android Q 为目标平台的应用
  • 非SDK接口的限制 说明

使用 Android Q 系统模拟器

  • 目前(4.10日),Google还没有放出正式版Q,稳定版Android Studio,无法下载 Android Q 系统镜像。
  • 如果使用 Android Q 系统模拟器,需要先安装Canary版本AS,再在 AVD Manager 下载 Android Q 系统镜像。
  • https://developer.android.com/studio/preview?hl=zh-CN