Android P版本应用兼容性适配第二季

  1. SDK接口管控
    1. 背景介绍
      1. 非SDK接口的定义
        1. SDK接口:https://developer.android.com/reference/packages,谷歌这个网站能查到的接口都是SDK接口;
        2. 非SDK接口:除了谷歌开放的SDK接口之外的其他JAVA接口都是非SDK接口
      2. 应用滥用非SDK接口的危害

这些SDK接口在大版本之间的变化可能很频繁,带来兼容性问题。

      1. 非SDK接口管控名单:
        1. 名单说明:

名单类型

影响

名单说明

浅灰名单

targetSDK>=P时,警告

已有应用在使用的非SDK接口,任然可以继续使用

深灰名单

targetSDK<P时,警告;>=p时,不允许调用

没有发现应用在使用,但谷歌觉得有潜在的可能性

黑名单

所有三方应用不允许调用

灰名单(深灰+浅灰)之外的其他所有非SDK接口都会被添加到黑名单,应用发现有使用黑名单的接口需要马上整改,或者反馈给谷歌申请加灰名单

        1. 名单查看:

https://android.googlesource.com/platform/frameworks/base/+/master/config/

    1. 兼容性影响
      1. 影响范围

所有三方应用都可能会受到影响

      1. 具体影响

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

    1. 适配指导
      1. 获取应用使用的所有非SDK接口列表
        1. 方法1:动态运行,通过日志分析扫描获取

通过自动化,或者是人工测试遍历应用每一个界面和所有功能,然后抓日志分析调用的所有非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)
        1. 方法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

      1. 非SDK接口整改

浅灰名单的非SDK接口目前还不需要整改,P版本可以正常使用,三方应用需要重点关注深灰名单和黑名单的非SDK接口,需要找可替代的SDK接口进行适配。

      1. 无法整改的接口给谷歌提单申请加浅灰名单

如果三方发现调用了无法替代的非SDK接口在深灰名单或者黑名单中,可向谷歌提供必需使用此接口的详细原因,申请重新评估该接口,问题反馈链接:https://partnerissuetracker.corp.google.com/issues/new?component=328403&template=102726

问题反馈邮件模板:

猜你喜欢

转载自blog.csdn.net/qq_33209777/article/details/86741323