Java 8能在Android API 24及以上版本上运行吗?或者你可以在更低的API上使用它吗?

17
在安卓系统中,基于此页面(Java 8 Languages Features),安卓只在API24及以上版本才能使用这些特性,而不能在API低于24的版本中使用。如果可以使用这些特性,则最小支持这些特性的安卓API版本最小值是多少。

截至2016年9月20日,这些功能在API 15及以上版本中得到支持。 - user2577907
直到2016/9/20,Android数据绑定和Lambda不能同时使用。 - user2577907
3个回答

22

更新: 自Android Studio 2.4开始,Jack编译器将被弃用,Java 8支持将被集成到默认构建链中。一些Java 8功能在任何API级别上都可用,但有些仍然限于API >= 24,请参见:

https://developer.android.com/studio/preview/features/java8-support.html

旧答案:

从API级别9开始,Java 8功能 可用,但前提是您使用Android Studio 2.1(预览版)和Android N Preview SDK。

http://android-developers.blogspot.de/2016/03/first-preview-of-android-n-developer.html

改进的Java 8语言支持-我们很高兴地将Java 8语言特性引入Android平台。通过Android的Jack编译器,您现在可以在Gingerbread及更高版本的Android上使用许多流行的Java 8语言特性,包括Lambda等等。新功能有助于减少样板代码。例如,Lambda可以替代匿名内部类来提供事件监听器。一些Java 8语言特性-例如默认方法和静态方法、流以及函数接口-现在也可用于Android N及以上版本。通过Jack,我们期待更紧密地跟踪Java语言,并保持向后兼容性。


如果使用Android Studio 2.1(预览版)和Android N预览SDK,那么由ProfessorMLM链接的功能从API级别9开始可用。 - tknell
没问题,我更新了答案,以明确哪些功能在什么情况下可用 :) - tknell
谢谢tknell,实际上我可以在minSdkVersion为api 15的项目中使用带有lambda的Java 8。 - user2577907
为什么即使启用了Jack编译器,我仍然会收到错误信息:“无法解析方法stream()”? - IgorGanapolsky
1
你在compileOptions中设置了Java版本,并且将compileSdkVersion和targetSdkVersion至少设置为24,就像这里描述的那样吗?https://developer.android.com/guide/platform/j8-jack.html - tknell

6

更新
Jack工具链已经弃用。如果你使用Android插件版本2.4.0-alpha4(或更高版本),Java8特性将会加入标准工具链中。更多信息在这里

原始答案 除了lambda表达式,Java 8特性在API N及其以上版本可用。Lambda表达式通过匿名类被回溯(back-ported)到Gingerbread版本。

Android N基于匿名类来实现lambda表达式。这种方法使它们向后兼容,并能在早期版本的Android上执行。

要测试这个特性,你需要安装Android Studio 2.1预览版、JDK 8以及最新的构建工具。

示例构建配置:

android {
    compileSdkVersion 23
    buildToolsVersion "24.0.0 rc1"

    defaultConfig {
        minSdkVersion 23
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"

        jackOptions {
            enabled true
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

-5

更新
从Android Studio 2.4开始,Jack编译器将被弃用。
Android Studio 3.0及以上版本支持所有Java 7语言特性和一个因平台版本而异的Java 8语言特性子集。

所有官方文档信息请查看: https://developer.android.com/studio/write/java8-support

您也可以直接在相应的build.gradle文件中进行配置:

只需要进行配置:

android {
  ...
  // Configure only for each module that uses Java 8
  // language features (either in its source code or
  // through dependencies).
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
  // For Kotlin projects
  kotlinOptions {
    jvmTarget = "1.8"
  }
}

1
要求Java 8 JDK并不意味着支持Java 8语言功能。引用的文本可能只是表示其中一个构建工具依赖于Java 8功能,例如。 - Jules

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接