1. 程式人生 > >無法正常編譯錯誤Compilation failed to complete

無法正常編譯錯誤Compilation failed to complete

發現了一個不錯的庫可以實時檢視和修改佈局。uetool
於是就加入到了依賴,誰想編譯時卻出現了錯誤。
以下是部分錯誤片段

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100
) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70) at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
    Caused by: java.lang.RuntimeException: com
.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:
    at com.android.builder.dexing.D8DexArchiveMerger.getExceptionToRethrow(D8DexArchiveMerger.java:124)
    at com.android.builder.dexing.D8DexArchiveMerger.mergeDexArchives(D8DexArchiveMerger.java:109)
    at com
.android.build.gradle.internal.transforms.DexMergerTransformCallable.call(DexMergerTransformCallable.java:101) at com.android.build.gradle.internal.transforms.ExternalLibsMergerTransform.transform(ExternalLibsMergerTransform.kt:123) at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:221) at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:217) at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102) ... 47 more Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:76) at com.android.tools.r8.utils.ExceptionUtils.withD8CompilationHandler(ExceptionUtils.java:45) at com.android.tools.r8.D8.run(D8.java:67) at com.android.builder.dexing.D8DexArchiveMerger.mergeDexArchives(D8DexArchiveMerger.java:107) ... 52 more Caused by: com.android.tools.r8.utils.AbortException at com.android.tools.r8.utils.Reporter.failIfPendingErrors(Reporter.java:77) at com.android.tools.r8.utils.Reporter.fatalError(Reporter.java:58) at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:67) ... 55 more

開始就想根據這些錯誤來找出問題。但經過了一些努力似乎沒有結果。
於是註釋掉新引入的庫。clean後重新編譯,可以正常編譯了。
難道這庫有問題。不應該啊,那麼多人用。如果有這種問題早就發現了。
於是我想會不會是有些依賴庫衝突啊。於是執行命令
./gradlew dependencies app:dependencies
檢視依賴關係,果然,我原來的support庫都用的26.1.0,而這個庫引用了27.1.1
解決方法,引入新庫時排除support庫的引用

debugImplementation ('me.ele:uetool:1.0.15') {
        exclude module: 'appcompat-v7'
        exclude module: 'recyclerview-v7'
    }

ok,可以正常編譯了。

更新:
還有一個錯誤的地方,uetool文件中的配置是gradle3.0之前的,如下:

debugCompile 'me.ele:uetool:1.0.15'
releaseCompile 'me.ele:uetool-no-op:1.0.15'

3.0後關鍵字已經修改,引入的時候我不小心寫錯了

debugImplementation 'me.ele:uetool:1.0.15'
implementation 'me.ele:uetool-no-op:1.0.15'

這裡debugImplementation和implementation應該是效果一樣,所以衝突了
正確的應該是

debugImplementation 'me.ele:uetool:1.0.15'
    releaseImplementation 'me.ele:uetool-no-op:1.0.15'