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

anauzrmj  于 2022-12-02  发布在  Java
关注(0)|答案(6)|浏览(639)

我知道这个问题可能是重复的,但我没有找到任何答案,我在我的Android应用程序中使用的LocalDateTime需要API 26,而我的设备的API是25。
我能做什么?你的帮助将非常感激。

fykwrbwg

fykwrbwg1#

您需要使用https://github.com/JakeWharton/ThreeTenABP才能在Android API〈26中使用LocalDateTime。
将依赖项添加到项目中(请遵循项目自述文件):

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

然后将您的LocalDateTime导入从:

import java.time.LocalDateTime;

至:

import org.threeten.bp.LocalDateTime;

更新:

上面提到的库不再是JakeWharton/ThreeTenABP自述文件中提到的最佳方式:
注意:此库的开发工作正在逐步结束。请考虑在未来几个月内改用Android Gradle插件4.0 java.time.* 及其核心库去糖功能。
要在较早的API级别中使用LocalDateTime,请使用Gradle插件4.0中的去糖化功能:https://developer.android.com/studio/write/java8-support#library-desugaring

jdzmm42g

jdzmm42g2#

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

最后,将ff. dependency添加到dependencies块中:
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.10'

y1aodyip

y1aodyip3#

要在较低版本的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
}

支持文档

jtjikinw

jtjikinw4#

您可以使用ThreeTenBP,但对于android,建议使用Jake Wharton的ThreeTenABP

为什么不使用ThreeTenBP?

类似于在Android上使用Joda-Time的问题,threetenbp使用JAR资源来加载时区信息,这在Android上是一种效率极低的机制。
该库将时区信息作为标准Android资产放置,并提供自定义加载器来高效解析时区信息。

为什么不使用Joda时间?

Joda-Time有一个非常大的API,这带来了非常大的二进制大小和大量的方法计数。JSR-310和Joda-Time的创建者也说,虽然Joda-Time没有坏,但它确实有设计缺陷。
如果您已经在使用Joda-Time,除非它的大小或方法数量与您相关,否则没有什么理由进行切换。但是,对于新项目,这个库将Java 8中的标准API作为一个小得多的包提供,不仅在二进制大小和方法数量上,而且在API大小上。
这些解释来自杰克·沃顿(Jake Wharton)的《三个原则》(ThreeTenABP)。

wgxvkvu9

wgxvkvu95#

如果您有上面提到的coreLibraryDesugaringEnabled = true,但仍然看到问题没有解决,请检查您是否有最新的coreLibraryDesugaring版本,因为在我的情况下,它是1.1.1,升级到1.1.5修复了这个问题。

rn0zuynd

rn0zuynd6#

请不要忘记单击“将项目与Gradle文件同步”以使配置生效。
这将解决仍然存在的警告消息。

相关问题