java.lang.IllegalStateException:Dex存档:仅为.CLASS文件设置.DEX扩展名

我在gitlab ci上构建这个项目

./gradlew assembleDebug --stacktrace 

有时会抛出一个错误:

 FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:transformClassesWithDexBuilderForDebug'. > com.android.build.api.transform.TransformException: java.lang.IllegalStateException: Dex archives: setting .DEX extension only for .CLASS files 

在我的本地电脑,它工作正常。

kotlin版本是1.2

multidex已启用

这个错误的原因是什么?

./gradlew clean固定相同的错误对我来说。

看来我find了解决办法。 在构建时刻,gradle正在向我显示警告:

 Configuration 'compile' in project ':app' is deprecated. Use 'implementation' instead. app: 'androidProcessor' dependencies won't be recognized as kapt annotation processors. Please change the configuration name to 'kapt' for these artifacts: 'com.arello-mobile:moxy-compiler:1.5.3' and apply the kapt plugin: "apply plugin: 'kotlin-kapt'". 

我做了一个拼写错误,并忘记删除不必要的注释处理器库:

 annotationProcessor "com.arello-mobile:moxy-compiler:$moxyVersion" kapt "com.arello-mobile:moxy-compiler:$moxyVersion" 

所以我删除了第一行。

之后,我申请了kapt插件apply plugin: 'kotlin-kapt'并修复了代码后的一些编译错误。

毕竟我意识到我忘了在某些地方把compile替换成implementation 。 这是奇怪的,但没有它建立没有工作。

这个改变修复了我的错误构建。

配置多重索引并不能解决这个问题。

不过,我确实想出了一个决议。 基本上,它涉及到与失败的构建相同的提交创建第二个分支的请求。 这个拉取请求的构建成功了,然后Bitbucket认为最初的拉取请求是可以的,并且允许我们合并,尽管我们没有在那个分支上做任何改变。 那里有一些无法解释的奇怪,但技术的工作。

以下是我如何做到的:

假设失败的分支称为bad-branch

我在bad-branchdevelop之间的共同提交上创建了一个名为bad-branch-copy的新分支。 然后我把bad-branch合并成bad-branch-copy 。 这最终的结果是一个快速的前进, bad-branch-copy结局与bad-branch 。 我期待一个单独的提交,所以这个结果让我感到惊讶,但我仍然抓着吸管,所以我继续前进。

然后我把bad-branch-copy推到了GitHub上,并创建了一个来自bad-branch-copy的pull request来develop 。 这引发了一个bad-branch-copy – > develop ,这是成功的。

那时候,Buddybuild在bad-branch-copydevelop成功地建立了,并且在bad-branch-copydevelop仍然失败了。 但是,Bitbucket展示了对bad-branch的拉取请求的成功构建。 是的,没错,buddybuild显示失败,但Bitbucket表示没问题。

然后,我们能够把bad-branch拉的要求合并起来,一切和世界都很好。 请不要问我为什么,我不会回答。 🙂

我想同样的事情可以用

 git checkout bad-build git checkout -b bad-build-copy git push origin bad-build-copy 

然后创建一个坏建立副本拉请求。

我可以通过关闭并重新启动Android Studio来解决问题。 也许即使是重建项目也可以做到这一点(虽然没有尝试)。

上面的回答大部分是正确的,但在我的情况下,我得到这个exception,当我打包相同的名称JavaKOTLIN文件,然后删除其中之一。

解决方案是:只是生成 – >清洁项目我的项目,它的工作原理。 而我的项目也启用multiDex

 defaultConfig { ... // Enabling multidex support. multiDexEnabled true } 

请在这里find解决这个问题的办法,

  defaultConfig { ... minSdkVersion 14 targetSdkVersion 21 ... // Enabling multidex support. multiDexEnabled true } dependencies { compile 'com.android.support:multidex:1.0.0' }