2个回答
展开全部
首先,公共SDK接口是在Android框架软件包索引中记录的那些接口,而非SDK接口的处理是API抽象出来的实现细节,因此这些接口可能会在不另行通知的情况下随时发生更改。
比如应用在通过反射等机制与类互动时(WebView、HTTP等),android9.0之后就不应访问SDK中未列出的方法或字段,否则会提示报错,应用老老实实的用谷歌大佬提供的API就好了。
扩展资料:
应用调试时进行测试
先建议开启lintOptions,检测一下其他问题。
另外在搭载Android9(API级别28)或更高版本的设备或模拟器上构建和运行可调试应用来测试该应用是否使用非SDK接口。
在应用上运行测试时,如果该应用访问了某些非SDK接口,系统就会输出一条日志消息。
可以检查应用的日志消息,查找以下详细信息:
声明的类、名称和类型(采用Android运行时所使用的格式)。
访问方式:链接、反射或JNI
所访问的非SDK接口属于哪个列表。
展开全部
题主是指 Android 9 中提到的“非 SDK 接口”吗?
这个东西在 iOS 开发中叫“私有 API”。
通俗的说,两者都是官方提供的接口。但前者明文包含在 SDK 中,允许开发者调用;后者出于各方面原因(比如还在测试中或是这个接口仅供系统内部调用),不鼓励甚至禁止开发者调用。
这个东西在 iOS 开发中叫“私有 API”。
通俗的说,两者都是官方提供的接口。但前者明文包含在 SDK 中,允许开发者调用;后者出于各方面原因(比如还在测试中或是这个接口仅供系统内部调用),不鼓励甚至禁止开发者调用。
追问
对对对,就是安卓9中的“非SDK接口”,一直搞不明白是什么意思。SDK我知道是什么,但“SDK接口不知道是什么”。您的意思“SDK接口”是指SDK API(SDK中的API)吗? 那“非SDK接口”就是SDK以外的API ? 反映到具体的安卓应用上是什么样的?什么样的APP使用的是SDK接口?什么样的APP使用的是非SDK接口?
万分感谢!
追答
SDK 就是一整套 API。
安卓开发者文档里提供的就都是“SDK 接口”;没提供的、甚至有些是 private 的字段或方法,就是“非 SDK 接口”了。
我猜题主之所以问这个问题,是担心自己不小心调了什么“非 SDK 接口”?所有“非 SDK 接口”,你都无法通过正常的方式调用,都需要通过反射等其他手段来实现。题主现在提了这个问题,一般是还没到能使用他们的程度……
非 SDK 接口太多了,但因为他们并不在官方提供的文档之上,所以能被人所知的基本都是通过反编译等手段“非法”取得的。热更新啊、后台常驻啊一般用这种“黑魔法”比较多,因为说白了官方不让你这么干,你非得干,就得动动别的心思了……
再比如系统自带的 DatePicker,默认是“年月日”,但现在有个需求是只选择“年月”,必须用 DatePicker 而不能自定义控件,那这个时候就得通过反射访问其内部本来是 private 的 mDaySpinner 来不让它显示了。人家之所以用 private 修饰的就是不让你在外部访问它,结果你用其他手段访问了,这也是一种“非 SDK 接口”。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询