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的解决办法
- 迁移到 SDK 替代方案。
- 无法找到替代方案,则应该 请求新的公共 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