如何修复 Android 中的“调用需要 API 级别 26(当前最低为 25)”错误

Posted

技术标签:

【中文标题】如何修复 Android 中的“调用需要 API 级别 26(当前最低为 25)”错误【英文标题】:How to fix "Call requires API level 26 (current min is 25) " error in Android 【发布时间】:2019-11-03 20:46:33 【问题描述】:

我知道这个问题可能是重复的,但我没有为我的问题找到任何答案,我在需要 API 26 且我设备的 API 为 25 的 android 应用中使用 LocalDateTime

我能做什么?非常感谢您的帮助。

【问题讨论】:

很明显,您不能在旧设备上使用新功能。你要么自己实现这个功能,要么找一个提供类似功能的库 【参考方案1】:

您需要使用 https://github.com/JakeWharton/ThreeTenABP 才能将 LocalDateTime 与 Android API

将依赖项添加到您的项目中(请按照项目自述文件):

implementation 'com.jakewharton.threetenabp:threetenabp:1.2.1'

然后更改您的 LocalDateTime 导入来源:

import java.time.LocalDateTime;

到:

import org.threeten.bp.LocalDateTime;

更新:

上面提到的库不再是JakeWharton/ThreeTenABPREADME中提到的最好的方法:

注意:此库的开发正在结束。请考虑在未来几个月内切换到 Android Gradle 插件 4.0、java.time.* 及其核心库脱糖功能。

要在旧 API 级别中使用 LocalDateTime,请使用 Gradle 插件 4.0 中的脱糖功能: https://developer.android.com/studio/write/java8-support#library-desugaring

【讨论】:

非常感谢!你救了我。 对你有帮助! 现在在 ThreeTenABP repo 中推荐你使用代码去糖(developer.android.com/studio/write/…)【参考方案2】:

在较低版本的 Android 上使用 LocalDateTime 的最佳方法是脱糖(您必须具有 Android Gradle 插件版本 4.0 或更高版本)。只需将以下行添加到您的 app 模块 gradle 文件中:

最后加上ff。依赖于你的依赖块:

coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.10'

【讨论】:

这是谷歌推荐的方式。参考:developer.android.com/studio/write/…【参考方案3】:

您可以使用ThreeTenBP。但安卓系统推荐使用Jake Wharton的ThreeTenABP。

为什么不使用 ThreeTenBP?

与在 Android 上使用 Joda-Time 的问题类似,threetenbp 使用 JAR 资源来加载时区信息。这在 Android 上是一种效率极低的机制。

此库将时区信息作为标准 Android 资源放置,并提供自定义加载器以高效解析它。

为什么不使用 Joda-Time?

Joda-Time 有一个非常大的 API,它带来了非常大的二进制大小和大量的方法数。 JSR-310 和 Joda-Time 的创建者也表示,虽然 Joda-Time 没有被破坏,但它确实存在设计缺陷。

如果您已经在使用 Joda-Time,除非它的大小或方法计数与您相关,否则几乎没有理由切换。然而,对于新项目,这个库提供 Java 8 中的标准 API 作为一个更小的包,不仅在二进制大小和方法数上,而且在 API 大小上。

这些解释来自 Jake Wharton 的 ThreeTenABP。

【讨论】:

我只是按照你给我的链接,但错误总是存在:(【参考方案4】:

要在较低版本的 Android 上使用 LocalDateTime 是通过去糖(您必须有 Android Gradle 插件版本 4.0 或更高版本)启用 java8 并在您的 app.gradle 中使用以下代码

android 
    defaultConfig 
        // Required when setting minSdkVersion to 20 or lower
        multiDexEnabled = true
    

    compileOptions 
        // Flag to enable support for the new language APIs
        coreLibraryDesugaringEnabled = true // <- this flag is required

        // Sets Java compatibility to Java 8
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    

    // For Kotlin projects
    kotlinOptions 
        jvmTarget = "1.8"
    


dependencies 
    coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.5") // <- this dependency is required

Supporting docs

【讨论】:

以上是关于如何修复 Android 中的“调用需要 API 级别 26(当前最低为 25)”错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android Studio中为消息“调用需要API级别21(当前最小值为16)”启用lint错误?

调用需要 API 级别 21(当前最低为 17):android.hardware.camera2.CameraDevice.StateCallback

如何修复 Genexus 中的 Android 编译错误?

如何修复从 android 中的 FusedLocationProviderClient 获取空位置值

如何修复解析 XML:android 中的未绑定前缀

如何修复 Android.harware.Camera 中的 setParameters 失败?