ChatGPT解决这个技术问题 Extra ChatGPT

多个dex文件定义Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat

如果我从命令行运行 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 clean,当我重新运行 assembleDebug 时它总是出现在那里。

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

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'
}
我尝试了所有解决方案,但碰巧它们都不起作用。比我刚刚创建了一个同名的新项目,并从旧项目中复制了所有文件。现在效果很好。希望能帮助到你。
我在 support-v13 中遇到了这个问题。经过多次调试并尝试了所有答案都无济于事,我发现它是在我尝试将 kotlin 集成到现有的 java 项目中时引入的。我删除了 kotlin 标准库和其他 kotlin 库,这很好。仍然会尝试解决 kotlin 的问题,但现在,我得工作了。任何信息也会有所帮助,真的很喜欢 kotlin。

C
CommonsWare

运行 gradle -q dependencies(或 gradle -q :projectName:dependencies)以生成依赖关系报告。您应该看到 r7 的来源,例如:

compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    |    \--- com.google.android:support-v4:r7
|    +--- com.commonsware.cwac:camera:0.5.4
|    \--- com.android.support:support-v4:18.0.+ -> 18.0.0
\--- com.android.support:support-v4:18.0.+ -> 18.0.0

然后,使用 exclude 指令阻止该依赖项。就我而言,它来自我的 CWAC-Camera 库,因此我使用:

dependencies {
    compile('com.commonsware.cwac:camera-v9:0.5.4') {
      exclude module: 'support-v4'
    }

    compile 'com.android.support:support-v4:18.0.+'
}

(其中第二个 compile 语句指示您实际想要的版本)

这应该可以解决问题,因为您将看到是否再次运行依赖关系报告:

compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    \--- com.commonsware.cwac:camera:0.5.4
\--- com.android.support:support-v4:18.0.+ -> 18.0.0

是否有一种方法可以检查/排除 Maven 上不可用的 .jar 依赖项中的模块? gradle dependencies 似乎没有报告使用 compile files('libs/example.jar') 添加的依赖项
假设我有两个 libs/*.jar 依赖项与一个共同的模块,都不能作为工件使用。有什么方法可以执行类似的依赖检查/类排除?
@dbro:我不知道,但是,我还没有研究过这一点。恕我直言,这些 JAR 文件中的一个或两个都感觉打包错误,因为公共模块应该被分解到自己的 JAR 中。
./gradlew -q :projectName:dependencies 为我工作
从模块依赖项中排除模块的快速提示:您必须将 compile project(':foo') 变成 compile(project(':foo')) { exclude module: 'support-v4' }。注意括号。
S
Sebas Hollow

我通过在 android 块内的 build.gradle 文件中添加以下代码解决了类似的错误。

android {
    dexOptions {
        preDexLibraries = false
    }
}

为我工作!这样做有什么不好的地方吗?
@BarrieGalitzky 到目前为止我还没有遇到任何问题
谢谢,这完美地解决了这个问题!无论如何,我认为它有一些副作用.. assembleDebug 任务变得慢了 3 倍!
未找到 dexOptions。
添加后,出现“翻译已中断”错误。猜猜我必须尝试一下 CommonsWare 方法。
N
Nicolas Raoul

因为一张图胜过千言万语

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

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

https://i.stack.imgur.com/DPJkT.png

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

https://i.stack.imgur.com/n5Klg.png

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

所以,要执行 gradle 命令:

第一的:

https://i.stack.imgur.com/louca.png

第二:

https://i.stack.imgur.com/eThSB.png

很容易。

而已。

谢谢你。


E
Ed Manners

另请注意,您可以通过转到 Android Studio Gradle 视图并选择目标“androidDependencies”来查看您的 android 依赖项。

另一个提示:我遇到了这个问题,直到我从项目和相关模块/库项目的 libs 文件夹中删除了 v4 支持库。


更具体的指令?找不到“androidDependencies”。谢谢
转到 Gradle 视图,然后找到标题“所有任务”,向下钻取您的应用程序名称,然后向下钻取“:app”,您将在那里找到“androidDependencies”。
Gradle 视图在哪里?
@PaulBeusterien 如果您查看窗口的最右侧,则有一个标记为 Gradle 的侧面选项卡。单击它以打开固定视图。 androidDependencies 实际上是一个 gradle 任务
谢谢你,我发布了截图解释你的答案,让它更容易。
S
Stevey

升级到 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'
}

到目前为止,它似乎并未影响 ButterKnife 的运营。

编辑:有一个更好的解决方案,即升级我的 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'

保持支持版本相同是简单的解决方案,排除模块对我不起作用。
我也用第二种解决方案解决了!相同的冲突,但与 Butter Knife 版本 8.8.1 示例: implementation ('com.jakewharton:butterknife:8.8.1') { exclude module: 'support-compat' } annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
C
Community

如果有人发现 CommonsWare 的答案无法应用于 android 库项目,这里是要修复的代码段

compile (project(':yourAndroidLibrary')){ exclude module: 'support-v13' }

你会发现问题

发现不支持的 Gradle DSL 方法:“exclude()”

如果你使用 compile project(':yourAndroidLibrary'){ exclude module: 'support-v13' }

区别在于“项目”之前的手镯“(”和“)”。


谢谢,缺少双括号!
P
Pellet
exclude module: 'support-v4'

不适用于我的项目依赖项,我可以让它工作的唯一方法是通过以下语法:

configurations {
    dependencies {
        compile(project(':Android-SDK')) {
            compile.exclude module: 'support-v4'
        }
    }
}

其中 :Android-SDK 是您的项目名称。


G
Giannis P

我遇到了同样的问题,由于库的原因,我的应用程序似乎有太多方法:http://developer.android.com/tools/building/multidex.html

解决了它:

android {
   defaultConfig {
   ...
   multiDexEnabled = true
   }
}

更多在这里Error:Execution failed for task ':app:dexDebug'. > comcommand finished with non-zero exit value 2


Multidexing 可以使您的应用程序启动速度变慢,只有在确实需要时才使用它。
a
ashishduh

我遇到了同样的错误,但这是因为我最近从使用 v4 更改为 v13。所以我所要做的就是清理项目。


升级intellij后出现同样的错误,清理项目解决了这个问题。
O
OneCricketeer

我在遗留项目上遇到了同样的错误。我的错是支持库被包含了两次:一次在 google-play-services 库中,另一个作为独立库。

这就是我修复它的方法:

糟糕的 build.gradle:

dependencies {
   compile files('libs/android-support-v4.jar') 
   compile files('libs/core-2.2.jar')
   compile files('libs/universal-image-loader-1.8.5-with-sources.jar')
   compile 'com.google.android.gms:play-services:3.2.65'
}

好的 build.gradle:

dependencies {
   // compile files('libs/android-support-v4.jar')  // not needed 
   compile files('libs/core-2.2.jar')
   compile files('libs/universal-image-loader-1.8.5-with-sources.jar')
   compile 'com.google.android.gms:play-services:3.2.65'
}

希望它可以帮助某人:-)


b
barry

我正在使用 com.google.android.gms:play-services-analytics:8.3.0android-support-v13.jar,但无法让 exclude module: 'support-v4' 工作。

对我有用的是使用 android-support-v13 人工制品而不是 android-support-v13.jar 文件。

即代替

dependencies {
compile ('com.google.android.gms:play-services-analytics:8.3.0')
compile files('libs/android-support-v13.jar')

}

我用了

dependencies {
compile ('com.google.android.gms:play-services-analytics:8.3.0')
compile ('com.google.android:android-support-v13')

}


W
WindRider

在我的情况下,问题是由版本不一致引起的:

Build tools 25
compileSdk 24
targetSdk 24
Support library 24

解决方案很简单:将所有内容都设为 25 版


O
OneCricketeer

一个类似的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 文件。

并消除冗余。这对我有用。


M
MobileEvangelist

如果您已从 Eclipse 导入项目。

1. The select project 
2. Go to File -> **Project Structure**
3. Select app in **module** section on left hand panel
4. Select **Dependency** tab
5. Your able to see jars you have added in eclipse project for v4 and v13.
6. Remove that jar by clicking on minus sign at bottom after selection
7. Click on Plus sign select **Library Dependency** 
8. Choose V4 and V13 if added
9. Press Ok and Clean and Rebuild your project

我在将 Eclipse 项目导入 Android Studio 后遇到的情况。

希望这可以帮助..


A
Arun C

这是一个烦人的问题,可能需要一些时间才能找出根本案例。你应该继续的方式是@CommonsWare 回答。

我最近遇到了这个问题,发现很难解决。

我的问题是我在 build.gradle 中包含了一个“+”版本的库。最新版本的库包含较旧的 dex 和 bang 之一。

我恢复到旧版本的库并解决了它。

最好运行你的 androidDependencies 并查看实际发生的情况。在您的构建文件夹中搜索也很好。

最重要的是,Android Studio 2.2 提供了构建功能来跟踪这个问题。

快乐的编码人员


O
OneCricketeer

在 Android Studio 中,转到您的 build.gradle(检查项目和模块 build.gradle 文件)并搜索重复的依赖项。

删除您的项目不需要的那些。


F
Farrukh Najmi

从 Gradle 缓存中删除所有文件解决了我的问题。

在 Linux 上:

rm -rf ~/.gradle/caches/*

a
albert

我在依赖项中删除了 compile 'com.android.support:support-v4:18.0.+' ,它可以工作


这应该是一个评论,否则你应该以更好的方式解释它。
Y
Yusuf Khan

我能够通过简单地添加来解决我的反应原生项目中的问题

configurations {
        all*.exclude group: 'com.android.support', module: 'support-compat'
        all*.exclude group: 'com.android.support', module: 'support-core-ui'
    }

在我的 android\app\build.gradle 文件的末尾


V
Val Martinez

最后,我解决了它在模块 gradle 文件上修改这些属性

compileSdkVersion 25 targetSdkVersion 25 编译 'com.android.support:appcompat-v7:+' 编译 'com.android.support:recyclerview-v7:+'


m
matrixer

react-native-palette 添加到我的项目时遇到了同样的问题,这是我的依赖关系树:

./gradlew app:dependencies
+--- project :react-native-palette
|    +--- com.facebook.react:react-native:0.20.+ -> 0.44.2
|    |    +--- javax.inject:javax.inject:1
|    |    +--- com.android.support:appcompat-v7:23.0.1
|    |    |    \--- com.android.support:support-v4:23.0.1
|    |    |         \--- com.android.support:support-annotations:23.0.1 -> 24.2.1
...
|    \--- com.android.support:palette-v7:24.+ -> 24.2.1
|         +--- com.android.support:support-compat:24.2.1
|         |    \--- com.android.support:support-annotations:24.2.1
|         \--- com.android.support:support-core-utils:24.2.1
|              \--- com.android.support:support-compat:24.2.1 (*)
+--- com.android.support:appcompat-v7:23.0.1 (*)
\--- com.facebook.react:react-native:+ -> 0.44.2 (*)

我尝试了许多解决方案但无法修复它,直到更改 android/app/build.gradle 中的 com.android.support:appcompat 版本,我希望这可以帮助:

dependencies {
    compile project(':react-native-palette')
    compile project(':react-native-image-picker')
    compile project(':react-native-camera')
    compile fileTree(dir: "libs", include: ["*.jar"])
    // compile "com.android.support:appcompat-v7:23.0.1"
    compile "com.android.support:appcompat-v7:24.2.1"
    compile "com.facebook.react:react-native:+"
}

似乎多个条目不是什么大问题,版本不匹配是


B
Ben Kleywegt

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

注意:对于 compile file('...'),您似乎不能放入 exclude 子句,因此该选项不可用。


g
gmyboy

我遇到了同样的问题,我的解决方案是将支持版本 '27.+'(27.1.0) 更改为 '27.0.1'


k
kall2sollies

我有同样的问题。在我的项目中,我有以下依赖项:

appcompat-v7

安卓支持-v13

由于遗留原因,appcompat 是从 Google Maven 存储库中获取的,而 android-support 是本地 .jar。

当我弄清楚这一点并用 Maven 引用替换这个本地引用时,它就解决了我的构建问题。

这是我的 app/build.gradle 的差异:

https://i.stack.imgur.com/oqMdB.jpg


e
eatmeimadanish

我通过将其添加到 project.properties 解决了我的所有问题

cordova.system.library.7=com.android.support:appcompat-v7:27.1.0

R
Ragunath CR

收到以下错误

任务 ':app:transformDexArchiveWithDexMergerForDebug' 执行失败。

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

修复:转到构建 -> 清理项目


您好,欢迎来到 Stack Overflow。但是请不要重复答案,除了已经有 24 个答案之外,ashishduh 已经提供了 building clean 作为答案。谢谢!

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅