安卓工作室3.0 Beta4中的Dex错误

53
Error:java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
Error:java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
Error:com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
Error:com.android.dex.DexException: Multiple dex files define Lcom/google/zxing/integration/android/IntentResult;

1
@IntelliJAmiya 这不是已经报告的问题的重复。至少对我来说,问题始于AS 3.0 beta 4,而且我已经使用了multidex。 - ADev
怎么办?我没有权限,我想。 - ADev
1
@ADev 是的。谢谢提醒。这是一个 bug 吗?确定吗? - IntelliJ Amiya
1
我还不确定。但是我可以在命令行上运行 ./gradlew assembleRelease,没有任何问题。 - ADev
尝试将以下代码添加到您的Gradle文件中: multiDexEnabled true 这对我有用。 - ManmeetP
显示剩余4条评论
15个回答

56

我遇到了与Android Studio 3.0 beta 4相同的问题,但我找到了一个解决方案。

1.Build 菜单中,点击 Clean Project 按钮。

清除项目

2. 任务完成后,从 Build 菜单中点击 Rebuild Project 按钮。

输入图像描述


我很高兴能成为解决你问题的一部分。 - Y.E.S.
我想知道,为什么答案不实用,为什么要举报答案?@SagarTrehan - Y.E.S.
2
这在Android Studio 3.1 Canary上有效。但是似乎每次我更改gradle时都必须这样做。有没有长期的解决方案? - Etienne Lawlor
3
在使用 Android Studio 3.0 时适用于我。 - Rockin4Life33

28

对于Android Studio 3.0,我所做的是将以下内容添加到我的Gradle文件中:

multiDexEnabled true

它起作用了!

例子

android {
    compileSdkVersion 25
    buildToolsVersion '26.0.2'
    defaultConfig {
        applicationId "com.xx.xxx"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 9
        versionName "1.0"
        multiDexEnabled true //Add this
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            shrinkResources true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

7
对我来说,这并没有解决问题......我仍然继续努力解决它。 - Hpsaturn
尝试以下步骤:删除您的 .gradle,进行清理和重建。还要记得添加 multiDexEnabled。希望能有所帮助。 - Prodigy
如果您启用了multidex并且minSDK小于5.0,请按照此处的说明操作: https://developer.android.com/studio/build/multidex - Johnny

19

所以我通过以下方式解决了这个问题:

  • 删除项目中的./gradle文件夹
  • 删除所有build文件夹和gradle缓存。我运行了以下命令:

如何操作?

 cd ~/[your project root folder] && find . -name build -exec rm -rf {} \; && rm -rf $HOME/.gradle/caches/

假设您的gradle配置文件位于$HOME/.gradle文件夹中。

  • 在Android Studio中,转到File > Invalidate caches / Restart...,使缓存无效并重新启动它。

2
删除.gradle文件夹解决了我的问题。感谢您的帮助! - Ankita-AR
20
很抱歉,AS 3.0 Beta 7上仍然存在同样的问题,对我的情况仍然没有作用。 - Kikiwa
3
尝试了上述所有解决方案,但对于AS 3.0 beta 7无效。请帮忙。 - Pinkesh Darji
我在AS 3.0.1中仍然存在问题。 - Emanuel
清除缓存并重启后,我的Android Studio设置全部损坏了... - Zon

9
您可以通过使用gradle检查依赖项并查找重复项来找到此错误的原因,例如: ./gradlew -q app:dependencies 在我的情况下,以下错误发生在构建时:
Duplicate zip entry [httpcore-4.4.1.jar

我在我的 build.gradle 文件中添加了以下内容,问题得到了解决:

implementation ('me.dlkanth:stetho-volley:1.0') {
    exclude group: 'org.apache.httpcomponents'
}

1
在我的情况下,“com.android.volley” 以某种方式被添加了两次,我还添加了排除语句,现在它运行正常。 - Harish Rana
运行此脚本时出现“无法从9.0.1确定Java版本”的错误。我使用Android Studio 3.0将Gradle从4.1更新到4.2.1。 - androidtitan

7

如果您的minSdkVersion为21或更高版本

   android {
        defaultConfig {
           multiDexEnabled true
        }
    }

如果您的minSdkVersion版本号为20或更低,您需要在依赖项中添加以下库:

1) implementation 'com.android.support:multidex:1.0.3'

dependencies {
  compile 'com.android.support:multidex:1.0.1'
}

2) 创建一个Java类,然后从Application继承它并覆盖attachBaseContext方法。

 public class MyApplication extends Application {
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}

3) 在应用程序标记中的清单中提及创建的类。

    <application
        android:name=".MyApplication"
.
.
.
    </application>

如果上述代码无法正常工作,请通过将光标悬停在每个Gradle库上来检查它们,如果有可用的新版本,则更新它们,同步、清理项目、重新构建项目并运行。希望这样能为您解决问题。 - Shahzad Afridi
这段代码适用于Android 5.1及以上版本...对于低于此版本的Android,有另一种方法来添加multidex支持。https://developer.android.com/studio/build/multidex.html - Relsell

6

请检查您的依赖项以获取最新版本,通常情况下,这是与您的任何依赖项版本不一致造成的问题。

1. 构建 > 清理项目 2. 重新构建您的项目

检查详细日志,查找导致合并问题的依赖项并更新它们。对于每个依赖项都要重复此过程。


4

我在Android Studio 3.0.1中遇到了同样的问题,我尝试了所有可能的情况,都不像上述所提到的那样起作用,最终我通过以下步骤解决了问题:

解决方法1:

  • 关闭Android Studio
  • 删除位于C:\Users\YourComputerName\.gradle.gradle文件夹而不是应用程序的.gradle
  • 重新启动Android Studio

它会下载所有必要的jar并将其添加到您的构建路径中

解决方法2:

  • 从应用程序/libs中删除重复的jar
  • 再次运行应用程序

因为如果有重复的jar文件已经在build.gradle文件中定义,这会导致问题。

这对我解决了问题。希望能对其他人有所帮助。


在你的Linux系统中做和我提到的一样的事情。也就是说,进入终端,.gradle文件夹的位置可能类似于“~.gradle\”。 - Shailendra Madda
不,它在您的用户主目录中,例如:~/.gradle/caches/.. - Shailendra Madda
谢谢,我解决了。版本代码不匹配。 - coder_baba
很高兴能帮助到你。 - Shailendra Madda
让我们在聊天中继续这个讨论 - Shailendra Madda
显示剩余2条评论

1

将"compile"改为"compileOnly",这对我有用。


1
这个错误可能有多个原因。对于我来说,清理和重建等操作都没有解决问题。
对我来说,问题出在依赖关系上:
compile 'org.jetbrains:annotations-java5:15.0'

我将其移除后,一切都正常运作了。


你是怎么得出这个结论的?是通过试错吗? - Filipe Brito

0

我正在使用Android Studio 3.0.1,并遇到了同样的问题。如果其他答案不起作用,请尝试以下方法:

工具 -> Android -> 与Gradle文件同步项目

这对我有用 与Gradle文件同步项目


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接