4

我注意到我的 Android Studio 项目建议的方法和类型在我的最小 SDK 中不可用。我正在使用 Android Studio 1.1.0 版。

我可以看到我的最低 SDK 版本在 build.gradle 文件中设置正确:

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.pythagoras.sunshine"
        minSdkVersion 18
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
  ...
}

但我注意到 Android Studio 中的“自动完成”功能仍然建议 API 18 中不可用的方法。当我构建项目时,我没有收到关于使用这些新方法的任何错误,因为我正在测试的设备on 正在使用目标 API,我在我的应用程序中看不到任何问题。

Android Studio 中是否有可以从 API 中删除大于我的最小值的自动完成选项的设置?或者,如果使用了太新的方法,是否至少有一种方法会导致构建错误?我尝试了“使用 Gradle 文件同步项目”按钮,但在重建时我仍然没有收到错误消息。

谢谢!

4

2 回答 2

4

这是我在 Android Studio 1.3.2 中看到的行为,使用您的配置: compileSdkVersion=21 minSdkVersion=18 targetSdkVersion=21

由于您正在使用 SDK 21 进行编译,因此您将看到 API 级别 21 之前的所有方法。

如果您将 targetSdkVersion 设置为 18,那么您也可以将 compileSdkVersion 降低为 18,从 API 19、20、21 中删除方法。但是,这意味着您将无法在使用的设备上使用更新的方法/类新的 SDK。减少 targetSdkVersion 还会告诉 Android 设备您尚未对其进行测试,并启用兼容性行为,这可能是也可能不是您想要的。

如果您决定要在支持它的设备上使用 API 19/20/21 中的高级功能,并且不在那些较新的设备上激活兼容性行为,则应将 targetSdkVersion 设置为 21。

现在,当您使用 API 级别 19+ 的方法时,Android Studio 应该会给您一个警告。这是因为该方法在 SDK 级别 18 的设备上会因 NoSuchMethodError 而崩溃,因为它不存在。您现在可以检查设备的 SDK 版本,并且只使用基于它的给定方法(比较使用SDK 版本)。

旁注:我在使用 Android Studio 时注意到的一件有趣的事情是,使用 API 级别 23 方法时不会显示 lint 警告。例如:如果我使用 compileSdkVersion=23, targetSdkVersion=23, minSdkVersion=19,当我使用 API 级别 21 方法finishAndRemoveTask或 API 级别 22 方法getReferrer时,Android Studio 会显示错误。但是,它没有显示 API 级别 23 方法getSearchEvent的错误。也许 android lint 没有针对 API 级别 23 更新。

于 2015-08-30T22:19:07.710 回答
1

android studio 根据 compilesdkversion 编译你的代码

android {
    compileSdkVersion 18
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.pythagoras.sunshine"
        minSdkVersion 18
        targetSdkVersion 18
        versionCode 1
        versionName "1.0"
    }
  ...
}
于 2015-06-04T21:25:34.163 回答