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

问题描述 投票:38回答:11

我在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已启用

这个错误的原因是什么?

android build continuous-integration kotlin gitlab
11个回答
88
投票

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


0
投票

当前的解决方案都没有为我工作,它只是通过简单地禁用Instant Run来解决。


-4
投票

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

 defaultConfig {
        ...
        minSdkVersion 14
        targetSdkVersion 21
        ...

        // Enabling multidex support.
        multiDexEnabled true
    }
dependencies {
  compile 'com.android.support:multidex:1.0.0'
}

29
投票

对于Cordova开发人员,

如果你在项目中遇到这个构建错误,就像Pierrick Martellière的评论中所说的this answer,在你的项目文件夹中使用:

cordova clean

它立即进行清洁和构建


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。这很奇怪,但没有它,构建不起作用。

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


4
投票

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

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

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

4
投票

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


1
投票

通过关闭并重新启动Android Studio,我能够解决问题。也许即使是重建项目也会这样做(虽然没有尝试过)。


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,并且在bad-branch上仍然显示失败 - > develop。然而,Bitbucket在bad-branch的拉动请求上展示了成功的构建。是的,这是对的:buddybuild显示失败但Bitbucket说没关系。

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

我认为同样的事情可以完成

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

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


1
投票

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


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'
© www.soinside.com 2019 - 2024. All rights reserved.