Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以使用Java8进行Android开发吗?_Java_Android_Java 8_Android Gradle Plugin - Fatal编程技术网

可以使用Java8进行Android开发吗?

可以使用Java8进行Android开发吗?,java,android,java-8,android-gradle-plugin,Java,Android,Java 8,Android Gradle Plugin,在网上搜索,不清楚Android开发是否支持Java8 在我下载/设置Java 8之前,有人能告诉我Android开发是否支持Java 8的任何“官方”文档吗。Java 8 Android支持所有Java 7语言功能和Java 8语言功能的子集,这些功能因平台版本而异 检查支持java 8的哪些功能 我们决定将对Java8语言特性的支持直接添加到当前的javac和dx工具集中,并反对使用Jack工具链。有了这个新的方向,依赖于Java类文件格式的现有工具和插件应该继续工作。今后,Android

在网上搜索,不清楚Android开发是否支持Java8

在我下载/设置Java 8之前,有人能告诉我Android开发是否支持Java 8的任何“官方”文档吗。

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

检查支持java 8的哪些功能

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

Eclipse用户: 对于喜欢Eclipse的老开发人员

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

Java->编译器“>

如果您的目标是Android 5.0和Android,则需要Java 7或更高版本 更高


安装多个JDK并重试。

更新2017/11/04-Android Studio 3.0现在对Java 8具有本机支持。
现在不再需要gradle retrolambda
。请参阅

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


Android不支持Java8。它最多只支持Java7(如果您有kitkat),但仍然没有InvokedDynamic,只有新语法sugar


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


从Android SDK版本19开始,您可以使用Java 7功能。目前还不完全支持Java 8。

您确实可以使用
gradle retrolamba
gradle build dependency来使用Java 8进行Android开发

下面是我最近在运行lambda expressions for Android开发时遵循的完整指南。本指南的原始来源在最后提到

在本指南中,介绍了将一些Java8功能引入 Android开发工具将被演示,专门针对 然而,本指南中描述的步骤可能也适用于谷歌的新崛起开发 环境,Android Studio。它基于 JetBrains推出了流行的IntelliJ Idea,最近 谷歌于2014年7月初将其升级至“beta”版,略低于 在本指南编写之前,Eclipse将继续作为 开发环境,至少在一段时间内,并考虑 事实上,大多数Android项目都是使用Eclipse开发的 将新的Java8特性(如lambda表达式)引入到 ADT似乎对开发人员非常有用

Android开发基于一个名为 Apache Harmony项目于2011年终止。最 Android开发中常用的Java语法是Java6(v1.6)和 KitKat版本也部分支持Java7(v1.7) 因此,Java8具有类似lambda表达式的特性 无法直接用于Android应用程序开发,无需 将一些调整应用到开发工具中 构造基本上是一些“语法糖”增强 让开发人员了解“匿名类”之类的缺点 它们可以被翻译成Java6或Java7类

将Java8源代码翻译成低级Java的最新方法 版本名为RetroLambda。此库使开发人员能够运行 Java 7或更低版本上带有lambda表达式的Java 8代码。 不幸的是,除了lambda表达式之外的Java8特性不适用 目前由RetroLambda支持,但lambda表达式的概念 是Java8平台上最大的飞跃,也是 不管怎样,Android开发者

有关此库的详细信息,请参见其GitHub页面:

另外,另一个开发人员为RetroLambda创建了一个Gradle插件 允许在Java或Android中实现基于Gradle的构建 然而,开发人员只提到了集成这个 插件到Android Studio环境中。详细信息可在其 GitHub页面:

在基于Eclipse的开发中使用这些基础架构 无法直接接近环境,但它是可行的,并且将是可行的 在本指南中演示

准备 本指南假设读者对Android开发有基本了解,并且基于ADT版本22.6.2,因为最近的ADT版本23.0.2似乎存在创建布局文件夹等问题。有关此问题的详细信息,请参见以下链接:

本指南中的步骤将针对Windows 8.1 64位开发机器,但它们可以轻松地适应其他平台。新的构建系统
Gradle
将用于构建
    android {
  ...
  defaultConfig {
    ...
    jackOptions {
      enabled true
    }
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}
 android {
   compileOptions {
       sourceCompatibility JavaVersion.VERSION_1_8
       targetCompatibility JavaVersion.VERSION_1_8
   }
android.enableDesugar=false
android {
    ...
    defaultConfig {
        ...
        jackOptions {
            enabled true
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
        // or
        //sourceCompatibility 1.8
        //targetCompatibility 1.8
    }
}
Legacy javac toolchain:
    javac (.java → .class) → dx (.class → .dex)
    New Jack toolchain:
    Jack (.java → .jack → .dex)
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.4'
}
android {
  ...
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}
buildscript {
repositories {
    ...
    jcenter()
}
dependencies {
    ...
    classpath 'me.tatarka:gradle-retrolambda:3.4.0' // DEPENDENCY
    ...
   }
}
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
    ...
}
 android {
   compileOptions {
       sourceCompatibility JavaVersion.VERSION_1_8
       targetCompatibility JavaVersion.VERSION_1_8
   }
 compileOptions {
    targetCompatibility = '1.8'
    sourceCompatibility = '1.8'
 }