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
}
6条答案
按热度按时间fykwrbwg1#
您需要使用https://github.com/JakeWharton/ThreeTenABP才能在Android API〈26中使用LocalDateTime。
将依赖项添加到项目中(请遵循项目自述文件):
然后将您的
LocalDateTime
导入从:至:
更新:
上面提到的库不再是JakeWharton/ThreeTenABP自述文件中提到的最佳方式:
注意:此库的开发工作正在逐步结束。请考虑在未来几个月内改用Android Gradle插件4.0 java.time.* 及其核心库去糖功能。
要在较早的API级别中使用
LocalDateTime
,请使用Gradle插件4.0中的去糖化功能:https://developer.android.com/studio/write/java8-support#library-desugaringjdzmm42g2#
在较低版本的Android上使用
LocalDateTime
的最佳方式是反糖化(您必须拥有Android Gradle插件版本4.0或更高版本)。只需将以下行添加到您的app
模块gradle文件中:最后,将ff. dependency添加到dependencies块中:
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.10'
y1aodyip3#
要在较低版本的Android上使用
LocalDateTime
,需要进行反糖化(您必须拥有Android Gradle插件版本4.0或更高版本),启用java8并在您的app.gradle
中使用以下代码支持文档
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)。
wgxvkvu95#
如果您有上面提到的
coreLibraryDesugaringEnabled = true
,但仍然看到问题没有解决,请检查您是否有最新的coreLibraryDesugaring版本,因为在我的情况下,它是1.1.1
,升级到1.1.5
修复了这个问题。rn0zuynd6#
请不要忘记单击“将项目与Gradle文件同步”以使配置生效。
这将解决仍然存在的警告消息。