gpt4 book ai didi

Android P 非 SDK 接口(interface)限制适用于 android.support 和/或 androidx

转载 作者:行者123 更新时间:2023-11-29 23:28:12 25 4
gpt4 key购买 nike

我们都知道并喜欢 "Restrictions on non SDK interfaces" .该页面有关于术语定义的说明:

Generally speaking, SDK interfaces are those ones found documented in the Android framework Package Index.

此包索引左侧的包菜单有一个名为“Android 平台”的第一部分,然后是一个名为“Android 支持库”的单独部分。和黑名单here android.support 中没有任何符号。

那么,非SDK接口(interface)政策是否绝对适用于“Android平台”中的类?并且永远不会在设计上包含 Androidx?

最佳答案

嗯,是的。

支持库可帮助开发人员在不牺牲功能的情况下瞄准更广泛的受众。 @hide API 存在于 native 平台中,因为它们不应该被应用程序使用。支持库存在的唯一原因是供应用程序使用。

原生SDK是一个SDK。它告诉 Android Studio 哪些类、方法和常量已经存在于 Android 中,在 framework.jar 中。它们实际上都没有内置到您的 APK 中。将 native SDK(和任何 SDK)视为对 Android Studio 的一种“ promise ”,即您正在做的事情将在它运行时真正起作用。 SDK 还取决于设备上实际存在的内容。如果 SDK 有设备没有的方法,Android Studio 会编译,但应用会在尝试调用该方法时在该设备上崩溃。

当类、方法或变量在 AOSP 中具有 @hide 标志时,Google 使用的 SDK 编译器会简单地从它构建的 SDK JAR 中删除该类、方法或变量。这意味着 Android Studio 没有“ promise ”这些东西存在(据它所知,它们不存在),因此它不会构建。但是,这些方法仍然存在于设备上。这就是为什么在 Pie 之前,您只能使用反射来访问 Android 的这些隐藏部分。

Pie 引入了一项“安全”“功能”,可检查应用程序正在使用的方法、类或变量是否被列入黑名单。如果是,当应用程序尝试访问时,如果应用程序不是系统应用程序,Android 将抛出 SecurityException。在您的应用程序和框架之间有一种看门人。

但是,AndroidX 不是 SDK。这是一个图书馆。库编译到您的 APK 中,因为它们的组件在目标设备上尚不存在。我在 AndroidX 中看到了一些用 @hide 注释的方法,但我很确定这是一个错误。 Gradle 编译器,至少在默认情况下,不会使用 @hide 删除任何内容,这样做没有任何意义,因为库 存在于您的 APK 中。

关于Android P 非 SDK 接口(interface)限制适用于 android.support 和/或 androidx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53136739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com