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

时间:2017-12-13 10:51:52

标签: android build continuous-integration kotlin gitlab

我在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

出现此错误的原因是什么?

13 个答案:

答案 0 :(得分:88)

./gradlew clean为我修复了同样的错误。

答案 1 :(得分:25)

对于 Cordova 开发人员,

如果您在项目中遇到此构建错误(如Pierrick Martellière的注释中的this answer所述,则在项目文件夹中使用:

cordova clean

它可以立即进行清洁和建造

答案 2 :(得分:8)

我似乎找到了解决方案。 在构建时刻,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:

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

所以我删除了第一行。

之后我应用了kapt插件apply plugin: 'kotlin-kapt'并在其后的代码中修复了一些构建错误。

毕竟我意识到我忘记在某些地方将compile替换为implementation。这很奇怪,但如果没有它,那么建设就没有用。

此更改修复了我的错误构建。

答案 3 :(得分:4)

上面的回答大多是正确的但在我的情况下,当我创建相同名称 java kotlin 文件然后删除其中一个时,我会收到此异常。

解决方案是:只需构建 - >清洁项目我的项目,它的工作原理。我的项目还启用了 multiDex

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

答案 4 :(得分:4)

如上所述,@ mixel清洁可以完成工作。但作为一种不手动操作的选项,只需将gradle“clean”任务添加到app run配置中,这样它就会在启动前一直进行。对于cource来说,它可以减慢整个过程。

答案 5 :(得分:1)

配置多索引并没有为我解决这个问题。

然而,我确实提出了各种各样的解决方案。基本上它涉及在与失败的构建相同的提交上创建第二个分支的pull请求。这个拉取请求的构建成功了,然后Bitbucket认为原始拉取请求是正常的并允许我们合并,即使我们没有对该分支进行任何更改。那里有一些无法解释的怪异但技术有效。

以下是我的表现:

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

我在bad-branch-copybad-branch之间的提交上创建了一个名为develop的新分支。然后我将bad-branch合并到bad-branch-copy。最终结果是快进,使bad-branch-copy最终与bad-branch进行相同的提交。我期待一个单独的提交,所以这个结果让我感到惊讶,但无论如何我都在抓稻草,所以我继续前进。

然后我将bad-branch-copy推送到GitHub并创建了从bad-branch-copydevelop的拉取请求。这触发了bad-branch-copy上的构建 - > develop,这是成功的。

此时,buddybuild在bad-branch-copy上展示了成功的构建 - > develop仍然显示失败{ - 1}} - > bad-branch。但是,Bitbucket在develop的拉取请求上展示了成功的构建。是的,没错:buddybuild显示失败但Bitbucket说没关系。

然后我们能够合并bad-branch拉取请求,并且一切都很好。请不要问我为什么,我不会回答。 :)

我认为用

完成同样的事情
bad-branch

然后为bad-build-copy创建一个pull请求。

答案 6 :(得分:1)

通过关闭并重新启动Android Studio,我能够解决问题。也许甚至一个Rebuild Project也会这样做(虽然没试过)。

答案 7 :(得分:0)

解决这个问题的方法是手动手动添加所有冲突的文件。例如,在我的gradle文件中,我有:

implementation 'com.android.support:support-compat:27.1.1'

它用红色加下划线。我徘徊在线上,android工作室说使用较低版本的另一个文件存在冲突。错误类似于

  

come.android.support:support-annotations:26.0.1与27.1.1冲突/混合版本。

它给了我文件的名称,我手动添加了相应的版本,所以它们都匹配

compile 'com.android.support:support-annotations:27.1.1'
compile 'com.android.support:support-compat:27.1.1'
compile 'com.android.support:support-core-ui:27.1.1'
compile 'com.android.support:animated-vector-drawable:27.1.1'
compile 'com.android.support:appcompat-v7:27.1.1'
compile 'com.android.support:design:27.1.1'

答案 8 :(得分:0)

当前的解决方案都不适合我,只需禁用Instant Run即可解决此问题。

答案 9 :(得分:0)

当前使用的是 Android Studio 3.3.2 ,我只是禁用了即时运行,并且运行正常。

答案 10 :(得分:0)

  

简单解决方案

用于离子和Cordove项目

cordova clean

答案 11 :(得分:0)

以上解决方案是正确的。但是,就我而言,由于 classNotFound 引发了错误。但我只需要修复 AndroidManifest.xml。例如,检查是否存在未正确定义的应用程序名称。

答案 12 :(得分:-4)

请在这里找到这个问题的解决方案,

404