前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >非SDK接口自动化检测工具--veridex

非SDK接口自动化检测工具--veridex

原创
作者头像
静默加载
发布2022-03-04 10:36:10
1K0
发布2022-03-04 10:36:10
举报
icon-ed.jpg
icon-ed.jpg

前言

在Android P版本,Google对非SDK接口增加了管控。

SDK接口指的是Android官方开发文档中声明的方法,即文档地址 中所能查询到的API,除了这些,其他的API都是非SDK接口

官网:针对非 SDK 接口的限制

非SDK接口分类

随着每个 Android 版本的发布,会有更多非 SDK 接口受到限制。

为最大程度地降低非 SDK 使用限制对开发工作流的影响,我们将非 SDK 接口分成了几个名单,这些名单界定了非 SDK 接口使用限制的严格程度(取决于应用的目标 API 级别)。下表介绍了这些名单:

名单

说明

屏蔽名单 (blacklist)

无论应用的目标 API 级别是什么,您都无法使用的非 SDK 接口。 如果您的应用尝试访问其中任何一个接口,系统就会抛出错误

有条件屏蔽 (greylist-max-x)

从 Android 9(API 级别 28)开始,当有应用以该 API 级别为目标平台时,我们会在每个 API 级别分别限制某些非 SDK 接口。这些名单会以应用无法再访问该名单中的非 SDK 接口之前可以作为目标平台的最高 API 级别 (max-target-x) 进行标记。例如,在 Android Pie 中未被屏蔽、但现在已被 Android 10 屏蔽的非 SDK 接口会列入 max-target-p (greylist-max-p) 名单,其中的“p”表示 Pie 或 Android 9(API 级别 28)。如果您的应用尝试访问受目标 API 级别限制的接口,系统就会将此 API 视为已列入屏蔽名单

不支持 (greylist)

当前不受限制且您的应用可以使用的非 SDK 接口。 但请注意,这些接口不受支持,可能会在不另行通知的情况下随时发生更改。预计这些接口在未来的 Android 版本中会被有条件地屏蔽,并列在 max-target-x 名单中。

SDK (whitelist)

已在 Android 框架软件包索引中正式记录、受支持并且可以自由使用的接口。

  • greylist :不支持,可以正常使用;
  • blacklist :无论什么版本的手机系统,使用这些api,系统将会抛出异常;
  • greylist-max-o :受限制的灰名单,APP运行在 版本<=8.0的系统里 可以正常访问,targetSDK>8.0且运行在>8.0的手机会抛出异常;
  • greylist-max-p :受限制的灰名单,APP运行在 版本<=9.0的系统里 可以正常访问,targetSDK>9.0且运行在>9.0的手机会抛出异常;
  • greylist-max-q :受限制的灰名单,受限制的灰名单。APP运行在 版本<=10.0的系统里 可以正常访问,targetSDK>10.0且运行在>10.0的手机会抛出异常;

使用 veridex 工具进行测试

Google提供了一个静态检测工具veridex下载地址 需科学上网

您还可以在 APK 上运行静态分析工具 veridex。veridex 工具会扫描 APK 的整个代码库(包括所有第三方库),并报告发现的所有使用非 SDK 接口的行为。

veridex 工具存在以下局限性:

  • 它无法检测到通过 JNI 实现的调用。
  • 它只能检测到一部分通过反射实现的调用。
  • 它对非活动代码路径的分析仅限于 API 级别的检查。
  • 它只能在支持 SSE4.2 和 POPCNT 指令的机器上运行。

以上内容均来自官网的文档翻译。

实测结果:

result.png
result.png

看到输出的结果unsupportedblockedmax-target-x。是文档过期了,还是我的 veridex 工具版本太旧了,网上找了几个其他版本输出的都是这个结果。

继续在官网找了找其他说明,在一篇https://developer.android.com/about/versions/10/non-sdk-q文章中看到了max-target-x相关的说明。

case.png
case.png

blacklist == blocked :无论什么版本的手机系统,使用这些api,系统将会抛出异常;

greylist == unsupported :不支持,但可以正常使用;

greylist-max-x == max-target-x :APP运行在 版本<=x的系统里 可以正常访问,targetSDK>x且运行在>x的手机会抛出异常;

max-gerget-0的case分析一下:

代码语言:java
复制
#37: Reflection max-target-o Landroid/content/pm/ActivityInfo;->isFixedOrientation use(s):
       Lcom/xxx/xxx/xxx/j;->b(Landroid/app/Activity;)Z
#84: Reflection max-target-o Landroid/view/View;->sAcceptZeroSizeDragShadow use(s):
       Lcom/xxx/xxx/xxx/a/c;->M(Landroid/widget/TextView;)V
  • ActivityInfo#isFixedOrientation
  • View#sAcceptZeroSizeDragShadow

以上两个方法或者变量可以在targetSDK<=27的时候使用,但如果升级targetSDK就会抛出异常。

ides-tip.png
ides-tip.png

最好寻找相关替代的api进行使用,否则在使用的时候进行异常捕获。

文章到这里就全部讲述完啦,若有其他需要交流的可以留言哦~!~!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 非SDK接口分类
  • 使用 veridex 工具进行测试
相关产品与服务
检测工具
域名服务检测工具(Detection Tools)提供了全面的智能化域名诊断,包括Whois、DNS生效等特性检测,同时提供SSL证书相关特性检测,保障您的域名和网站健康。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档