什么是非 SDK 接口
Posted
技术标签:
【中文标题】什么是非 SDK 接口【英文标题】:what is a non-SDK interface 【发布时间】:2018-10-10 12:50:15 【问题描述】:在搜索新的 android P 功能后,我发现了非 SDK 接口的限制。我的问题是,
或 SDK 接口? 它们之间有什么区别?特别是让非 SDK 变得更好。 适用于 android 的流行 SDK 和非 SDK 接口示例。
附:我遇到了区分 SDK 和 API 接口的抽象答案,但它没有满足我的问题:/
【问题讨论】:
嗯,官方文档里有解释……你不明白什么? @Selvin 从我的问题中可以看出,我在识别非 sdk 接口时遇到问题,我需要它的内容或身份,而不是文档关注的原因 【参考方案1】:引用the documentation:
一般来说,SDK 接口是那些在 Android 框架Package Index 中记录的接口。
并非框架中的所有内容都出现在文档中。源代码中标有@hide
的类、方法、字段等在运行时可用but are not part of the SDK,并且不会出现在文档中。这些项目只能通过非传统方式访问,例如反射。
这就是 Android P starting to ban。
多年来,我一直建议开发人员不要访问这些东西,因为它们不可靠。由于基于 Android 版本或设备制造商/ROM modder 调整的更改,任何 Android 设备都可能没有隐藏的东西。现在,至少在某些情况下,Google 将更加坚定地执行这一建议。
特别是让非 SDK 变得更好
它们并不“更好”。但是,出于某种原因(例如,API 尚未确定),它们可能会提供对 SDK 中不可用的某些功能的访问。
【讨论】:
Google play 在我的应用的APK 测试结果 中报告“问题:非SDK 接口的使用”。但是我没有在自己的源代码中使用任何隐藏的 API。问题是如何识别制造麻烦的库? @AlexanderFarber:在 Android 9.0 上,您应该在 LogCat 中看到一些关于非 SDK 接口使用的消息。同样在 9.0 上,您可以在StrictMode
中设置penaltyListener()
和在VmPolicy.Builder
中设置detectNonSdkApiUsage()
,以近乎实时地了解非 SDK API 的使用情况。
@AlexanderFarber 如果您使用 androidx 支持库,它会使用隐藏方法 computeFitSystemWindows
for setContentView()
导致 Android P 上的此违规报告
@materemias 那么我们就忽略那个违规报告吗?
@PrimožKralj:如果您使用的是这些库的最新版本,希望唯一的报告是针对灰名单条目,而不是黑名单条目。由 Google(AndroidX 开发人员)与 Google(创建非 SDK 接口列表的人)进行沟通,以使 AndroidX 在较新版本的 Android 上运行。以上是关于什么是非 SDK 接口的主要内容,如果未能解决你的问题,请参考以下文章