- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
someMethod()); 在构建应用程序或运行单元测试时-6ren">
我的 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 studio 3.0.1 中收到错误“无法找到或加载主类 com.google.devtools.build.android.desugar.Desugar”。我知道这是一个
我在 Java 8 中经常听到“加糖”和“脱糖”,这些术语是什么意思?它们是概念性的还是句法性的。 一些例子: Default iterated loop resugaring to java Obs
我可以一直期望单引号语法对 NameG 进行脱糖吗?构造函数?例如做 'x 总是脱糖 (Name (OccName "x") (NameG VarName (PkgName "some-package
我的 Android Studio 项目最近停止正常构建。我不知道是什么导致了这个问题。 这是我试过的 我尝试使用不同的 Android Studio 版本构建我的项目,即稳定和不同的 Canary
我的 Android 应用程序像这样使用 Java 8 lambda: myView.setOnClickListener(view -> someMethod()); 在构建应用程序或运行单元测试时
当我启用使用 Java 1.8 进行构建时,我的构建步骤 transformDexArchiveWithExternalLibsDexMergerForDebug 失败并出现此错误: Program
我在 AndroidStudio 的最新预览版上使用 RxJava 和 Retrofit。我的项目启用了 java 1.8 支持,如下所示: compileOptions { targetCo
我有一段代码,它使用 monad 来抽象实际的实现是在 ST 还是 IO 中运行。由于内联和缺少类型类函数调用开销,删除额外的抽象层并仅替换具体类型可带来巨大的加速(约 4.5 倍)。我正在考虑通过使
升级 Android Studio 3.0 Beta 1 后出现以下错误。 当我降级时,错误消失了。 Studio 构建:Android Studio 3.0 Beta 1Gradle 插件版本:'c
我正在将 Android 应用程序从使用 Proguard 的脱糖切换到 Android Gradle Build Plugin 4.0.0 中可用的新 R8 脱糖。 我已经按照详细的步骤 in th
在 Android Studio 3.0 中有一个选项 android.enableD8 来启用 D8(下一代 Dex 编译器)。在 Android Studio 3.1 中,根据更新,为此添加了
将 Android Gradle 插件从 3.1.4 升级到 3.2.x 后,我收到多个警告,例如: D8: Type `com.google.gson.reflect.TypeToken` was
我是一名优秀的程序员,十分优秀!