- 非SDK接口管控
- 背景介绍
- 非SDK接口的定义
- SDK接口:https://developer.android.com/reference/packages,谷歌这个网站能查到的接口都是SDK接口;
- 非SDK接口:除了谷歌开放的SDK接口之外的其他JAVA接口都是非SDK接口
- 应用滥用非SDK接口的危害
- 非SDK接口的定义
- 背景介绍
这些非SDK接口在大版本之间的变化可能很频繁,带来兼容性问题。
-
-
- 非SDK接口管控名单:
- 名单说明:
- 非SDK接口管控名单:
-
名单类型 |
影响 |
名单说明 |
浅灰名单 |
targetSDK>=P时,警告 |
已有应用在使用的非SDK接口,任然可以继续使用 |
深灰名单 |
targetSDK<P时,警告;>=p时,不允许调用 |
没有发现应用在使用,但谷歌觉得有潜在的可能性 |
黑名单 |
所有三方应用不允许调用 |
灰名单(深灰+浅灰)之外的其他所有非SDK接口都会被添加到黑名单,应用发现有使用黑名单的接口需要马上整改,或者反馈给谷歌申请加灰名单 |
-
-
-
- 名单查看:
-
-
https://android.googlesource.com/platform/frameworks/base/+/master/config/
所有三方应用都可能会受到影响
-
-
- 具体影响
-
在Developer Preview的后续版本中,访问non-SDK接口的各种方法都会产生错误或其他不良结果:
通过自动化,或者是人工测试遍历应用每一个界面和所有功能,然后抓日志分析调用的所有非SDK接口,关键日志:
- Accessing hidden 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
- 输出扫描结果:
备注:使用了加固的应用,需要使用加固前的apk进行扫描
- 工具获取
途径1:谷歌开放了veridex静态扫描工具:
https://android.googlesource.com/platform/prebuilts/runtime/+/master/appcompat/
途径2:下载源码编译生成工具
https://source.android.google.cn/setup/downloading
-
-
- 非SDK接口整改
-
浅灰名单的非SDK接口目前还不需要整改,P版本可以正常使用,三方应用需要重点关注深灰名单和黑名单的非SDK接口,需要找可替代的SDK接口进行适配。
-
-
- 无法整改的接口给谷歌提单申请加浅灰名单
-
如果三方发现调用了无法替代的非SDK接口在深灰名单或者黑名单中,可向谷歌提供必需使用此接口的详细原因,申请重新评估该接口,问题反馈链接:https://partnerissuetracker.corp.google.com/issues/new?component=328403&template=102726
问题反馈邮件模板: