为什么我仍然可以发布 Api 级别低于 26 的应用程序,如果 google 只接受 Api 级别为 26 或更高级别的应用程序?

Why I can still publish app that has Api level lower than 26 if google will only accept apps with Api level 26 or newer?

最近看了一本关于android的书,里面说Starting with august 2019, Google play will only accept apps built using Api 26 or newer。但最近我们发布了 android 最低 Api 级别 23 的应用程序,并且已成功发布。谁能说说是什么场景,还是书上的说明有误?

他们不是在谈论 minSdk ,他们在谈论 targetSdkcompileSdk

请注意,我使用了 "or",因为您的 targetSdk 不能高于您的 compileSdk

当您增加 targetSdk 编号时,您必须遵守新的 api 和强制执行的规则,但是使用旧的 compile/target sdk 将允许您以与它们工作时相同的方式使用这些功能早期版本(这是安全漏洞的根本原因之一)。这就是为什么他们设置了限制,所以每个应用程序都被迫使用 'new way of doing things' 而不是旧的。

例如,在 Android 5.0 之前,安装应用程序时会授予权限,但后来更改了权限,因此现在您必须在运行时询问权限。如果您的目标 Sdk api 低于 Android 5.0,您无需执行任何操作,它也可以在较新的设备上运行。但是,如果您的目标 api 高于 Android 5,则您 必须 请求运行时权限,否则较新的 sdk 代码会抛出异常。

这意味着您的 目标 API 必须是他们的最小值(在本例中为 28),但您仍然可以设置自己的最小值 API 允许向后兼容的任何内容。

When you upload an APK, it needs to meet Google Play’s target API level requirements. Starting August 1, 2019, Google Play requires that new apps target at least Android 9.0 (API level 28), and that app updates target Android 9.0 from November 1, 2019. Until these dates, new apps and app updates must target at least Android 8.0 (API level 26).

https://developer.android.com/distribute/best-practices/develop/target-sdk

我有一个目标为 28 的应用程序,但我想要的最低 API 级别是 18。它仍然允许我上传该应用程序,因为它 目标 28。

意思是你要在build.gradle文件里设置

targetSdkVersion 28  //or later

Official doc:

When you upload an APK, it needs to meet Google Play’s target API level requirements. Starting August 1, 2019, Google Play requires that new apps target at least Android 9.0 (API level 28), and that app updates target Android 9.0 from November 1, 2019. Until these dates, new apps and app updates must target at least Android 8.0 (API level 26).

请记住:

minSdkVersion <= targetSdkVersion <= compileSdkVersion

如果您想了解更多关于 minSdk、targetSdk 和 compileSdk 的详细信息,我建议您阅读 this blog