android - 运行 androidConnectedTest 时修复 "Couldn' t desugar invokedynamic"

标签 android lambda android-gradle-plugin android-testing

我的 Android 应用程序像这样使用 Java 8 lambda:

myView.setOnClickListener(view -> someMethod());

在构建应用程序或运行单元测试时,上述一切正常。但是,当我运行 ./gradlew connectedAndroidTest 时,出现以下错误:

Execution failed for task ':myModule:transformClassesWithDesugarForDebugAndroidTest'.

Exception in thread "main" java.lang.IllegalStateException: Couldn't desugar invokedynamic for com/.../MyActivity.onClick using java/lang/invoke/LambdaMetafactory.metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; (6) with arguments [(Landroid/view/View;)V, com/.../MyActivity.lambda$onViewBound$0(Landroid/view/View;)V (7), (Landroid/view/View;)V]
    at com.google.devtools.build.android.desugar.LambdaDesugaring$InvokedynamicRewriter.visitInvokeDynamicInsn(LambdaDesugaring.java:474)
    at org.objectweb.asm.ClassReader.readCode(ClassReader.java:1623)
    at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1126)
    at org.objectweb.asm.ClassReader.accept(ClassReader.java:698)
    at org.objectweb.asm.ClassReader.accept(ClassReader.java:500)
    at com.google.devtools.build.android.desugar.Desugar.desugarClassesInInput(Desugar.java:477)
    at com.google.devtools.build.android.desugar.Desugar.desugarOneInput(Desugar.java:361)
    at com.google.devtools.build.android.desugar.Desugar.desugar(Desugar.java:314)
    at com.google.devtools.build.android.desugar.Desugar.main(Desugar.java:711)
Caused by: java.lang.IllegalAccessException: no such method: com...MyActivity.lambda$onViewBound$0(View)void/invokeSpecial
    at java.lang.invoke.MemberName.makeAccessException(MemberName.java:867)
    at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:1003)
    at java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:1386)
    at java.lang.invoke.MethodHandles$Lookup.findSpecial(MethodHandles.java:1004)
    at com.google.devtools.build.android.desugar.LambdaDesugaring$InvokedynamicRewriter.toMethodHandle(LambdaDesugaring.java:670)
    at com.google.devtools.build.android.desugar.LambdaDesugaring$InvokedynamicRewriter.toJvmMetatype(LambdaDesugaring.java:647)
    at com.google.devtools.build.android.desugar.LambdaDesugaring$InvokedynamicRewriter.visitInvokeDynamicInsn(LambdaDesugaring.java:408)
    ... 8 more
Caused by: java.lang.NoClassDefFoundError: com/.../databinding/MyActivityBinding
    at java.lang.invoke.MethodHandleNatives.resolve(Native Method)
    at java.lang.invoke.MemberName$Factory.resolve(MemberName.java:975)
    at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:1000)
    ... 13 more
Caused by: java.lang.ClassNotFoundException: Class com...databinding.MyActivityBinding not found
    at com.google.devtools.build.android.desugar.HeaderClassLoader.findClass(HeaderClassLoader.java:53)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 16 more

请注意,删除 lambda 会使它再次构建。对可能发生的事情以及如何解决它有任何想法吗?

最佳答案

我有类似的问题,问题是在 gradle 文件中使用的类路径中使用了错误的依赖

buildscript {
    repositories {
        maven { url 'http://repo1.maven.org/maven2' }
        maven { url 'https://maven.fabric.io/public' }
        mavenCentral()
    }
    dependencies {
        classpath 'org.cryptonode.jncryptor:jncryptor:1.2.0'
        classpath 'io.fabric.tools:gradle:1.25.4'
        // The following adds the ability to use @DebugLog on methods
        // instead on 1.2.1 I was using 1.1.0 which was the problem
        classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1'
    }
}

关于android - 运行 androidConnectedTest 时修复 "Couldn' t desugar invokedynamic",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49952688/

相关文章:

Android检查是否有电话通话

c# - 如何使用 Expression 使用 Where 和 OR 构建动态查询

python - heapq.nlargest() 的关键函数

java - gradlew appengineEndpointsInstallClientLibs 有错误 Execution failed for task ':compileJava' 。 > 无效源版本 : 1. 7

java - 为什么我可以写入 "mnt/sdcard"而不是 "mnt/extsd"?

android - Cardview,cardCornerRadius 不工作

java - 回收器 View 无限滚动无法正常工作

带有 lambda 的 Java 默认方法

Android Gradle - 实现、releaseImplementation 和 debugImplementation 之间的差异

android - 在 gradle :3. 0.0 上找到多个文件,操作系统独立路径 'META-INF/ASL2.0'