Skip to content Skip to sidebar Skip to footer

Can I "use" Java 8 With Android Development Now?

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 inste

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?"