【问题标题】:Android Studio shows methods from newer APIAndroid Studio 显示来自较新 API 的方法
【发布时间】:2015-08-19 16:33:00
【问题描述】:

我注意到我的 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 中不可用的方法。当我构建项目时,我没有收到关于使用这些新方法的任何错误,并且由于设备我正在测试使用目标 API,我的应用程序没有发现任何问题。

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

谢谢!

【问题讨论】:

  • 那是因为你的 compilesdkversion 是 21

标签: android android-studio target-sdk android-min-sdk


【解决方案1】:

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

您将看到 API 级别 21 之前的所有方法,因为您正在使用 SDK 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 而崩溃,因为它不存在。您现在可以检查device's SDK Version 并仅使用基于它的给定方法(比较使用SDK Version)。

旁注: 我在使用 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 进行更新。

【讨论】:

    【解决方案2】:

    android studio 根据 compilesdkversion 编译您的代码

    android {
        compileSdkVersion 18
        buildToolsVersion "21.1.2"
    
        defaultConfig {
            applicationId "com.pythagoras.sunshine"
            minSdkVersion 18
            targetSdkVersion 18
            versionCode 1
            versionName "1.0"
        }
      ...
    }
    

    【讨论】:

    • 谢谢---所以只是为了确保我理解,即使我正在测试的设备运行的是 android 5.0.2 (API 21) 我仍然应该为 API 18 编译?
    • 如果 Android Studio 不使用该信息,那么指定最低 SDK 版本的意义何在?这仅适用于应用在应用商店分发的情况吗?
    • 如果要在 api 21 上运行应用程序,请将编译版本保持为 21
    • 编译代码时不使用该信息,用于在设备中安装应用程序。该应用程序无法在 api 级别低于 minimumsdkversion 的设备上运行
    • 我已经进行了这个更改并按下了“使用 Gradle 文件同步项目”,重新启动了 Android Studio,按下了绿色箭头,但对于我知道不支持的方法,它仍然没有显示错误在 API 18 中。此外,它仍然使用不受支持的 API 方法自动完成。我还需要进行其他更改吗?
    猜你喜欢
    • 2023-01-23
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 2015-02-24
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多