提问人:xrd 提问时间:1/8/2014 最后编辑:CommonsWarexrd 更新时间:4/15/2021 访问量:173182
多个 dex 文件定义 Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat
Multiple dex files define 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 库感到困惑。我已经运行了,当我重新运行assembleDebug时,它总是出现在那里。gradle clean
如果我在构建目录中为 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'
}
答:
运行 gradle -q dependencies(或 gradle -q :p rojectName: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
然后,使用该指令阻止该依赖项。就我而言,它来自我的 CWAC-Camera 库,因此我使用:exclude
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
评论
gradle dependencies
compile files('libs/example.jar')
libs/*.jar
compile project(':foo')
compile(project(':foo')) { exclude module: 'support-v4' }
我遇到了同样的错误,但那是因为我最近从使用 v4 更改为 v13。所以我所要做的就是清理这个项目。
评论
另外需要注意的是,您可以通过转到 Android Studio Gradle 视图并选择目标“androidDependencies”来查看您的 android 依赖项。
还有一个提示:我遇到了这个问题,直到我从项目和相关模块/库项目的 libs 文件夹中删除了 v4 支持库。
评论
我通过在android块内的build.gradle文件中添加以下代码来解决类似的错误。
android {
dexOptions {
preDexLibraries = false
}
}
评论
在 Android Studio 中,转到 build.gradle(检查项目和模块 build.gradle 文件)并搜索重复的依赖项。
删除项目不需要的那些。
如果有人发现 CommonsWare 的答案无法应用于 android 库项目,这里是要修复的片段
编译 (project(':yourAndroidLibrary')){ 排除模块:“support-v13” }
你会发现问题
找到不支持的 Gradle DSL 方法:“exclude()”
如果您使用 编译项目(':yourAndroidLibrary'){ 排除模块:“support-v13” }
区别在于“project”前面的手镯“(”和“)”。
评论
exclude module: 'support-v4'
对于项目依赖项的我不起作用,我可以让它工作的唯一方法是通过以下语法:
configurations {
dependencies {
compile(project(':Android-SDK')) {
compile.exclude module: 'support-v4'
}
}
}
其中:Android-SDK是您的项目名称。
我在遗留项目上遇到了同样的错误。我的错是支持库包含两次:一次在 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'
}
希望它能帮助某人:-)
我删除了 编译“com.android.support:support-v4:18.0.+” 在依赖项中,它起作用了
评论
如果您已从 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 后我遇到的情况。
希望这会有所帮助..
我遇到了同样的问题,由于库的原因,我的应用程序似乎有太多方法:http://developer.android.com/tools/building/multidex.html
解决了这个问题:
android {
defaultConfig {
...
multiDexEnabled = true
}
}
更多信息请见 错误:任务“:app:dexDebug”执行失败。 >命令以非零退出值 2 完成
评论
我正在使用并且无法开始工作。com.google.android.gms:play-services-analytics:8.3.0
android-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')
}
因为一张图片胜过千言万语
为了让像我这样的初学者更轻松、更快速地完成这项任务。这是屏幕截图,显示了@edsappfactory.com 发布的对我有用的答案:
首先打开 Androidstudio 右侧的 Gradle 视图,在应用的项目中转到,然后右键单击,然后选择:Tasks
Android
androidDependencies
Run
其次,你会看到这样的东西:
我发布此内容的主要原因是,要知道在哪里执行任务或上面发布的命令并不容易。所以这也是执行它们的地方。gradle
因此,要执行 gradle 命令:
第一:
第二:
很简单。
就是这样。
谢谢。
从 Gradle 缓存中删除所有文件解决了我的问题。
在 Linux 上:
rm -rf ~/.gradle/caches/*
这是一个烦人的问题,可能需要一些时间才能找出根本情况。你应该继续的方式是@CommonsWare答案。
我最近遇到了这个问题,发现很难解决。
我的问题是我在build.gradle中包含了一个“+”版本的库。最新版本的库包含较旧的 dex 和 bang 之一。
我恢复到旧版本的库并解决了它。
运行你的 androidDependencies 并查看实际情况是件好事。在您的构建文件夹中搜索也很好。
最重要的是,Android Studio 2.2 提供了内置功能来跟踪此问题。
快乐的编码家伙
就我而言,问题是由版本不一致引起的:
Build tools 25
compileSdk 24
targetSdk 24
Support library 24
解决方案很简单:将所有内容都设为 25 版
升级到 ButterKnife 8.5.1 时开始出现此错误。这里的其他答案都不适合我。
我曾经看到过树,然后浏览 jar 文件,直到我发现冲突。冲突在于 butterknife 的依赖包含可访问性类的一个版本,并且还包含该类。gradle -q :app:dependencies
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'
评论
最后,我解决了它,修改了模块gradle文件上的这些属性
- compileSdk版本 25
- targetSdk版本 25
- 编译“com.android.support:appcompat-v7:+”
- 编译“com.android.support:recyclerview-v7:+”
类似的 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')
我的评分现在如下所示:
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 文件。
并删除冗余。
这对我有用。
添加到我的项目时遇到了同样的问题,这是我的依赖关系树: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 (*)
我尝试了很多 solutons 但无法修复它,直到更改版本,我希望这能有所帮助:com.android.support:appcompat
android/app/build.gradle
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:+"
}
看来多个条目不是什么大问题,版本不匹配是
通过将 minSdkVersion 增加到 21 并启用 multidex 来让它为冲突工作。不确定这是否是最好的解决方案,但这是我可以在我的情况下让它工作的唯一方法。compile file('...')
注意:因为您似乎无法放入子句,因此该选项不可用。compile file('...')
exclude
我遇到了同样的问题,我的解决方案是将支持版本“27.+”(27.1.0)更改为“27.0.1”
我遇到了同样的问题。 在我的项目中,我有以下依赖项:
- appcompat-v7
- android-支持-v13
由于遗留原因,appcompat 是从 Google Maven 存储库获取的,而 android-support 是本地 .jar。
当我弄清楚这一点,并用 maven 引用替换这个本地引用时,它只是解决了我的构建问题。
这是我的 app/build.gradle 的差异:
我通过将其添加到project.properties中解决了所有问题
cordova.system.library.7=com.android.support:appcompat-v7:27.1.0
收到以下错误
任务“:app:transformDexArchiveWithDexMergerForDebug”执行失败。
com.android.build.api.transform.TransformException:com.android.dex.DexException:多个 dex 文件定义 Landroid/support/constraint/ConstraintSet$1
修复:转到 Build -> Clean Project
评论
我能够通过简单地添加
configurations {
all*.exclude group: 'com.android.support', module: 'support-compat'
all*.exclude group: 'com.android.support', module: 'support-core-ui'
}
在我的 android\app\build.gradle 文件的末尾
评论