Can I "use" Java 8 With Android Development Now?
Solution 1:
In Google I/O 2016, they announced that Android now supports some features of Java 8, but not all the features.
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)
Additionally, the following Java 8 language APIs are also available:
- Reflection and language-related APIs
java.lang.FunctionalInterface
java.lang.annotation.Repeatable
java.lang.reflect.Method.isDefault()
- and Reflection APIs associated with repeatable annotations, such as
AnnotatedElement.getAnnotationsByType(Class)
- Utility APIs
java.util.function
java.util.stream
All what you should do is to use the new jack compiler, to do this you have just to add this to your gradle file build.gradle (Module: app)
:
android {
...
defaultConfig {
...
jackOptions {
enabled true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
References:
Solution 2:
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.
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.
CTRL + ALT + S, select 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.
Going out on a limb here assuming Android Studio includes the core settings of Intellij.
Solution 3:
It's safe if you don't use the java 8 features.
although you may be keen on java 8 with retroLambda and collectionsQuery. https://github.com/evant/gradle-retrolambda and 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( newView.OnClickListener(){
@OverridepublicvoidonClick(View v) {
doClickEvent();
}
});
to use java 8 with retrolambda just add in the gradle file.
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...
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
}
}
Solution 4:
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.
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 need JDK 8. Sounds more like your professor just wants to use the latest version of Java (judging from your first sentence).
Post a Comment for "Can I "use" Java 8 With Android Development Now?"