Android N Java8 java.time

Igo*_*sky 18 android java-8 java-time android-7.0-nougat

我更新到最新的Android N sdk.我唯一不理解的是为什么我无法导入java.time我的代码?我认为Java8可以通过Android N获得.那么为什么谷歌没有添加java.time包?

Mah*_*ade 19

Android N不支持Java 8的所有功能.仅支持以下功能:

  • 默认和静态接口方法
  • Lambda表达式
  • 可重复的注释

反思和语言相关的API:

  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • java.lang.reflect.Method.isDefault()

和可重复注释相关的Reflection API,例如 AnnotatedElement.getAnnotationsByType(Class)

实用程序API:

  • java.util.function

有关更多信息,请查看以下链接:http://developer.android.com/preview/j8-jack.html

  • 谢谢大纲.我想Java 8 Time api的唯一选择是https://github.com/JakeWharton/ThreeTenABP (5认同)

kot*_*ucz 16

java.time适用于Android 的API的后端库可以使用

https://github.com/JakeWharton/ThreeTenABP

  • 该库不再维护、已弃用,并且该存储库现已存档。您现在应该[使用 Gradle 4.00 + 脱糖](https://developer.android.com/studio/preview/features#j8-desugar) (3认同)

Ido*_*lon 8

java.time package仅在API 26(Android O)中添加:

https://developer.android.com/reference/java/time/package-summary.html


Gak*_*ket 6

从Android Gradle Plugin 4.0.0开始,我们终于可以java.time无忧无虑地使用正确的包类了(几乎): https ://developer.android.com/studio/write/java8-support

Optional, java.time, streams,还有更多内容已通过 Android Gradle 插件脱糖到 Java 7 中。

要添加这些类支持,您只需在构建文件中添加几行:

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

  compileOptions {
    // Flag to enable support for the new language APIs
    coreLibraryDesugaringEnabled true
    // Sets Java compatibility to Java 8
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

dependencies {
  coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.9'
}
Run Code Online (Sandbox Code Playgroud)

这是完整列表:https://developer.android.com/studio/write/java8-support-table