有没有办法在Android库项目中使用Java 8功能?

sas*_*trn 11 android java-8

我按照Android Java 8功能手册进行操作.它适用于Android应用程序项目.但是当我尝试将它与Android库项目一起使用时,我得到了

Error:Library projects cannot enable Jack. Jack is enabled in default config.
Run Code Online (Sandbox Code Playgroud)

部分解决方案: 我使用Gradle Retrolambda插件启用了lamdba表达式.

Oli*_* M. 18

我遇到了同样的问题并尝试了不同的方法.它现在适用于我而不使用retrolambda(在运行时产生一些奇怪的错误).杰克也因你提到的原因而不活跃.google.com上有一个关于此主题的有趣错误帖子:https://code.google.com/p/android/issues/detail?id = 211386

这是我的build.gradle脚本,我使用bug文章中的解决方法来修复编译期间的"MethodType not found"异常.

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
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 它不适用于最新的构建工具,即25.错误:LibClass.java:18-19:来自jar文件的Lambda需要在类路径上编译接口,未知接口是java.lang.Runnable (2认同)