使用不同 targetSdkVersion 构建库和应用程序时 Android 中的行为

Per*_*eri 6 java android android-studio targetsdkversion

我是一个用于 Android 应用程序的库的作者。目前正在检查我的库在 Android 14 (API 34) 上的行为方式。

现在,API 34 删除了几个现有方法。例如,该方法android.webkit.WebSettings#setAppCacheEnabled已被删除。 https://developer.android.com/about/versions/14/behavior-changes-14#non-sdk-restrictions

值得注意的是,我的图书馆使用WebSettings#setAppCacheEnabled.

我已将该库安装到新创建的应用程序中以确保其正常工作。我的图书馆是用targetSdkVersion 28和构建的compileSdkVersion 28。我为 Android 14 创建的应用程序是使用targetSdkVersion 34和构建的compileSdkVersion 34

该库和应用程序的 AndroidManifest 将由 ManifestMerger 合并,并且两者都应适用于 API 34。

我预计这个测试应用程序无法正常工作,因为WebSettings#setAppCacheEnabled它在 API 34 中被删除了。但事实上,与我的预期相反,没有发生错误。为什么是这样?

谁知道为什么,请告诉我。

(我在 Android 14(UpsideDown Preview)模拟器上执行了此测试。)

小智 -1

目前,您正在使用的方法只能添加到不受支持的类别中,因此您可以使用它。将来可能会被阻止。

\n
\n

有条件阻止 (greylist-max-x):-

\n

从 Android 9(API 级别 28)开始,每个 API 级别都有非 SDK\n接口,当应用面向该 API 级别时,这些接口会受到限制。

\n

这些列表以应用程序无法再访问该列表中的非 SDK 接口之前可以定位的最大 API 级别 (max-target-x) 进行标记。例如,在 Android Pie 中未阻止但现在在 Android 10 中被阻止的非 SDK 接口是 max-target-p (greylist-max-p) 列表的一部分,其中 \xe2\x80\x9cp\ xe2\x80\x9d 代表 Pie 或\nAndroid 9(API 级别 28)。

\n

如果您的应用尝试访问受您的目标 API 级别限制的接口,则系统的行为就像该 API 属于阻止列表的一部分一样。

\n
\n

检查这个: https: //developer.android.com/guide/app-compatibility/restrictions-non-sdk-interfaces#list-names

\n