someMethod()); 在构建应用程序或运行单元测试时-6ren">
gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:13:44 25 4
gpt4 key购买 nike

我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com