Android Studio 显示来自较新 API 的方法

Posted

技术标签:

【中文标题】Android Studio 显示来自较新 API 的方法【英文标题】:Android Studio shows methods from newer 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 【参考方案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 方法自动完成。我还需要进行其他更改吗?

以上是关于Android Studio 显示来自较新 API 的方法的主要内容,如果未能解决你的问题,请参考以下文章

来自 Google Drive Android Studio API 的图像被旋转

如何为较旧和较新的 Android 版本实现不同的 API?

如何在 Android Studio 中显示来自 SQLite 数据库浏览器的图像?

如何在 android studio 的聊天应用程序中显示来自接收者的消息?

将 Android Studio 配置为仅显示特定级别的 API

使用不推荐使用的 API 时,Android Studio 无法编译