如何修复 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