文章目录
- 错误描述
- 解决方法
-
-
- 修复步骤
-
- [1. 清理项目缓存](#1. 清理项目缓存)
- [2. 检查项目路径一致性](#2. 检查项目路径一致性)
- [3. 强制禁用增量编译](#3. 强制禁用增量编译)
- [4. 更新依赖项](#4. 更新依赖项)
- [5. 检查 Kotlin 和 Gradle 插件版本](#5. 检查 Kotlin 和 Gradle 插件版本)
- [6. 删除 Kotlin 编译器守护进程](#6. 删除 Kotlin 编译器守护进程)
- [7. 重新编译项目](#7. 重新编译项目)
-
错误描述
flutter应用编译时报如下错误e: Daemon compilation failed: null
java.lang.Exception
at org.jetbrains.kotlin.daemon.common.CompileService C a l l R e s u l t CallResult CallResultError.get(CompileService.kt:69)
at org.jetbrains.kotlin.daemon.common.CompileService C a l l R e s u l t CallResult CallResultError.get(CompileService.kt:65)
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:244)
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:175)
at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:135)
at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:73)
at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66)
at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62)
at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100)
at org.gradle.workers.internal.NoIsolationWorkerFactory 1. l a m b d a 1.lambda 1.lambdaexecute$0(NoIsolationWorkerFactory.java:62)
at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44)
at org.gradle.workers.internal.AbstractWorker 1. c a l l ( A b s t r a c t W o r k e r . j a v a : 41 ) a t o r g . g r a d l e . i n t e r n a l . o p e r a t i o n s . D e f a u l t B u i l d O p e r a t i o n R u n n e r 1.call(AbstractWorker.java:41) at org.gradle.internal.operations.DefaultBuildOperationRunner 1.call(AbstractWorker.java:41)atorg.gradle.internal.operations.DefaultBuildOperationRunnerCallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41)
at org.gradle.workers.internal.NoIsolationWorkerFactory 1. e x e c u t e ( N o I s o l a t i o n W o r k e r F a c t o r y . j a v a : 59 ) a t o r g . g r a d l e . w o r k e r s . i n t e r n a l . D e f a u l t W o r k e r E x e c u t o r . l a m b d a 1.execute(NoIsolationWorkerFactory.java:59) at org.gradle.workers.internal.DefaultWorkerExecutor.lambda 1.execute(NoIsolationWorkerFactory.java:59)atorg.gradle.workers.internal.DefaultWorkerExecutor.lambdasubmitWork 2 ( D e f a u l t W o r k e r E x e c u t o r . j a v a : 205 ) a t j a v a . b a s e / j a v a . u t i l . c o n c u r r e n t . F u t u r e T a s k . r u n ( F u t u r e T a s k . j a v a : 264 ) a t o r g . g r a d l e . i n t e r n a l . w o r k . D e f a u l t C o n d i t i o n a l E x e c u t i o n Q u e u e 2(DefaultWorkerExecutor.java:205) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at org.gradle.internal.work.DefaultConditionalExecutionQueue 2(DefaultWorkerExecutor.java:205)atjava.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)atorg.gradle.internal.work.DefaultConditionalExecutionQueueExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:187)
at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access 700 ( D e f a u l t C o n d i t i o n a l E x e c u t i o n Q u e u e . j a v a : 120 ) a t o r g . g r a d l e . i n t e r n a l . w o r k . D e f a u l t C o n d i t i o n a l E x e c u t i o n Q u e u e 700(DefaultConditionalExecutionQueue.java:120) at org.gradle.internal.work.DefaultConditionalExecutionQueue 700(DefaultConditionalExecutionQueue.java:120)atorg.gradle.internal.work.DefaultConditionalExecutionQueueExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:162)
at org.gradle.internal.Factories 1. c r e a t e ( F a c t o r i e s . j a v a : 31 ) a t o r g . g r a d l e . i n t e r n a l . w o r k . D e f a u l t W o r k e r L e a s e S e r v i c e . w i t h L o c k s ( D e f a u l t W o r k e r L e a s e S e r v i c e . j a v a : 249 ) a t o r g . g r a d l e . i n t e r n a l . w o r k . D e f a u l t W o r k e r L e a s e S e r v i c e . r u n A s W o r k e r T h r e a d ( D e f a u l t W o r k e r L e a s e S e r v i c e . j a v a : 109 ) a t o r g . g r a d l e . i n t e r n a l . w o r k . D e f a u l t W o r k e r L e a s e S e r v i c e . r u n A s W o r k e r T h r e a d ( D e f a u l t W o r k e r L e a s e S e r v i c e . j a v a : 114 ) a t o r g . g r a d l e . i n t e r n a l . w o r k . D e f a u l t C o n d i t i o n a l E x e c u t i o n Q u e u e 1.create(Factories.java:31) at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:249) at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:109) at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:114) at org.gradle.internal.work.DefaultConditionalExecutionQueue 1.create(Factories.java:31)atorg.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:249)atorg.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:109)atorg.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:114)atorg.gradle.internal.work.DefaultConditionalExecutionQueueExecutionRunner.runBatch(DefaultConditionalExecutionQueue.java:157)
at org.gradle.internal.work.DefaultConditionalExecutionQueue E x e c u t i o n R u n n e r . r u n ( D e f a u l t C o n d i t i o n a l E x e c u t i o n Q u e u e . j a v a : 126 ) a t j a v a . b a s e / j a v a . u t i l . c o n c u r r e n t . E x e c u t o r s ExecutionRunner.run(DefaultConditionalExecutionQueue.java:126) at java.base/java.util.concurrent.Executors ExecutionRunner.run(DefaultConditionalExecutionQueue.java:126)atjava.base/java.util.concurrent.ExecutorsRunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl 1. r u n ( M a n a g e d E x e c u t o r I m p l . j a v a : 48 ) a t j a v a . b a s e / j a v a . u t i l . c o n c u r r e n t . T h r e a d P o o l E x e c u t o r . r u n W o r k e r ( T h r e a d P o o l E x e c u t o r . j a v a : 1128 ) a t j a v a . b a s e / j a v a . u t i l . c o n c u r r e n t . T h r e a d P o o l E x e c u t o r 1.run(ManagedExecutorImpl.java:48) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor 1.run(ManagedExecutorImpl.java:48)atjava.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)atjava.base/java.util.concurrent.ThreadPoolExecutorWorker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.IllegalArgumentException: this and base files have different roots: C:\Users\YUAN\AppData\Local\Pub\Cache\hosted\pub.dev\wakelock-0.6.2\android\src\main\kotlin\creativemaybeno\wakelock\Wakelock.kt and D:\WORK\myLearningWork\development\learning\android.
at kotlin.io.FilesKt__UtilsKt.toRelativeString(Utils.kt:117)
at kotlin.io.FilesKt__UtilsKt.relativeTo(Utils.kt:128)
at org.jetbrains.kotlin.incremental.storage.RelocatableFileToPathConverter.toPath(RelocatableFileToPathConverter.kt:22)
at org.jetbrains.kotlin.incremental.storage.ComplementarySourceFilesMap.get(ComplementarySourceFilesMap.kt:22)
at org.jetbrains.kotlin.incremental.AbstractIncrementalCache.getComplementaryFilesRecursive(AbstractIncrementalCache.kt:219)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.doCompile(IncrementalCompilerRunner.kt:455)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:400)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileNonIncrementally(IncrementalCompilerRunner.kt:281)
at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:125)
at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:657)
at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:105)
at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1624)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:359)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
at java.rmi/sun.rmi.transport.Transport 1. r u n ( T r a n s p o r t . j a v a : 197 ) a t j a v a . b a s e / j a v a . s e c u r i t y . A c c e s s C o n t r o l l e r . d o P r i v i l e g e d ( N a t i v e M e t h o d ) a t j a v a . r m i / s u n . r m i . t r a n s p o r t . T r a n s p o r t . s e r v i c e C a l l ( T r a n s p o r t . j a v a : 196 ) a t j a v a . r m i / s u n . r m i . t r a n s p o r t . t c p . T C P T r a n s p o r t . h a n d l e M e s s a g e s ( T C P T r a n s p o r t . j a v a : 562 ) a t j a v a . r m i / s u n . r m i . t r a n s p o r t . t c p . T C P T r a n s p o r t 1.run(Transport.java:197) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:562) at java.rmi/sun.rmi.transport.tcp.TCPTransport 1.run(Transport.java:197)atjava.base/java.security.AccessController.doPrivileged(NativeMethod)atjava.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)atjava.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:562)atjava.rmi/sun.rmi.transport.tcp.TCPTransportConnectionHandler.run0(TCPTransport.java:796)
at java.rmi/sun.rmi.transport.tcp.TCPTransport C o n n e c t i o n H a n d l e r . l a m b d a ConnectionHandler.lambda ConnectionHandler.lambdarun 0 ( T C P T r a n s p o r t . j a v a : 677 ) a t j a v a . b a s e / j a v a . s e c u r i t y . A c c e s s C o n t r o l l e r . d o P r i v i l e g e d ( N a t i v e M e t h o d ) a t j a v a . r m i / s u n . r m i . t r a n s p o r t . t c p . T C P T r a n s p o r t 0(TCPTransport.java:677) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.rmi/sun.rmi.transport.tcp.TCPTransport 0(TCPTransport.java:677)atjava.base/java.security.AccessController.doPrivileged(NativeMethod)atjava.rmi/sun.rmi.transport.tcp.TCPTransportConnectionHandler.run(TCPTransport.java:676)
... 3 more
解决方法
从错误日志可以看出,问题的核心是 Kotlin 编译器守护进程(Kotlin Compiler Daemon)在进行增量编译时出现了异常,并伴随文件路径的根目录不一致问题。
错误原因主要包括:
- 路径冲突 :
C:\Users\YUAN
和D:\WORK
是两个不同的路径根目录,Kotlin 编译器可能无法正确解析它们的相对路径关系。 - 增量编译问题:Kotlin 的增量编译缓存可能损坏,导致编译失败。
- 插件或依赖问题 :可能是依赖的插件(如
wakelock
)或编译器配置存在问题。
修复步骤
1. 清理项目缓存
清除所有缓存和生成的中间文件:
bash
flutter clean
然后删除 build
文件夹和 .gradle
文件夹:
bash
rm -rf android/.gradle
rm -rf build
重新获取依赖和编译:
bash
flutter pub get
flutter build apk
2. 检查项目路径一致性
确保你的项目和所有依赖项都在同一个磁盘分区内。将项目移动到与 Flutter SDK 相同的磁盘。例如,把项目从 D:\WORK
移动到 C:\Users\YUAN
下的某个子文件夹。
3. 强制禁用增量编译
增量编译虽然能加快编译速度,但在某些情况下会引发问题。尝试在 android/gradle.properties
文件中添加以下内容:
properties
kotlin.incremental=false
4. 更新依赖项
某些旧版插件可能与当前的 Flutter 或 Kotlin 编译器版本不兼容。更新依赖项:
-
确保
pubspec.yaml
中插件的版本是最新的:yamlwakelock: ^0.6.2+2
-
运行以下命令更新依赖:
bashflutter pub upgrade
5. 检查 Kotlin 和 Gradle 插件版本
- 确保你的 Kotlin 和 Gradle 插件版本匹配:
-
检查
android/build.gradle
中的 Gradle 插件版本(例如,com.android.tools.build:gradle:7.4.2
)。 -
检查
android/gradle/wrapper/gradle-wrapper.properties
中的 Gradle 版本(例如,distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
)。 -
检查
kotlin_version
是否与 Gradle 插件版本兼容:gradleext.kotlin_version = "1.8.22"
-
可以参考 Gradle Plugin Compatibility Table 确保版本一致。
6. 删除 Kotlin 编译器守护进程
Kotlin 守护进程可能有残留。尝试终止守护进程并清理相关缓存:
bash
pkill -f kotlin-daemon
如果你在 Windows 上,手动结束 Kotlin 守护进程相关任务。
7. 重新编译项目
执行以下命令进行完整编译:
bash
flutter build apk
结束语
Flutter是一个由Google开发的开源UI工具包,它可以让您在不同平台上创建高质量、美观的应用程序,而无需编写大量平台特定的代码。我将学习和深入研究Flutter的方方面面。从基础知识到高级技巧,从UI设计到性能优化,欢饮关注一起讨论学习,共同进入Flutter的精彩世界!