hi,你好!欢迎访问本站!登录
本站由网站地图腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

Android9.0 怎样辨别SDK接口和非 SDK接口

2019-11-18杂谈搜奇网44°c
A+ A-

方才有同砚问我,不太相识 “非SDK接口” 是什么意义?android9.0有什么限定 ?apache的http也有限定 ?

而且如今的大部分体系都升级上来了,黑名单、灰名单和白名单 也是必需要相识一下的,这里参考Google开发者网站给人人整顿一下。

起首,大众 SDK 接口是在 Android 框架软件包索引 中纪录的那些接口,什么是框架软件包?

链接地点:https://developer.android.google.cn/reference/packages.html

非 SDK 接口 的处置惩罚是 API 笼统出来的完成细节,因而这些接口能够会在不另行关照的情况下随时发作变动。

黑名单 不管运用的目的 API 级别是什么,都没法运用此列表中的非 SDK 接口。假如您的运用尝试接见个中任何一个接口,体系就会抛出毛病。
灰名单 从 Android 9(API 级别 28)最先,在每一个 API 级别离别会限定某些非 SDK 接口。假如运用的目的 API 级别较低,您能够接见灰名单中的受限 API,但假如您的运用尝试接见在您的目的 API 级别受限的非 SDK 接口,体系就会假定此 API 已列入黑名单。说白了,就是只要在您运用的目的 API 级别不限定此列表中的非 SDK 接口,您就能够运用它们。
白名单 此列表中的接口已在 Android 框架软件包索引中正式纪录,它们是受支撑的接口,您能够自在运用。

有的同砚听完照样比较忧郁……

那换个说法吧,比方运用在经由过程反射等机制与类互动时(WebView、HTTP等),android9.0以后就不该接见 SDK 中未列出的要领或字段,否则会提醒报错,运用老老实实的用谷歌大佬供应的API就好了。

来看谷歌大佬的回应:

只管您现在仍能够运用灰名单中的某些非 SDK 接口(取决于您运用的目的 API 级别),然则假如您运用任何非 SDK 要领或字段,终归存在很能够会破坏运用的风险。

假如您的运用依赖于非 SDK 接口,则应当最先设计迁移到 SDK 接口或其他替换计划。假如您没法为运用中的功用找到运用非 SDK 接口的替换计划,则应当请求新的大众 API。

只管照样能够运用,但后果自负。

有frameworks的同砚能够看这个途径,此文本包含已列入灰名单的非受限 API 的列表。

假如非常想运用此接口又找不到替换计划?

假如非常想运用此接口又找不到替换计划时怎样办?能够找Google提需求,以下图。

别的的申明都能够疏忽,主如果确认本身的SDK接口究竟是不是是属于非SDK接口。

运用调试时举行测试

先发起开启lintOptions,检测一下其他题目。

另外在搭载 Android 9(API 级别 28)或更高版本的装备或模拟器上构建和运转可调试运用来测试该运用是不是运用非 SDK 接口。

在您的运用上运转测试时,假如该运用接见了某些非 SDK 接口,体系就会输出一条日记音讯。

您能够搜检运用的日记音讯,查找以下详细信息:

  • 声明的类、称号和范例(采纳 Android 运转时所运用的花样)。
  • 接见体式格局:链接、反射或 JNI
  • 所接见的非 SDK 接口属于哪一个列表。

我们能够运用 adb logcat 来检察这些日记音讯,这些音讯显现在所运转运用的 PID 下,不过日记音讯看起来很痛楚……

举例而言,日记中能够包含以下条目:

Accessing hidden field Landroid/os/Message;->flags:I (light greylist, JNI)

我们也能够运用 StrictMode API 举行测试的
记得在主要领内里开启 StrictMode,用 StrictMode API 来测试运用是不是运用 非 SDK 接口 ,怎样开启?翻开 detectNonSdkApiUsage 要领 ,然后运用 penaltyListener 来吸收每次运用 非 SDK 接口的行动所对应的回调,而且能够在个中完成自定义处置惩罚。

回调中供应的 Violation 对象派生自 Throwable,而且封闭式客栈轨迹会供应响应运用行动的上下文。

固然,我们也能够运用 veridex 东西举行测试的

您还能够在 APK 上运转静态剖析东西 veridexveridex 东西 会扫描 APK 的全部代码库(包含一切第三方库),并报告发明的一切运用非 SDK 接口的行动。

不过 veridex 东西存在以下局限性:

  • 它没法检测到经由过程 JNI 完成的挪用。
  • 它只能检测到一部分经由过程反射完成的挪用。
  • 它对非运动代码途径的剖析仅限于 API 级别的搜检。

有的人会猎奇,它对原生代码中的非 NDK 接口是不是有限定?Google大佬回应,Android SDK 包含 Java 接口。Android 平台从 Android 7(API 级别 26)最先就已限定接见原生 C/C++ 代码中的非 NDK 的接口了。

作者:奥特曼超人Dujinyang

泉源:CSDN

原文:dujinyang.blog.csdn.net/

版权声明:本文为博主杜锦阳原创文章,转载请附上博文链接!

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
Android9.0 怎样辨别SDK接口和非 SDK接口

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/281972.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>