Lambda在Android库模块中导致编译器exception

当我在Android库模块中使用lambdaexpression式时,我收到一个编译器exceptioncom.sun.tools.javac.code.Symbol$CompletionFailure: class file for java.lang.invoke.MethodType not found

在Android应用程序模块中使用时,Lambdaexpression式正在编译时没有错误。

可以在这里find一个示例项目来演示这个问题:
https://github.com/adamdye/AndroidLambdaIssue

示例中有趣的类是MyLibrary.java和MainActivity.java。 每个类都包含相同的expression式。

build立

  Android Studio 2.2 preview 1 min/target SDK version = android-N build tools version = 24.0.0.rc4 jack compiler enabled source/target compatibility = 1.8 Gradle version = 2.10 Android Plugin Version = 2.2.0-alpha1 JDK = java 8 

我对使用retro-lambda不感兴趣。 我想通过适当的configuration来实现这个function。 我假设我错过了某个步骤。

Related of "Lambda在Android库模块中导致编译器exception"

只是为了回圈,并添加我所学到的东西。

通过将我的JAVA HOME的运行时jar添加到项目的build.gradle文件中的gradle的bootclasspath,我能够通过MethodType not found错误。

 allprojects { gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs << "-Xbootclasspath/a:" + System.properties.get("java.home") + "/lib/rt.jar" } } } 

但是,应用程序不会部署到设备或模拟器,因为app:transformClassesWithPreJackPackagedLibrariesForDebug gradle任务失败。 它要求用作lamba的所有接口都在类path上。 bootclasspath修复程序没有为Jack编译器设置类path,而库也不使用Jack编译器。

我在这个问题上打开了一个错误报告: https : //code.google.com/p/android/issues/detail?id=211386

他们评论说,这将在不久的将来得到解决。

我通过将包含Java源代码的JAR作为依赖项而不是编译的JAR来解决问题。 这是我如何configuration我的项目:

在图书馆的build.gradle

 configurations { sources } task sourcesJar(type: Jar, dependsOn: classes) { classifier = 'sources' from sourceSets.main.java.srcDirs } artifacts { sources sourcesJar } 

在应用程序的build.gradle

 dependencies { compile project(path: ":gdxstudio-core", configuration: "sources") 

当然,这个库是作为应用程序的settings.gradle的外部项目