先上干货 ,非SDK接口的Google官方检测工具:
Linux版本:veridex-linux
Mac版本:veridex-mac
1.非SDK接口限制
Android P版本中就已经提出了非SDK接口限制,但在最新的Q版本中,被限制的接口的分类有较大变化
非SDK接口限制就是某些SDK中的私用方法,如private方法,你通过Java反射等方法获取并调用了。那么这些调用将在target>=P或target>=Q的设备上被限制使用,当你使用了这些方法后,会报错。
2.检测工具的使用
1)根据系统下载对应版本的工具并解压(文章开头)
2)使用命令行cd到veridex-linux/veridex-mac 目录下
3) chmod 777 * 给权限(不给权限的情况下可能失败)
4)执行./appcompat.sh --dex-file=Q.apk 进行检测(Q.apk为包的绝对路径,如果包与veridex在相同目录下直接输入包文件名即可)
5)查看结果
另:如果是执行 ./appcompat.sh --dex-file=Q.apk > report.txt 会自动检测并把控制台输出重定向到报告文件
以下是mac的实际操作与结果:(只截取了部分内容)
执行过程
打印结果
3.结果分析
1)greylist: 灰名单,即当前版本仍能使用的非SDK接口,但在下一版本中可能变成被限制的非SDK接口
2)blacklist:黑名单,使用了就会报错。也是我们项目中必须解决的非SDK接口
3)greylist-max-o:在targetSDK<=O中能使用,但是在targetSDK>=P中被限制的非SDK接口
4)greylist-max-p:在targetSDK<=P中能使用,但是在targetSDK>=Q中被限制的非SDK接口
所以从适配Q的角度出发,除了greylist我们可以暂时不解决以外,其余三种类型的非SDK接口需要我们进行适配。
特别感谢:好基友宇神