Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there way to use Java 8 features with Android library project?

Tags:

android

java-8

I followed the Android Java 8 Features manual. It works well for Android application project. But when I try to use it with Android library project I get

Error:Library projects cannot enable Jack. Jack is enabled in default config.

Partial solution: I enabled lamdba expression with Gradle Retrolambda Plugin.

like image 875
sasha_trn Avatar asked Jun 22 '16 17:06

sasha_trn


1 Answers

I had the same issue and tried different approaches. It now works for me without using retrolambda (which produced some weird error during runtime). Also Jack is not active for the same reason you already mentioned. There is an interesting bug post at google.com about this topic: https://code.google.com/p/android/issues/detail?id=211386

Here is my build.gradle script, I used the workaround from the bug post to fix the "MethodType not found" exception during compilation.

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.2'
    }
}
apply plugin: 'com.android.library'

repositories {
    mavenCentral()
}

// Java8 not fully supported in library projects yet, https://code.google.com/p/android/issues/detail?id=211386
// this is a temporary workaround to get at least lambdas compiling
gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
        options.compilerArgs << "-Xbootclasspath/a:" + System.properties.get("java.home") + "/lib/rt.jar"
    }
}

android {
    compileSdkVersion 24
    buildToolsVersion "24"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 24
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
like image 149
Oliver M. Avatar answered Oct 11 '22 13:10

Oliver M.