如果我从命令行运行gradle assembleDebug,我突然得到这个错误:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.util.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:592)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:550)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:531)
    at com.android.dx.merge.DexMerger.mergeDexBuffers(DexMerger.java:168)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:186)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:300)
    at com.android.dx.command.dexer.Main.run(Main.java:232)
    at com.android.dx.command.dexer.Main.main(Main.java:174)
    at com.android.dx.command.Main.main(Main.java:91)

如果我grep for v4,我会在构建文件夹中看到两个文件。

Binary file build/pre-dexed/debug/support-v4-19.0.0-2ba5fdd60a6c3836b3104a863fe42897da1fa9d1.jar matches
Binary file build/pre-dexed/debug/support-v4-r7-227d905d79b23b20866531d4f700446c040a2ccb.jar matches

我的gradle文件只包括这个支持库:

compile 'com.android.support:support-v13:19.0.0'

我不知道r7库是如何被包含进来的。我已经运行gradle清洁,它总是出现在那里,当我重新运行assembleDebug。

如果我在构建目录中grep r7,我看到它在文件中:

Binary file build/exploded-bundles/ComGoogleAndroidGmsPlayServices4030.aar/classes.jar matches

如果我不包含v13,那么其他东西就不能编译。

但是v13不包括v4支持库吗?

这是播放服务AAR包和v13库之间的不兼容性吗?

我从gradleplease.appspot.com上抓取了gradle文件。

删除播放服务并不能解决这个问题;同样的错误。

我在build.gradle中的依赖项:

 dependencies {


 // Google Play Services
//compile 'com.google.android.gms:play-services:4.0.30'

// Support Libraries
//compile 'com.android.support:support-v4:19.0.0'
///compile 'com.android.support:appcompat-v7:19.0.0'
//compile 'com.android.support:gridlayout-v7:19.0.0'
compile 'com.android.support:support-v13:19.0.0'
compile 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5'
compile 'commons-codec:commons-codec:1.9'
compile 'com.madgag:markdownj-core:0.4.1'
compile 'com.wu-man:android-oauth-client:0.0.2'
compile 'com.google.http-client:google-http-client-jackson2:1.17.0-rc'
compile 'org.apache.commons:commons-lang3:3.2'
compile 'com.google.code.gson:gson:2.2.4'
}

当前回答

通过增加minSdkVersion到21并启用multidex,它可以为编译文件('…')冲突工作。不确定这是否是最好的解决方案,但我可以让它在我的情况下工作的唯一方法。

注意:对于编译文件('…'),似乎不能放入排除子句,因此该选项不可用。

其他回答

收到以下错误

“:app:transformDexArchiveWithDexMergerForDebug”任务执行失败。

com.android.build.api.transform.TransformException: com.android.dex.DexException:多个dex文件定义Landroid/support/constraint/ConstraintSet$1

修复:去构建->清洁项目

一幅画胜过千言万语

为了让像我这样的初学者更容易更快地完成这项任务。以下是@edsappfactory.com发布的对我有效的答案截图:

首先打开Androidstudio右侧的Gradle视图,在应用的项目中选择Tasks,然后选择Android,然后右键单击androidDependencies,然后选择运行:

其次,你会看到这样的东西:

我发布这篇文章的主要原因是不容易知道在哪里执行gradle任务或上面发布的命令。这也是执行它们的地方。

因此,执行gradle命令:

第一:

第二:

这很容易。

这是它。

谢谢你!

类似的dex问题解决方法

gradle。Build包含:

compile files('libs/httpclient-4.2.1.jar')
compile 'org.apache.httpcomponents:httpclient:4.5'
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'

当我移除时,问题就解决了

compile files('libs/httpclient-4.2.1.jar') 

我的gradle现在看起来像:

apply plugin: 'com.android.application'

android {

compileSdkVersion 24
buildToolsVersion "24.0.3"

defaultConfig {
    applicationId "com.mmm.ll"
    minSdkVersion 16
    targetSdkVersion 24
    useLibrary  'org.apache.http.legacy'
}

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}
}

dependencies {

compile 'com.google.android.gms:play-services:6.1.+'
compile files('libs/PayPalAndroidSDK.jar')
compile files('libs/ksoap2-android-assembly-3.0.0-RC.4-jar-with-dependencies.jar')
compile files('libs/picasso-2.1.1.jar')
compile files('libs/gcm.jar')
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'org.apache.httpcomponents:httpclient:4.5'
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'
}

JAR文件和已编译的gradle项目中存在冗余

所以要仔细寻找具有相同类的依赖项和jar文件。

去除冗余。 这对我很管用。

我通过向我的构建中添加以下代码来解决类似的错误。android块中的Gradle文件。

android {
    dexOptions {
        preDexLibraries = false
    }
}

我在升级到ButterKnife 8.5.1时开始得到这个错误。其他的答案对我都没用。

我使用gradle -q:app:dependencies查看树,然后查看jar文件,直到发现冲突。冲突在于butterknife对com.android.support:support-compat:25.1.0的依赖包含了一个可访问性类的版本,com.android.support:support-v4 . 23.1.1也包含了这个类。

我通过改变我的依赖来解决这个问题:

compile 'com.jakewharton:butterknife:8.5.1'

:

compile('com.jakewharton:butterknife:8.5.1') {
    exclude module: 'support-compat'
}

到目前为止,这似乎还没有影响到黄油刀的运作。

编辑:有一个更好的解决方案,这是升级我的android支持库,以匹配ButterKnife的:

compile('com.android.support:appcompat-v7:25.2.0')
compile('com.android.support:design:25.2.0')
compile 'com.jakewharton:butterknife:8.5.1'