【问题标题】:Lambda causes compiler exception in Android Library ModuleLambda 导致 Android 库模块中的编译器异常
【发布时间】:2016-05-25 23:28:33
【问题描述】:

当我在 Android 库模块中使用 lambda 表达式时,我收到编译器异常 com.sun.tools.javac.code.Symbol$CompletionFailure: class file for java.lang.invoke.MethodType not found

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

可以在此处找到演示问题的示例项目:
https://github.com/adamdye/AndroidLambdaIssue

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

设置

 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 不感兴趣。我想通过正确的配置来解决这个问题。我想我在某处错过了一步。

【问题讨论】:

  • 引用此link。这可能会对你有所帮助..

标签: android lambda android-library android-studio-2.2 jack-compiler


【解决方案1】:

只是回过头来,补充一下我学到的东西。

通过将我的 JAVA HOME 的运行时 jar 添加到项目 build.gradle 文件中的 gradle 引导类路径中,我能够克服 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 的接口都在类路径中。 bootclasspath 修复没有为 Jack 编译器设置类路径,并且库还没有使用 Jack 编译器。

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

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

【讨论】:

  • 现在可以吗?
  • 我在 Google 上打开的问题仍处于“已分配”状态。所以换句话说,不。刚刚在那个线程上问了同样的问题。你去添加它对你来说也是一个重要问题的线程不会有什么坏处。
【解决方案2】:

我通过将包含 Java 源代码的 JAR 作为依赖项而不是编译后的 JAR 来解决了这个问题。这就是我配置项目的方式:

在图书馆的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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2019-08-23
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 2012-08-01
    相关资源
    最近更新 更多