导读android
在 Android P 版本中,谷歌加入了非 SDK 接口使用限制,不管是经过调用、反射仍是JNI等方式,开发者都没法对非 SDK 接口进行访问,此接口的滥用将会带来严重的系统兼容性问题。app
针对谷歌的大动做,开发者该如何快速反应,更便捷、高效的实现P版本的适配?华为专家为您带来非 SDK 管控特性适配指导的详细解读,一块儿来看看吧。ide
在开发过程当中,开发者若是调用了非 SDK 接口,会致使应用出现crash,没法启动;或在运行过程当中出现崩溃、闪退等现象;也可能致使应用功能不可用等严重兼容性问题,其影响范围波及全部调用此接口的应用,所以,非 SDK 接口管控被誉为Android史上最严格的变动特性之一。 工具
SDK 接口: 测试
https://developer.android.google.cn/reference/packages,可以在谷歌网站查询到的接口都是 SDK 接口; 网站
非 SDK 接口: google
除以上的 SDK 接口外,其余都是非 SDK 接口 spa
应用滥用 non-SDK interfaces 的危害: 调试
非 SDK 接口在版本之间可能有所变化,将带来兼容性问题。 日志
非 SDK 接口管控名单:
名单说明
查看名单 https://android.googlesource.com/platform/frameworks/base/+/master/config/
非 SDK 接口调用警告
全部私有 API 均在 Logcat 中显示警告。
DP版本在 Activity 开始时会显示 Toast 警告。
Debuggable 应用出现对话框警告,弹框内容和 Toast 提示内容一致。
从 DP2 开始,由StrictMode内新增的detectNonSdkApiUsage()来检测违规的调用。
正式商用版本将去掉 Toast 警告和对话框提示。
影响范围
调用非 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/
工具编译:make appcompat
工具执行:
./art/tools/veridex/appcompat.sh --dex-file=test.apk
使用带参数的命令扫描可以使扫描的结果更全面,但可能存在误报的状况:./art/tools/veridex/appcompat.sh --dex-file=test.apk --imprecise
输出扫描结果:
备注:已经加固的应用,须要使用加固前的 APK进行扫描
工具下载:
谷歌已开放 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
问题反馈邮件模板:
重点关注
应用测试发现须要申请加入浅灰名单的非SDK接口需尽快反馈给谷歌,越晚反馈,谷歌修改的难度将越大,可能会致使没法加入灰名单而影响应用的功能;
谷歌发布的 DP2 版本中已加入黑名单,建议开发者在DP2版本中测试验证应用调用的非 SDK 接口,针对没法整改的非SDK接口,及时向谷歌反馈必需使用此接口的详细缘由,申请从新评估该接口。
方法一:购买谷歌 Pixel、Pixel XL、Pixel二、Pixel 2 XL,刷 P 版本进行测试
版本下载,参考:
刷机
*刷机前须要退出以前登陆的谷歌帐号
1.下载对应设备的压缩包并解压;
2.手机连 USB 后,执行 adb reboot bootloader 命令;
3.手机出现小机器人图案,并显示‘unlock’字样时,执行压缩包中的 bat 脚本。
若是是“lock”字样:
1.连续点击设置-版本号7次,打开开发人员选项;
2.在开发人员选项中打开 OEM unlock;
3.链接手机到电脑,执行 adb reboot bootloader 命令到小机器人界面;
4.执行 fastboot oem unlock,手机就解锁了,再使用上面的刷机方法便可。
方法二:远程真机调试
1.新用户注册使用
新用户如需申请使用华为终端开放实验室的云测功能,需加入安卓绿色联盟,成为会员。可经过如下步骤申请:
登陆https://deveco.huawei.com/;
使用所在公司尾缀的邮箱进行帐号注册;
将您新申请的帐号、所在公司、我的姓名及电话、负责的应用名称发送至deveco@huawei.com,申请成为安卓绿色联盟会员,经过审核后,将为您开通使用权限;
2.登陆帐号选择真机进行远程调试
3.选择手机:Pixel
4.点击“当即体验”,上传 APK 进行调试
方法三:使用谷歌模拟器验证
安装和配置 Android P SDK 和模拟器
参考:https://developer.android.google.cn/preview/setup-sdk