代码之家  ›  专栏  ›  技术社区  ›  Leonam Anjos

Android编译错误-找不到java/util/function/function的字节码

  •  16
  • Leonam Anjos  · 技术社区  · 8 年前

    将Gradle版本更新为3.1后,运行应用程序时会引发以下错误:

    找不到java/util/function/function的字节码

    Java语言io。IOException:找不到的字节码 java/util/function/function位于 com。安卓建筑格拉德尔。内部的增量。阿斯穆蒂尔斯。lambda$static$0(AsmUtils.java:89) 在 com。安卓建筑格拉德尔。内部的增量。阿斯穆蒂尔斯。loadClass(asmultils.java:307)

    有人能帮我修一下吗?

    完整堆栈错误:

    组织。格拉德尔。api。任务。TaskExecutionException:任务执行失败 “:app:transformClassesWithInstantRunForMockDebug”。在 组织。格拉德尔。api。内部的任务。处决ExecuteActionsTaskExecuter。executeActions(ExecuteActionsTaskExecuter.java:100) 在 组织。格拉德尔。api。内部的任务。处决ExecuteActionsTaskExecuter。execute(ExecuteActionsTaskExecuter.java:70) 在 组织。格拉德尔。api。内部的任务。处决OutputDirectoryCreatingTaskExecuter。execute(OutputDirectoryCreatingTaskExecuter.java:51) 在 组织。格拉德尔。api。内部的任务。处决SkipUpToDateTaskExecuter。执行(skippuptodatetaskexecuter.java:62) 在 组织。格拉德尔。api。内部的任务。处决ResolveTaskOutputCachingStateExecuter。执行(ResolveTaskOutputCachingStateExecuter.java:54) 在 组织。格拉德尔。api。内部的任务。处决验证TaskExecuter。执行(ValidatingTaskExecuter.java:60) 在 组织。格拉德尔。api。内部的任务。处决Skipemptysourcefilestataskexecuter。执行(SkipEmptySourceFilesTaskExecuter.java:97) 在 组织。格拉德尔。api。内部的任务。处决清理StaleOutputsecuter。执行(cleanupstaleoutputsecuter.java:87) 在 组织。格拉德尔。api。内部的任务。处决ResolveTaskArtifactStateTaskExecuter。执行(ResolveTaskArtifactStateTaskExecuter.java:52) 在 组织。格拉德尔。api。内部的任务。处决SkipTask无动作检测器。执行(SkipTaskWithNoActionsExecuter.java:52) 在 组织。格拉德尔。api。内部的任务。处决熟练掌握Iftaskexecuter。执行(SkipOnlyIfTaskExecuter.java:54) 在 组织。格拉德尔。api。内部的任务。处决ExecuteAtMostOnceTaskExecuter。execute(ExecuteAtMostOnceTaskExecuter.java:43) 在 组织。格拉德尔。api。内部的任务。处决CatchExceptionTaskExecuter。执行(CatchExceptionTaskExecuter.java:34) 在 组织。格拉德尔。处决任务图。DefaultTaskGrapherExecuter$EventFiringTaskWorker$1。运行(DefaultTaskGraphExecuter.java:248) 在 组织。格拉德尔。内部的进步DefaultBuildOperationExecutor$RunnableBuildOperationWorker。执行(DefaultBuildOperationExecutor.java:336) 在 组织。格拉德尔。内部的进步DefaultBuildOperationExecutor$RunnableBuildOperationWorker。执行(DefaultBuildOperationExecutor.java:328) 在 组织。格拉德尔。内部的进步DefaultBuildOperationExecutor。执行(DefaultBuildOperationExecutor.java:199) 在 组织。格拉德尔。内部的进步DefaultBuildOperationExecutor。运行(DefaultBuildOperationExecutor.java:110) 在 组织。格拉德尔。处决任务图。DefaultTaskGrapherExecuter$EventFiringTaskWorker。执行(DefaultTaskGraphExecuter.java:241) 在 组织。格拉德尔。处决任务图。DefaultTaskGrapherExecuter$EventFiringTaskWorker。执行(DefaultTaskGraphExecuter.java:230) 在 组织。格拉德尔。处决任务图。DefaultTaskPlanExecutor$TaskExecutorWorker。processTask(DefaultTaskPlanExecutor.java:123) 在 组织。格拉德尔。处决任务图。DefaultTaskPlanExecutor$TaskExecutorWorker。access$200(DefaultTaskPlanExecutor.java:79) 在 组织。格拉德尔。处决任务图。DefaultTaskPlanExecutor$TaskExecutorWorker$1。执行(DefaultTaskPlanExecutor.java:104) 在 组织。格拉德尔。处决任务图。DefaultTaskPlanExecutor$TaskExecutorWorker$1。执行(DefaultTaskPlanExecutor.java:98) 在 组织。格拉德尔。处决任务图。DefaultTaskExecutionPlan。执行(DefaultTaskExecutionPlan.java:626) 在 组织。格拉德尔。处决任务图。DefaultTaskExecutionPlan。executeWithTask(DefaultTaskExecutionPlan.java:581) 在 组织。格拉德尔。处决任务图。DefaultTaskPlanExecutor$TaskExecutorWorker。运行(DefaultTaskPlanExecutor.java:98) 在 组织。格拉德尔。内部的同时发生的ExecutorPolicy$CatchAndRecordFailures。onExecute(ExecutorPolicy.java:63) 在 组织。格拉德尔。内部的同时发生的ManagedExecutionImpl 1美元。运行(ManagedExecutorImpl.java:46) 在 Java语言util。同时发生的线程池执行器。runWorker(ThreadPoolExecutor.java:1149) 在 Java语言util。同时发生的ThreadPoolExecutor$工作者。运行(ThreadPoolExecutor.java:624) 在 组织。格拉德尔。内部的同时发生的ThreadFactoryImpl$ManagedThreadRunnable。运行(ThreadFactoryImpl.java:55) 在java。lang.Thread。运行(Thread.java:748)的原因: Java语言lang.RuntimeException: com。安卓建筑api。使改变TransformException(转换异常): Java语言lang.RuntimeException:java。lang.RuntimeException: Java语言io。IOException:找不到的字节码 java/util/function/function位于 com。安卓建设者轮廓记录器$块。handleException(Recorder.java:55) 在 com。安卓建设者轮廓螺纹记录器。记录(ThreadRecorder.java:104) 在 com。安卓建筑格拉德尔。内部的管道TransformTask。transform(TransformTask.java:212) 在太阳下。反映NativeMethodAccessorImpl。位于的invoke0(本机方法) 太阳反映NativeMethodAccessorImpl。调用(NativeMethodAccessorImpl.java:62) 在 太阳反映DelegatingMethodAccessorImpl。调用(DelegatingMethodAccessorImpl.java:43) 在java。lang.reflect。方法调用(Method.java:498) 组织。格拉德尔。内部的反映JavaMethod。调用(JavaMethod.java:73) 组织。格拉德尔。api。内部的项目taskfactory。增量AltaskAction。doExecute(IncrementalTaskAction.java:46) 在 组织。格拉德尔。api。内部的项目taskfactory。标准任务操作。执行(StandardTaskAction.java:39) 在 组织。格拉德尔。api。内部的项目taskfactory。标准任务操作。执行(StandardTaskAction.java:26) 在 组织。格拉德尔。api。内部的任务。处决ExecuteActionsTaskExecuter$1。运行(ExecuteActionsTaskExecuter.java:121) 在 组织。格拉德尔。内部的进步DefaultBuildOperationExecutor$RunnableBuildOperationWorker。执行(DefaultBuildOperationExecutor.java:336) 在 组织。格拉德尔。内部的进步DefaultBuildOperationExecutor$RunnableBuildOperationWorker。执行(DefaultBuildOperationExecutor.java:328) 在 组织。格拉德尔。内部的进步DefaultBuildOperationExecutor。执行(DefaultBuildOperationExecutor.java:199) 在 组织。格拉德尔。内部的进步DefaultBuildOperationExecutor。运行(DefaultBuildOperationExecutor.java:110) 在 组织。格拉德尔。api。内部的任务。处决ExecuteActionsTaskExecuter。executeAction(ExecuteActionsTaskExecuter.java:110) 在 组织。格拉德尔。api。内部的任务。处决ExecuteActionsTaskExecuter。executeActions(ExecuteActionsTaskExecuter.java:92) ... 32更多原因: com。安卓建筑api。使改变TransformException(转换异常): Java语言lang.RuntimeException:java。lang.RuntimeException: Java语言io。IOException:找不到的字节码 java/util/function/function位于 com。安卓建筑格拉德尔。内部的变换。InstantRunsform。doTransform(InstantRunTransform.java:312) 在 com。安卓建筑格拉德尔。内部的变换。InstantRunsform。转换(InstantRunTransform.java:178) 在 com。安卓建筑格拉德尔。内部的管道TransformTask 2美元。调用(TransformTask.java:221) 在 com。安卓建筑格拉德尔。内部的管道TransformTask 2美元。调用(TransformTask.java:217) 在 com。安卓建设者轮廓螺纹记录器。记录(ThreadRecorder.java:102) ... 48更多原因:java。lang.RuntimeException: Java语言lang.RuntimeException:java。io。IOException:找不到字节 java/util/function/function的代码 太阳反映NativeConstructorAccessorImpl。newInstance0(本机方法) 在 太阳反映NativeConstructorAccessorImpl。newInstance(NativeConstructorAccessorImpl.java:62) 在 太阳反映授权ConstructorAccessorImpl。newInstance(DelegatingConstructorAccessorImpl.java:45) 在java。lang.reflect。构造函数。newInstance(Constructor.java:423) 在 Java语言util。同时发生的ForkJoinTask。getThrowableException(ForkJoinTask.java:593) 在 Java语言util。同时发生的ForkJoinTask。reportException(ForkJoinTask.java:677) 在java。util。同时发生的ForkJoinTask。加入(ForkJoinTask.java:720) com。安卓ide。常见的内部的等待执行人。waitForTasksWithQuickFail(WaitableExecutor.java:146) 在 com。安卓建筑格拉德尔。内部的变换。InstantRunsform。doTransform(InstantRunTransform.java:307) ... 52更多原因:java。lang.RuntimeException: Java语言io。IOException:找不到的字节码 java/util/function/function位于 Java语言util。同时发生的ForkJoinTask$AdaptedCallable。exec(ForkJoinTask.java:1431) 在java。util。同时发生的ForkJoinTask。doExec(ForkJoinTask.java:289) 在 Java语言util。同时发生的ForkJoinPool$工作队列。runTask(ForkJoinPool.java:1056) 在 Java语言util。同时发生的ForkJoinPool。runWorker(ForkJoinPool.java:1692) 在 Java语言util。同时发生的ForkJoinWorkerThread。运行(ForkJoinWorkerThread.java:157) 原因:java。io。IOException:找不到的字节码 java/util/function/function位于 com。安卓建筑格拉德尔。内部的增量。阿斯穆蒂尔斯。lambda$static$0(AsmUtils.java:89) 在 com。安卓建筑格拉德尔。内部的增量。阿斯穆蒂尔斯。loadClass(asmultils.java:307) 在 com。安卓建筑格拉德尔。内部的增量。阿斯穆蒂尔斯。readInterfaceHierarchy(asmultils.java:216) 在 com。安卓建筑格拉德尔。内部的增量。阿斯穆蒂尔斯。readInterfaces(asmultils.java:251) 在 com。安卓建筑格拉德尔。内部的增量。阿斯穆蒂尔斯。readInterfaceHierarchy(asmultils.java:220) 在 com。安卓建筑格拉德尔。内部的增量。阿斯穆蒂尔斯。readInterfaces(asmultils.java:251) 在 com。安卓建筑格拉德尔。内部的增量。阿斯穆蒂尔斯。loadClass(asmultils.java:288) 在 com。安卓建筑格拉德尔。内部的增量。增量visitor。instrumentClass(IncrementalVisitor.java:342) 在 com。安卓建筑格拉德尔。内部的变换。InstantRunsform。transformToClasses2Format(InstantTransform.java:406) 在 com。安卓建筑格拉德尔。内部的变换。InstantRunsform。lambda$doTransform$3(InstantRunTransform.java:268) 在 com。安卓建筑格拉德尔。内部的变换。InstantRunsform。lambda$null$4(InstantRunTransform.java:297) 在 Java语言util。同时发生的ForkJoinTask$AdaptedCallable。exec(ForkJoinTask.java:1424) ... 4个以上

    7 回复  |  直到 8 年前
        1
  •  29
  •   Shaw    7 年前

    似乎有几个原因导致了这个问题。

    如果使用Kotlin,请尝试更改 forEach{ key, value -> ... } forEach{ (key, value) -> ... }

    在我的情况下,我从不使用Kotlin。禁用即时运行后,此错误消失。

        2
  •  19
  •   A. Cheng    7 年前

    我在这里找到了解决问题的方法: Why does Kotlin byte code reference java.util.function.BiConsumer?

    我正在使用Kotlin,找到了使用forEach{key,value->…}的行,并将其更改为forEach{(key,value)->…},这使得Kotlin选择了JRE 6而不是8。

        3
  •  4
  •   Morgan Koh    6 年前

    这看起来像是编译器问题。 您是否尝试重新启动Android studio? 如果是,请尝试

    Build-> Clean Project
    Build-> Make Project
    

    如果问题仍然存在,请尝试通过以下方式清除缓存 File > Invalidate Caches & Restart...

    如果一切都失败,请尝试禁用 即时跑步

        4
  •  1
  •   alvin    6 年前

    尝试清理(&N);重建/制作项目。如果问题仍然存在, disable Instant Run 在你的android studio中再次运行你的应用程序,应该可以解决这个问题。

        5
  •  0
  •   Simon30    8 年前

    我也有同样的问题,对我有用的是清理Android Studio首选项:

    去除AndroidStudioX。十、

    去除格拉德尔

    重新启动Android Studio

    然后我遇到了另一个问题,解决方案是禁用Instant Run。

    希望它能帮助别人

        6
  •  0
  •   Andronicus    7 年前

    当一些gradle插件与minsdk不匹配时就会发生这种情况。我使用的是sceneform sdk,我的minsdk是22,但它需要24。当我把minsdk从22改为24时,它起了作用。

        7
  •  0
  •   Waffle_EMP    7 年前

    我有一个类似的问题,它似乎是突然开始的。禁用instant run是唯一对我有效的修复方法。我知道这里提到了它,但没有看到任何关于禁用它的说明,所以你来了。。。。 在Android Studio中,选择文件、设置、构建“执行、部署、即时运行”,将“启用即时运行以热插拔部署时的代码/资源更改”设置为未选中。点击Apply,OK,Debug应该会再次工作。感谢那些提到它的人!