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

会挽雕弓如满月,西北望,射天狼。这篇文章主要讲述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下是可选的。
【Android Studio无法构建具有交叉模块依赖性的模块】所以,如果你从AS3开始,它可能不会发生。但随着时间的推移,事情变得一团糟,并且在迁移后突然停止工作,这一点并不明显。

    推荐阅读