Android Studio无法构建具有交叉模块依赖性的模块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Studio无法构建具有交叉模块依赖性的模块相关的知识,希望对你有一定的参考价值。

我有一个包含4个模块的项目,例如A,B,C,D。模块C是A,B和D中公共代码的容器。模块C使用Wire从Protobuffers生成Java代码。模块B依赖于模块C和D.我在B中只有一个编译项目依赖,因为B编译D编译C ..

直到去年安卓android Studio更新,当时我“丢失了编辑器”,模块仍然很好地构建,但是在模块A和B中编辑时,Android Studio错过了生成的Java类并将我的代码“相当”地涂成红色,即从C编译生成的类对编辑器来说是未知的,丢失语法完成和所有其他东西。

在谷歌开票后什么也没发生。我有一段时间的解决方法了

 sourceSets {
    main.java.srcDirs += '../common/build/generated/source/java/'
}

在我的(A或B)gradle中。这保持了编辑器的完整性,无论如何项目正在建设中。

使用Android Studio 3.0,我不再使用我的模块了。使用上面的sourceset行,我最终会找到dexer查找重复的类

Information:Gradle tasks [:app:assembleDebug]
Error:Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Lde/spieleck/app/badgers/messages/BadgeMsg$Builder;
Error:com.android.dex.DexException: Multiple dex files define Lde/spieleck/app/badgers/messages/BadgeMsg$Builder;
Error:  at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:661)
Error:  at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:616)
Error:  at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:598)
Error:  at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
Error:  at com.android.dx.merge.DexMerger.merge(DexMerger.java:198)
Error:  at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:61)
Error:  at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:36)
Error:  at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1445)
Error:  at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
Error:  at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:902)
Error:  at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1689)
Error:  at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1644)
Error:  at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Error:Execution failed for task ':app:transformDexArchiveWithDexMergerForDebug'.
> com.android.build.api.transform.TransformException: com.android.dex.DexException: Multiple dex files define Lde/spieleck/app/badgers/messages/BadgeMsg$Builder;
Information:BUILD FAILED in 8s
Information:BUILD 61 FINISHED; failure=org.gradle.internal.exceptions.LocationAwareException: Execution failed for task ':app:transformDexArchiveWithDexMergerForDebug'.
Information:16 errors
Information:0 warnings
Information:See complete output in console

没有上面的gradle行,我最终得到编译器找不到代码:

Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> Unable to find source java class: 'D:0meinsAndroidStudioProjectsBadgers-UIcommonuildgeneratedsourcejavadespieleckappadgersmessagesBadgeMsg.java' because it does not belong to any of the source dirs: '[D:0meinsAndroidStudioProjectsBadgers-UIappsrcmainjava, D:0meinsAndroidStudioProjectsBadgers-UIappsrcdebugjava, D:0meinsAndroidStudioProjectsBadgers-UIappuildgeneratedsource
debug, D:0meinsAndroidStudioProjectsBadgers-UIappuildgeneratedsourceuildConfigdebug, D:0meinsAndroidStudioProjectsBadgers-UIappuildgeneratedsourceaidldebug, D:0meinsAndroidStudioProjectsBadgers-UIappuildgeneratedsource
sdebug]'

令人困惑的评论:当我绝望地试图降级gradle,gradle工具等以及Android Studio以前Android Studio版本的状态由于越来越多的依赖关系放弃了一半,并让事情回到AS3.0提供的状态和我的状态模块构建。

然而,在重新启动AS3.0后,我又回到了上述两难境地。我的意思是我不能每次都来回编辑我的gradle设置以获得构建的工作。

有什么建议如何更好地设置我的依赖关系或修复所有编译,构建和语法突出显示?

我现在正在AFK度过一个漫长的周末,希望能在下周初找到答案。

参考文献:

  1. G +:https://plus.google.com/u/0/+FrankNestel/posts/c177h2R1qJz
  2. 谷歌问题:https://issuetracker.google.com/issues/37120454
答案

这不是一个超级答案,因为事情是复杂和现实世界。但Google支持人员仔细检查了我的设置,发现需要生成代码的某个源设置,这在AS2.2下是可选的。

所以,如果你从AS3开始,它可能不会发生。但随着时间的推移,事情变得一团糟,并且在迁移后突然停止工作,这一点并不明显。

以上是关于Android Studio无法构建具有交叉模块依赖性的模块的主要内容,如果未能解决你的问题,请参考以下文章

android studio firebase 错误:“无法解析 Android 应用程序模块的 Gradle 配置。解决 gradle 构建问题和/或重新同步。”

Android Studio 模块依赖

为啥 lib 模块不能在 android studio 中包含第三个 lib

Android Studio 更新后 ProGuard 无法正常工作

项目已包含具有此名称的模块 - Android Studio

从 Android Studio 3.0 构建时如何克服应用未安装错误?