2016-01-14 26 views
12

我目前已经安装了Java 7 JDK。一直这样。然而,最近,我的教授正在指导班级卸载Java JDK 7并安装Java JDK 8,以便能够在家庭作业等方面进行工作。现在可以使用Java 8与Android开发吗?

我一直在使用Java JDK 7编写和部署Android应用程序时没有任何问题,所以我想知道是否安全地升级到JDK 8?我假设我的Android开发中不需要任何Java 8特定的方法或函数。所以如果我远离这一点,我的Android开发会受到影响吗?

在附注上,我一直没有找到任何官方文档说明Java JDK 8是否安全或者如何使其安全。无论哪种方式,我将不得不升级到Java 8 ...

+2

Android不支持大部分的Java 8的新功能。 –

+0

因此,如果我不使用任何这些新功能,我仍然可以编译和运行我的代码? – wayway

+1

即使您安装了JDK8,也可以将兼容性设置为1.7(或取决于要求)... – Codebender

回答

3

如果您一直在使用Java 7来部署Android应用程序,那么肯定的是,到目前为止,您还没有使用任何Java 8功能,所以我不明白它的重要性。

按照您的教师的指示,当您为学校做作业时,只需在项目结构中选择JDK或语言级别即可。

CTRL + ALT +小号,选择Project

您可以默认为在Java 8 SDK,但它限制在Java 7中的功能,为您的Android应用。或者您可以简单地将您的作业项目设置为Java 8 SDK。

这里假设Android Studio包含Intellij的核心设置。

2

我想你应该试试看。附注:您可以轻松地运行JDK 7和JDK 8。我不知道Android Studio,但在Eclipse中,您可以配置构建路径。

尽管如此:您是否在使用Java 8特定功能来完成作业?如果您不使用lambdas或JavaFX 8,我认为您不需要 JDK 8.听起来更像您的教授只是想使用最新版本的Java(从您的第一句话来看)。

+0

我的教授尚未提供太多细节比指出他更喜欢我们拥有JAVA 8以避免将来出现“潜在问题”。 – wayway

3

如果您不使用java 8功能,这是安全的。

虽然你可能会热衷java 8与retroLambda和collectionsQuery。 https://github.com/evant/gradle-retrolambdahttps://bitbucket.org/mart_bogdan/collectionsquery/src

这将允许您将程式码写入类似以下内容: -

mButton.setOnClickListener(v-> doClickEvent()); 

mView.postDelayed(() -> someMethodToRun() , 1000); 

Queryable.from(listOfObject).forEachR(r -> doProcess(r)); 

,而不是笨重的

mButton.setOnClickListener(new View.OnClickListener(){ 
    @Override 
     public void onClick(View v) { 
     doClickEvent(); 
     } 
}); 

用java 8 retrolambda刚添加到gradle文件中。

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

android { 

    // : 
    // Snips the rest of configuration. 
    // : 
    compileOptions { 
     encoding "UTF-8" 
     sourceCompatibility JavaVersion.VERSION_1_8 
     targetCompatibility JavaVersion.VERSION_1_8 
    } 
} 

dependencies { 

    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 

    compile 'com.android.support:appcompat-v7:23.1.1' 

    compile 'com.innahema:collections-query:0.2.9' 
} 

并在项目gradle.build文件添加以下内容...

buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:1.5.0' 

     classpath 'me.tatarka:gradle-retrolambda:3.2.3' 
     classpath 'me.tatarka.retrolambda.projectlombok:lombok.ast:0.2.3.a2' //fix lint issue 

     // NOTE: Do not place your application dependencies here; they belong 
     // in the individual module build.gradle files 
    } 
} 
12

在谷歌I/O 2016年,他们宣布,Android现在支持Java 8的一些功能,但并非所有的功能。

特点像

  • 默认和静态接口方法
  • Lambda表达式(在API级别23也可以,下)
  • 重复标注
  • 方法引用(在API级别23也可与更低)
  • 类型注释(也可在API等级23及以下)

此外,以下Java 8语言的API也可提供:可重复的相关

  • 反思与语言相关的API
    • java.lang.FunctionalInterface
    • java.lang.annotation.Repeatable
    • java.lang.reflect.Method.isDefault()
    • 和反思的API注释,如AnnotatedElement.getAnnotationsByType(Class)
  • 实用的API
    • java.util.function
    • java.util.stream

所有你应该做的是利用新杰克的编译器,要做到这一点,你刚才把它添加到您的gradle文件build.gradle (Module: app)

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

参考文献:

相关问题