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

Android P非SDK接口限制适用于Android.support和/或androidx,android,android-9.0-pie,Android,Android 9.0 Pie,我们都知道并热爱这个世界。该页对术语的定义有如下说明: 一般来说,SDK接口是Android框架包索引中记录的接口 此软件包索引左侧的软件包菜单有一个标题为“Android平台”的第一部分,然后是一个单独的标题为“Android支持库”的部分。黑名单在android.support中没有任何符号 那么,是否绝对确定非SDK接口策略只适用于“Android平台”中的类?而且设计上永远不会包括Androidx?嗯,是的 支持库可以帮助开发人员在不牺牲功能的情况下瞄准更广泛的受众@hideAPI存在于

我们都知道并热爱这个世界。该页对术语的定义有如下说明:

一般来说,SDK接口是Android框架包索引中记录的接口

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

那么,是否绝对确定非SDK接口策略只适用于“Android平台”中的类?而且设计上永远不会包括Androidx?

嗯,是的

支持库可以帮助开发人员在不牺牲功能的情况下瞄准更广泛的受众<代码>@hideAPI存在于本机平台中,因为应用程序不应该使用它们。支持库存在的唯一原因是应用程序要使用它

本机SDK是一个SDK。它告诉Android Studio哪些类、方法和常量已经存在于Android中,
framework.jar
。这些都没有真正内置到APK中。可以将本机SDK(以及任何SDK)看作是对AndroidStudio的一种“承诺”,即您所做的工作在运行时将真正起作用。SDK还取决于设备上实际存在的内容。如果SDK有一个设备没有的方法,Android Studio将编译,但当试图调用该方法时,应用程序将在该设备上崩溃

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

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

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