3

我们正在放弃对 Android 2.3(API 级别 9)设备的支持,因为我们的大多数用户在他们的手机上都安装了更新的 Android 版本。我已将最低 SDK 版本更新为 api 级别 14。

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 23
    }
}

但是,我仍然可以手动(而不是通过商店)在 Android 2.3 设备上安装该应用程序。这是预期的行为还是我做错了什么?我在其他地方找不到答案。

另一个奇怪的问题是 Lint 没有检测到正确的 api 级别。

listView.setFastScrollAlwaysVisible(true);

这会导致警告:调用需要 api 级别 11(当前最小值为 9)。但是我目前的最小值现在是 14。所以这向我表明我做错了什么。我尝试清理和重建项目,重新启动 Android Studio。这一切都没有奏效。

谁能帮我吗?

编辑

根据 Sufians 的评论,我开始摆弄我的 gradle 文件,并找到了以下解决方案。然而,一些问题仍然存在。我的项目结构如下所示:

  • android.gradle(包含 SDK 版本的顶级构建文件)
  • 主模块(包含其他模块的基本代码)
    • build.gradle(应用自:'../android.gradle')
  • 子模块 A(模块特定更改)
    • build.gradle(依赖于主模块)
  • 子模块 B(模块特定更改)
    • build.gradle(依赖于主模块)

android.gradle我有一个包含 SDK 版本的顶级构建文件。然后我的模块包含构建文件apply from: '../android.gradle'。如果我将 minSdkVersion 直接放在 de 主模块中,警告就会消失。应该是这样吗?还是我需要为每个子模块设置一个 minSdkVersion?还是有其他方法可以使 SDK 版本保留在android.gradle文件中?

4

4 回答 4

2

好的...我终于意识到我的项目结构没有任何问题。我唯一需要做的就是按下“使用 Gradle 文件同步项目”的小按钮。之后,所有错误都消失了。

我还得出结论,可以手动安装不受支持的应用程序。但是,Google Play 商店应阻止用户安装或更新应用程序。

于 2016-02-25T14:09:12.510 回答
1

我个人从未为 android 开发过任何东西,但是在安装应用程序时,设备在安装操作系统版本不支持的 .apk 时从未抱怨过。
即使商店说它不受支持,我也总是能够将它安装为 .apk,所以我认为它不能真正被阻止。

于 2016-02-25T11:31:43.597 回答
0

如果我将 minSdkVersion 直接放在 de 主模块中,警告就会消失。应该是这样吗?

您的主模块的最小和目标 SDK(即在build.gradle模块内部)将是您的应用程序的 SDK。

项目build.gradle不应包含任何此类信息。

还是我需要为每个子模块设置一个 minSdkVersion?还是有其他方法可以使 SDK 版本保留在 android.gradle 文件中?

每个模块都定义了自己的最小 SDK。如果您使用的是第三方模块/库,最好不要更改它,除非您知道自己在做什么。

于 2016-02-25T14:11:11.793 回答
0

是的,只要清单中指定的最低 API 级别低于设备的 API 级别,您就可以在设备上手动安装应用程序。

当您将应用上传到商店时,商店不会向使用 Android 版本低于指定最低 API 级别(在您的情况下为 API 级别 9)的设备的用户展示您的应用。

至于 Lint 警告,请确保清单文件中的最小/最大 SDK 版本与 build.gradle 文件中指定的版本相匹配。

您还可以通过检查代码中的操作系统版本来确保新 API 不会在旧 API 级别上执行。 http://developer.android.com/reference/android/os/Build.VERSION.html

于 2016-02-25T13:12:59.867 回答