多DEX文件定义Landroid /支持/ V4 / accessibilityservice / AccessibilityServiceInfoCompat [英] Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat
问题描述
如果我跑摇篮assembleDebug
在命令行中,我突然收到此错误:
意外的顶级例外:
com.android.dx.util.DexException:多DEX文件中定义Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
在com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:592)
在com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:550)
在com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:531)
在com.android.dx.merge.DexMerger.mergeDexBuffers(DexMerger.java:168)
在com.android.dx.merge.DexMerger.merge(DexMerger.java:186)
在com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:300)
在com.android.dx.command.dexer.Main.run(Main.java:232)
在com.android.dx.command.dexer.Main.main(Main.java:174)
在com.android.dx.command.Main.main(Main.java:91)
如果我用grep的V4我看到在我的build文件夹中的两个文件。
二进制文件的建立/ pre-dexed /调试/支,v4-19.0.0-2ba5fdd60a6c3836b3104a863fe42897da1fa9d1.jar比赛
二进制文件编译/ pre-dexed /调试/支持-V4-r7-227d905d79b23b20866531d4f700446c040a2ccb.jar比赛
我的摇篮文件只包括该支持库:
编译com.android.support:support-v13:19.0.0
我难倒至于R7库包括如何莫名其妙。我已经运行摇篮干净
,它总是在那里出现,当我重新运行assembleDebug。
如果我用grep为R7构建目录里面,我把它里面的文件:
二进制文件的建立/爆炸-包/ ComGoogleAndroidGmsPlayServices4030.aar / classes.jar比赛
如果我不包括V13,那么其他的事情不进行编译。
但不V13包括V4支持库?
这是播放服务AAR包和V13库之间的不兼容?
我从gradleplease.appspot.com抓住了摇篮的文件。
删除播放服务不能解决问题;同样的错误。
我里面build.gradle依赖关系:
相关性{
//谷歌播放服务
//编译com.google.android.gms:玩-服务:4.0.30
//支持库
//编译com.android.support:support-v4:19.0.0
///编译com.android.support:appcompat-v7:19.0.0
//编译com.android.support:gridlayout-v7:19.0.0
编译com.android.support:support-v13:19.0.0
编译org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5
编译commons- codeC:commons- codeC:1.9
编译com.madgag:markdownj核心:0.4.1
编译com.wu人:Android的OAuth的客户端:0.0.2
编译com.google.http客户端:谷歌的HTTP客户jackson2:1.17.0-RC
编译org.apache.commons:公地lang3:3.2
编译com.google code.gson:GSON:2.2.4
}
运行 摇篮-q依赖
(或 摇篮-q:项目名称:依赖
)产生依赖的报告。你应该看到 R7
是,如未来:
编译 - 类路径编制的主要来源。
+ --- com.commonsware.cwac:相机-V9:0.5.4
| + --- com.actionbarsherlock:actionbarsherlock:4.4.0
| | \ --- com.google.android:support-v4:r7
| + --- com.commonsware.cwac:摄像头:0.5.4
| \ --- com.android.support:support-v4:18.0.+ - > 18.0.0
\ --- com.android.support:support-v4:18.0.+ - > 18.0.0
然后,使用排除
指令来阻止这种依赖性。就我而言,这是从我CWAC-相机库来了,所以我用:
相关性{
编译(com.commonsware.cwac:相机-V9:0.5.4'){
排除模块:支持-V4
}
编译com.android.support:support-v4:18.0.+
}
(其中第二编译
语句表示的是什么版本,你真正想要的)
这应该明确的问题时,你会看到,如果你再次运行依赖报告:
编译 - 类路径编制的主要来源。
+ --- com.commonsware.cwac:相机-V9:0.5.4
| + --- com.actionbarsherlock:actionbarsherlock:4.4.0
| \ --- com.commonsware.cwac:摄像头:0.5.4
\ --- com.android.support:support-v4:18.0.+ - > 18.0.0
If I run gradle assembleDebug
from the command line, I am suddenly getting this error:
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)
If I grep for v4 I see two files inside my build folder.
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
My gradle file includes only this support library:
compile 'com.android.support:support-v13:19.0.0'
I am stumped as to how the r7 library is included somehow. I've run gradle clean
and it always appears there when I rerun assembleDebug.
If I grep for r7 inside the build directory, I see it inside the file:
Binary file build/exploded-bundles/ComGoogleAndroidGmsPlayServices4030.aar/classes.jar matches
If I don't include v13, then other things don't compile.
But doesn't v13 include v4 support library?
Is this an incompatibility between play services AAR bundle and the v13 library?
I grabbed the gradle file from gradleplease.appspot.com.
Removing play services does not fix it; same error.
My dependencies inside 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'
}
Run gradle -q dependencies
(or gradle -q :projectName:dependencies
) to generate a dependency report. You should see where r7
is coming from, such as:
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
Then, use the exclude
directive to block that dependency. In my case, it is coming from my CWAC-Camera library, and so I use:
dependencies {
compile('com.commonsware.cwac:camera-v9:0.5.4') {
exclude module: 'support-v4'
}
compile 'com.android.support:support-v4:18.0.+'
}
(where the second compile
statement indicates what version you actually want)
That should clear matters up, as you will see if you run the dependency report again:
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
这篇关于多DEX文件定义Landroid /支持/ V4 / accessibilityservice / AccessibilityServiceInfoCompat的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!