是否可以使用Java 8进行Android开发?

时间:2014-04-27 00:40:44

标签: java android java-8 android-gradle

在网上搜索,目前尚不清楚是否支持Java 8进行Android开发。

在我下载/设置Java 8之前,有人可以指出任何"官方" Android开发支持或不支持Java 8的文档。

26 个答案:

答案 0 :(得分:343)

更新2017/11/04 - Android Studio 3.0现在支持Java 8。 gradle-retrolambda现在不再需要了。见https://developer.android.com/studio/write/java8-support.html

如果您使用的是gradle-retrolambda,则上述链接还包含迁移说明。原答案如下:


Android不支持Java 8.它只支持Java 7(如果你有kitkat),但它仍然没有invokedynamic,只有新的语法糖。

如果您想使用lambdas,这是Android中Java 8的主要功能之一,您可以使用gradle-retrolamba。它是一个gradle构建依赖项,它集成了retrolambda,这是一个将Java 8字节码转换回Java 6/7的工具。基本上,如果你在Android Studio中设置编译器来编译Java 8字节码,从而允许lambdas,它会将它转换回Java 6/7字节码,然后转换为dalvik字节码。如果您想在Android中试用一些JDK 8功能代替官方支持,这就是一个黑客攻击。

答案 1 :(得分:175)

java 8

Android支持所有Java 7语言功能和Java 8语言功能的一部分,这些功能因平台版本而异。

检查支持java 8的哪些功能

Use Java 8 language features

  

我们决定直接在当前的javac和dx工具集中添加对Java 8语言功能的支持,并弃用Jack工具链。有了这个新方向,依赖于Java类文件格式的现有工具和插件应该继续工作。展望未来,Android构建系统将本身支持Java 8语言功能。我们的目标是在未来几周内将其作为Android Studio的一部分推出,我们希望尽早与您分享此决定。

Future of Java 8 Language Feature Support on Android

Eclipse用户:

对于喜欢Eclipse的老开发者,google stops support Eclipse Android Developer tools

如果您安装了Java 8 JDK,那么试一试,如果出现任何问题,请尝试通过窗口菜单→首选项 Java 将Eclipse中的编译器设置为1.6 →编译器。 Java 7也将起作用:

Eclipse Preferences -> Java -> Compiler

  

如果您要定位Android 5.0和,则需要Java 7或更高版本   更高。

安装多个JDK并尝试。

答案 2 :(得分:42)

请点击此链接获取最新动态。 Use Java 8 language features

旧答案

Android N preview 发布 Java 8 的Android支持有限功能,请参阅Java 8 Language Features

  

要开始使用这些功能,您需要下载并设置Android Studio 2.1和Android N预览SDK,其中包括   需要Jack工具链和更新的Gradle安卓插件。如果你   尚未安装Android N Preview SDK,请参阅Set Up to Develop for Android N

支持的Java 8语言功能和API

  

Android目前不支持所有Java 8语言功能。   但是,在开发应用程序时,现在可以使用以下功能   定位Android N预览:

Default and static interface methods

Lambda expressions(也可在API级别23及更低版本上使用)

Repeatable annotations

Method References(也可在API级别23及更低版本上使用)

Android支持一些额外的Java 8功能,您可以从Java 8 Language Features

查看完整的详细信息

<强>更新

  

注意:Android N基于lambda表达式的实现   匿名课程。这种方法允许他们倒退   在早期版本的Android上兼容和可执行。去测试   早期版本的lambda表达式,记得去你的   build.gradle文件,并将compileSdkVersion和targetSdkVersion设置为   23岁或以下。

更新2

现在Android studio 3.0稳定版本支持Java 8 libraries and Java 8 language features(没有Jack编译器)。

答案 3 :(得分:20)

是的,Android支持Java 8 Now(24.1.17)

现在有可能

但是你需要在java 1.8上运行你的设备rom并启用&#34; jackOptions&#34;运行它。 Jack是运行Java 8的新Android编译器的名称

https://developer.android.com/guide/platform/j8-jack.html

将这些行添加到build_gradle

    android {
  ...
  defaultConfig {
    ...
    jackOptions {
      enabled true
    }
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

Java 8似乎是Android studio 2.0的运行java引擎, 但是在我检查之后它仍然不接受java 8的语法,你现在无法从android studio中选择编译器。但是,如果您需要Android客户端中的函数编程机制,则可以使用scala插件。

enter image description here

答案 4 :(得分:19)

Android使用从Java 6分支出来的Java。

从Android SDK版本19开始,您可以使用Java 7功能by doing this。尚未完全支持Java 8(

答案 5 :(得分:14)

Android OFFICIALLY从Android N开始支持Java 8.

Feature announcements are here,Java 8语言公告是:

  

改进的Java 8语言支持 - 我们很高兴能将Java 8语言功能引入Android。使用Android的Jack编译器,你可以   现在使用许多流行的Java 8语言功能,包括lambda和   更多,早在Android版本上就像Gingerbread一样。新功能   帮助减少样板代码。例如,lambdas可以替代   提供事件侦听器时的匿名内部类。一些Java 8   语言功能 - 类似于默认和静态方法,流和   功能接口 - 现在也可在N及以上版本上使用。同   杰克,我们期待更密切地跟踪Java语言   同时保持向后兼容性。

答案 6 :(得分:13)

Native Java 8到达android!终于来了!

  

从每个模块中删除Retrolambda插件和retrolambda块   build.gradle文件:

     

要禁用Jack并切换到默认工具链,只需删除   jackOptions阻止来自模块的build.gradle文件

要开始使用受支持的Java 8语言功能,请将Android插件更新为3.0.0(或更高版本)

从Android Studio 3.0开始,Android 8现在支持Java 8语言功能:

  • Lambda表达式
  • 方法参考
  • 类型注释(当前类型注释信息在运行时不可用,但仅在编译时可用);
  • 重复注释
  • 默认和静态接口方法(在API级别24或更高级别,没有即时运行支持);

同样从最低API级别24开始,可以使用以下Java 8 API:

  • java.util.stream
  • java.util.function
  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • java.lang.reflect.AnnotatedElement.getAnnotationsByType(类)
  • java.lang.reflect.Method.isDefault()

将这些行添加到应用程序模块的build.gradle中,以通知项目语言级别:

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

通过将以下内容添加到 gradle.properties 文件中来禁用对Java 8语言功能的支持:

android.enableDesugar=false

你已经完成了!您现在可以使用本机java8!

答案 7 :(得分:12)

我们可以使用Java 8来使用:

  1. 在build.gradle(Project:myProject)中添加以下内容

    classpath 'me.tatarka:gradle-retrolambda:x.x.x' //x.x.x is recent version
    
  2. 在build.gradle(Module:myModule)中添加以下内容

    apply plugin: 'me.tatarka.retrolambda'
    
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    

答案 8 :(得分:7)

Android Studio 3.0开始为某些Java 8语言功能提供内置支持,这些功能包括:

  • Lambda表达式
  • 方法参考
  • 类型注释(信息在编译时可用,但不在运行时可用)
  • 重复注释
  • 默认和静态接口方法

同样从API级别24开始,可以使用以下Java 8 API:

  • java.util.stream
  • java.util.function
  • java.lang.FunctionalInterface
  • java.lang.annotation.Repeatable
  • java.lang.reflect.AnnotatedElement.getAnnotationsByType(Class)
  • java.lang.reflect.Method.isDefault()

除此之外,try-with-resources支持已扩展到所有Android API级别。

未来将承诺增加更多Java 8功能。

  

要开始使用受支持的Java 8语言功能,请更新Android   插件到3.0.0-alpha1(或更高版本)并将以下内容添加到您的   module的build.gradle文件:

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

详情请访问:
https://developer.android.com/studio/write/java8-support.html

答案 9 :(得分:5)

当我在大约两年前提出这个问题时,答案确实是“正式”否定,但正如ekcr1的答案所指出的,如果你使用retrolamba,你可以得到一个最受期待的功能(lambdas)。当时我还在使用eclipse,因为Android Studio处于“预览”模式,所以我从未尝试过这条路。

今天,我认为“官方”答案仍然没有,虽然retrolamba似乎仍然是一个很好的方式,但对于那些愿意采取某种“非正式”路线的人来说,还有另一种选择,即Kotlin。

今天Kotlin达到了1.0.0。对于那些不熟悉Kotlin的人,可以在他们的网站上找到更多信息:

https://kotlinlang.org

或观看杰克沃顿提供的关于此演讲的视频:

https://www.youtube.com/watch?v=A2LukgT2mKc

答案 10 :(得分:4)

最新消息:

谷歌宣布,通过Android N和Android Studio 2.1+,平台将支持Java 8.同时发布了稳定版的Studio 2.1。

最后我们可以使用lambda表达式。 for循环中没有更多列表过滤器。 Horeeey。

答案 11 :(得分:4)

简便方法

您可以为Android项目启用Java 1.8支持。

  • 打开项目结构

    • 通过按 Ctrl + Shift + Alt + S

    • File > Project Structure

  • 如图所示,将源兼容性目标兼容性更新为 1.8 (单击“文件”>“项目结构”)。

image

注意:可以为 Android Studio 3.0.0 或更高版本启用Java 1.8支持。请参阅Documentation了解更多信息。

答案 12 :(得分:4)

添加此配置build.gradle和sync gradle:

android {
    ...
    defaultConfig {
        ...
        jackOptions {
            enabled true
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
        // or
        //sourceCompatibility 1.8
        //targetCompatibility 1.8
    }
}

答案 13 :(得分:2)

Google刚宣布Java 8将由Android本机支持,并且Jack工具链将弃用:

  

我们决定直接在当前的javac和dx工具集中添加对Java 8语言功能的支持,并弃用Jack工具链。有了这个新方向,依赖于Java类文件格式的现有工具和插件应该继续工作。展望未来,Android构建系统将本身支持Java 8语言功能。我们的目标是在未来几周内将其作为Android Studio的一部分推出,我们希望尽早与您分享此决定。

更多信息: https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html

答案 14 :(得分:2)

是。我们很快就会使用Java 8!

  

我们决定直接在当前的javac和dx工具集中添加对Java 8语言功能的支持,并弃用Jack工具链。有了这个新方向,依赖于Java类文件格式的现有工具和插件应该继续工作。展望未来,Android构建系统将本身支持Java 8语言功能。我们的目标是在未来几周内将其作为Android Studio的一部分推出,我们希望尽早与您分享此决定。

https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html

答案 15 :(得分:1)

我想我会为那些正在寻找更新的东西的人发布一个更新的答案。

目前,Android和Android Studio正在支持Java 8功能的一个子集。根据位于on their website的Android文档,Google表示:

  

支持Java 8语言功能需要一个名为Jack的新编译器。 Jack仅在Android Studio 2.1及更高版本上受支持。因此,如果您想使用Java 8语言功能,则需要使用Android Studio 2.1来构建您的应用程序。

     

如果您已安装Android Studio,请务必点击帮助&gt;更新到最新版本。检查更新(在Mac,Android Studio&gt;检查更新)。如果您尚未在工作站上安装IDE,请在此处下载Android Studio。

     

支持的Java 8语言功能和API

     

Android不支持所有Java 8语言功能。但是,在开发面向Android 7.0(API级别24)的应用时,可以使用以下功能:

     
      
  • 默认和静态接口方法Lambda表达式(也可在API级别23及更低版本上使用)
  •   
  • 可重复注释
  •   
  • 方法参考(也可在API级别23及更低版本上获得)
  •   
  • 类型注释(也可在API级别23及更低版本上使用)
  •   

此外,还提供以下Java 8语言API:

  

反思和与语言相关的API:

     
      
  • java.lang.FunctionalInterface
  •   
  • java.lang.annotation.Repeatable
  •   
  • java.lang.reflect.Method.isDefault()和与可重复注释相关联的Reflection API,例如   AnnotatedElement.getAnnotationsByType(类)
  •   
     

实用程序API:

     
      
  • java.util.function
  •   
  • java.util.stream
  •   
     

要使用新的Java 8语言功能,您还需要使用Jack toolchain。这个新的Android工具链将Java语言源编译成Android可读的DEX字节码,具有自己的.jack库格式,并提供大多数工具链功能作为单个工具的一部分:重新打包,缩小,混淆和多索引。

     

以下是用于构建Android DEX文件的两个工具链的比较:

Legacy javac toolchain:
    javac (.java → .class) → dx (.class → .dex)
    New Jack toolchain:
    Jack (.java → .jack → .dex)

答案 16 :(得分:1)

3年前我问过这个问题,显然这些年来答案已经发生了变化。正如上面的许多人已经回答的那样,在某个时候,答案变成了。我从未更新过接受的答案,因为当时答案是正确的。 (我不确定堆栈溢出策略是什么)

我只想为那些仍在搜索此主题的人添加另一个答案。截至2017年5月17日,Google还宣布Kotlin也是Android开发的官方语言。

我还没有找到正式的新闻稿,但我确实看到了宣布它的一些Google I / O videos。以下是Kotlin团队在公告中发布博客post的链接。

答案 17 :(得分:1)

添加以下内容为我解决了问题(Android studio 2.3.2):

build.gradle(项目)

buildscript {
repositories {
    ...
    jcenter()
}
dependencies {
    ...
    classpath 'me.tatarka:gradle-retrolambda:3.4.0' // DEPENDENCY
    ...
   }
}

build.gradle(模块:应用)

apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda' //PLUGIN

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    } // SET JAVA VERSION
    ...
}

答案 18 :(得分:1)

Android Studio现在支持Java 8的一个子集。只需从下面的窗口调整源和目标兼容性:

档案 - &gt;项目结构

CodePen Link - V2

以下链接提供了更多信息。

Adjustment Window

答案 19 :(得分:1)

我在Stack Overflow上向similar answer写了similar question,但这是答案的一部分。

Android Studio 2.1:

新版Android Studio(2.1)支持Java 8功能。以下是Android Developers blogspot post的摘录:

  

... Android Studio 2.1版本包括对新Jack compiler的支持以及对Java 8的支持。

     

...

     

要在使用N Developer Preview进行开发时使用Java 8语言功能,您需要使用Jack编译器。新建项目向导[文件→新建→项目]为面向N的项目生成正确的配置。

在Android Studio 2.1之前:

Android还不支持Java 1.8(它最多只支持1.7),所以你不能使用像lambdas这样的Java 8功能。

This answer gives more detail on Android Studio's compatibility;它说:

  

如果你想使用lambdas,这是Android 8中Java 8的主要功能之一,你可以使用gradle-retrolamba

如果您想了解有关使用gradle-retrolambdathis answer gives a lot of detail on doing that

的详情

答案 20 :(得分:1)

将此行添加到lvl build gradel模块中

compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }

答案 21 :(得分:1)

添加Java 8支持的最简单方法

 compileOptions {
    targetCompatibility = '1.8'
    sourceCompatibility = '1.8'
 }

只需将其添加到您的build.gradle文件中即可。

答案 22 :(得分:0)

上述所有解决方案似乎都无法在 2019 中使用最新的 Android Studio 3.4 +

我想出了一个完美的,最新的解决方案,可以将您的Android项目迁移或升级到 Java 8

解决方案: 单击文件-> 项目结构-> 模块-> 属性标签。

源兼容性目标兼容性更改为 1.8(Java 8)

enter image description here

答案 23 :(得分:0)

更新2019/10/28

Android Studio 4.0解决了此issue

D8编译器在编译时将Java 8本机API的反向移植修补到您的APK中,并且您的应用将在运行时使用该代码,而不是本机API。该过程称为desugaring

答案 24 :(得分:0)

是的,您可以在Android Studio中使用Java 8语言功能,但是版本必须为3.0或更高版本。阅读本文,了解如何在android studio中使用Java 8功能。

https://bijay-budhathoki.blogspot.com/2020/01/use-java-8-language-features-in-android-studio.html

答案 25 :(得分:0)

Android Gradle 插件 3.0.0 及更高版本支持所有 Java 7 语言功能和 Java 8 语言功能的一个子集,这些功能因平台版本而异。使用 Android Gradle 插件 4.0.0 及更高版本构建您的应用时,您可以使用多种 Java 8 语言 API,而无需为您的应用设置最低 API 级别。

此页面描述了您可以使用的 Java 8 语言功能、如何正确配置您的项目以使用它们,以及您可能遇到的任何已知问题。

本文将对您有所帮助。我会把链接放在下面 https://developer.android.com/studio/write/java8-support