导读

在 Android P 版本中,谷歌加入了非 SDK 接口使用限制,无论是通过调用、反射还是 JNI 等方式,开发者都无法对非 SDK 接口进行访问,此接口的滥用将会带来严重的系统兼容性问题。

针对谷歌的大动作,开发者该如何快速反应,更便捷、高效的实现 P 版本的适配?华为专家为您带来非 SDK 管控特性适配指导的详细解读,一起来看看吧。

在开发过程中,开发者如果调用了非 SDK 接口,会导致应用出现 crash,无法启动;或在运行过程中出现崩溃、闪退等现象;也可能导致应用功能不可用等严重兼容性问题,其影响范围波及所有调用此接口的应用,因此,非 SDK 接口管控被誉为 Android 史上最严格的变更特性之一。

一、特性介绍

SDK 接口:

https://developer.android.google.cn/reference/packages,能够在谷歌网站查询到的接口都是 SDK 接口;

非 SDK 接口:

除以上的 SDK 接口外,其他都是非 SDK 接口

应用滥用 non-SDK interfaces 的危害:

非 SDK 接口在版本之间可能有所变化,将带来兼容性问题。

非 SDK 接口管控名单:

名单说明

查看名单

非 SDK 接口调用警告

二、兼容性影响

影响范围

调用非 SDK(包括深灰名单、黑名单)接口的所有应用都将受到影响

具体影响

在 Developer Preview 后续版本中,各种访问非 SDK 接口的方法都会产生错误或其他不良结果:

三、兼容性适配指导

获取应用使用的所有非 SDK 接口列表

输出非 SDK 接口列表:

非 SDK 接口扫描方法

方法 1:动态运行,通过日志分析扫描

通过自动化或人工测试,遍历应用每一个界面和所有功能,抓取日志分析调用的所有非 SDK 接口。

关键日志

*Accessinghidden field Landroid/os/Message;->flags:I (light greylist, JNI)

*Accessing hidden method

Landroid/app/ActivityThread;->currentActivityThread() Landroid/app/ActivityThread;(dark greylist, reflection)

*Accessing hidden method

Landroid/app/ActivityThread;->currentActivityThread() Landroid/app/ActivityThread;(blacklist, reflection)

方法 2:静态扫描,通过谷歌提供的 Veridex 扫描工具扫描

./art/tools/veridex/appcompat.sh --dex-file=test.apk

使用带参数的命令扫描可使扫描的结果更全面,但可能存在误报的情况:./art/tools/veridex/appcompat.sh --dex-file=test.apk --imprecise

谷歌已开放 DP2 版本对应的代码下载:

https://android.googlesource.com/platform/art/+/android-p-preview-2

源码下载指导:

https://source.android.google.cn/setup/downloading

下载 P 版本 Android 工程代码后,可直接在工程下编译运行扫描工具,再进行非 SDK 接口扫描。

非 SDK 接口整改

目前在 P 版本中,浅灰名单中的非 SDK 接口若不整改,仍可以正常使用。开发者需要重点关注的是 ++ 深灰名单和黑名单 ++ 中的非 SDK 接口,找到可替代的 SDK 接口进行适配。

无法整改的接口:向谷歌申请重新评估

如果调用的接口在深灰名单或者黑名单中,且无法找到可替代的 SDK 接口,可向谷歌提供必需使用此接口的详细原因,申请重新评估该接口,问题反馈链接:

https://issuetracker.google.com/issues/new?component=328403&template=1027267

问题反馈邮件模板:

重点关注

四、P 版本兼容性测试验证方法

方法一:购买谷歌 Pixel、Pixel XL、Pixel2、Pixel 2 XL,刷 P 版本进行测试

版本下载,参考:

https://developer.android.google.cn/preview/download

刷机

* 刷机前需要退出之前登录的谷歌账号

1.下载对应设备的压缩包并解压;

2.手机连 USB 后,执行 adb reboot bootloader 命令;

3.手机出现小机器人图案,并显示 ‘unlock’ 字样时,执行压缩包中的 bat 脚本。

如果是 “lock” 字样:

1.连续点击设置 - 版本号 7 次,打开开发人员选项;

2.在开发人员选项中打开 OEM unlock;

3.连接手机到电脑,执行 adb reboot bootloader 命令到小机器人界面;

4.执行 fastboot oem unlock,手机就解锁了,再使用上面的刷机方法即可。

方法二:远程真机调试

1.新用户注册使用

新用户如需申请使用华为终端开放实验室的云测功能,需加入安卓绿色联盟,成为会员。可通过以下步骤申请:

2.登录账号选择真机进行远程调试

3.选择手机:Pixel

4.点击 “立即体验”,上传 APK 进行调试

方法三:使用谷歌模拟器验证

安装和配置 Android P SDK 和模拟器

参考:

https://developer.android.google.cn/preview/setup-sdk


↙↙↙阅读原文可查看相关链接,并与作者交流