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

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

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

【问题讨论】:

  • 很明显,您不能在旧设备上使用新功能。你要么自己实现这个功能,要么找一个提供类似功能的库

标签: java android localdate localtime


【解决方案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

【讨论】:

【解决方案2】:

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

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

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

【讨论】:

【解决方案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

【讨论】:

    猜你喜欢
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    相关资源
    最近更新 更多