我现在可以在 Android 开发中“使用”Java 8 吗?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/34780565/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Can I "use" Java 8 with Android Development now?
提问by wayway
I currently have Java 7 JDK installed. It's been like that for awhile. However, recently, my professor is instructing the class to uninstall Java JDK 7 and install Java JDK 8 instead to be able to work on homework and such.
我目前安装了 Java 7 JDK。已经有一段时间了。但是,最近,我的教授指示全班卸载 Java JDK 7 并安装 Java JDK 8,以便能够完成家庭作业等。
I've been using Java JDK 7 to write and deploy Android apps without any problems so I'm wondering if it's safe to make the upgrade now the JDK 8? I'm assuming that I won't be needing any Java 8 specific methods or functions in my Android development. So if I stay away from that, will my Android development be at all affected?
我一直在使用 Java JDK 7 编写和部署 Android 应用程序,没有任何问题,所以我想知道现在升级 JDK 8 是否安全?我假设在我的 Android 开发中不需要任何 Java 8 特定的方法或函数。那么如果我远离它,我的Android开发会受到影响吗?
On a side note, I haven't been able to find any official documentation that states whether or not Java JDK 8 is safe or not or how to make it safe. Either way, I'm going to have to upgrade to Java 8 soon...
附带说明一下,我找不到任何说明 Java JDK 8 是否安全或如何使其安全的官方文档。无论哪种方式,我都将不得不很快升级到 Java 8...
采纳答案by ChiefTwoPencils
If you've been using Java 7 to deploy Android apps then it's certain, up to this point, you haven't used any Java 8 features so I don't see how it would matter.
如果您一直在使用 Java 7 来部署 Android 应用程序,那么可以肯定,到目前为止,您还没有使用任何 Java 8 功能,所以我看不出这有什么关系。
Follow your instructor's directions and when you do an assignment for school simply select either the JDK or Language Level in the Project Structure.
按照老师的指示,当你为学校做作业时,只需在项目结构中选择 JDK 或语言级别。
CTRL+ ALT+ S, select Project
CTRL+ ALT+ S,选择Project
You can default to the Java 8 SDK but limit it to Java 7's features for your Android apps. Or you can simply set your homework projects to the Java 8 SDK.
您可以默认使用 Java 8 SDK,但将其限制为 Java 7 的 Android 应用程序功能。或者,您可以简单地将作业项目设置为 Java 8 SDK。
Going out on a limb here assuming Android Studio includes the core settings of Intellij.
假设 Android Studio 包含 Intellij 的核心设置,这里就有点冒险了。
回答by Zeyad Assem
In Google I/O 2016, they announced that Android now supports some features of Java 8, but not all the features.
在 Google I/O 2016 上,他们宣布 Android 现在支持 Java 8 的一些功能,但不是所有功能。
Features like
功能如
- Default and static interface methods
- Lambda expressions (also available on API level 23 and lower)
- Repeatable annotations
- Method References (also available on API level 23 and lower)
- Type Annotations (also available on API level 23 and lower)
- 默认和静态接口方法
- Lambda 表达式(也可用于 API 级别 23 及更低级别)
- 可重复的注释
- 方法参考(也可用于 API 级别 23 及更低级别)
- 类型注释(也可用于 API 级别 23 及更低级别)
Additionally, the following Java 8 language APIs are also available:
此外,还提供以下 Java 8 语言 API:
- Reflection and language-related APIs
java.lang.FunctionalInterfacejava.lang.annotation.Repeatablejava.lang.reflect.Method.isDefault()- and Reflection APIs associated with repeatable annotations, such as
AnnotatedElement.getAnnotationsByType(Class)
- Utility APIs
java.util.functionjava.util.stream
- 反射和语言相关的 API
java.lang.FunctionalInterfacejava.lang.annotation.Repeatablejava.lang.reflect.Method.isDefault()- 和与可重复注释关联的反射 API,例如
AnnotatedElement.getAnnotationsByType(Class)
- 实用程序 API
java.util.functionjava.util.stream
All what you should do is to use the new Hyman compiler, to do this you have just to add this to your gradle file build.gradle (Module: app):
您应该做的就是使用新的 Hyman 编译器,为此您只需将其添加到您的 gradle 文件中build.gradle (Module: app):
android {
...
defaultConfig {
...
HymanOptions {
enabled true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
References:
参考:
回答by Angel Koh
It's safe if you don't use the java 8 features.
如果您不使用 java 8 功能,那是安全的。
although you may be keen on java 8 with retroLambda and collectionsQuery. https://github.com/evant/gradle-retrolambdaand https://bitbucket.org/mart_bogdan/collectionsquery/src
尽管您可能对带有 retroLambda 和 collectionsQuery 的 Java 8 感兴趣。 https://github.com/evant/gradle-retrolambda和 https://bitbucket.org/mart_bogdan/collectionsquery/src
This will allow you to write your code to something like the following: -
这将允许您将代码编写为如下所示:-
mButton.setOnClickListener( v-> doClickEvent());
mView.postDelayed( () -> someMethodToRun() , 1000);
Queryable.from(listOfObject).forEachR(r -> doProcess(r));
as opposed to the clunky
相对于笨重
mButton.setOnClickListener( new View.OnClickListener(){
@Override
public void onClick(View v) {
doClickEvent();
}
});
to use java 8 with retrolambda just add in the gradle file.
要将 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'
}
and at the project gradle.build file add the following...
并在项目 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
}
}
回答by Robert McHardy
I guess you should just give it a try. On a side note: You can easily run JDK 7 and JDK 8 side by side. I don't know about Android Studio, but in Eclipse you can configure the build path.
我想你应该试一试。附带说明:您可以轻松地同时运行 JDK 7 和 JDK 8。我不了解 Android Studio,但在 Eclipse 中您可以配置构建路径。
Despite that: Are you using Java 8 specific features for your homework? If you don't use lambdas or JavaFX 8, I don't think you will needJDK 8. Sounds more like your professor just wants to use the latest version of Java (judging from your first sentence).
尽管如此:您是否在作业中使用 Java 8 特定功能?如果您不使用 lambdas 或 JavaFX 8,我认为您不需要JDK 8。听起来更像是您的教授只想使用最新版本的 Java(从您的第一句话判断)。

