多DEX文件定义Landroid /支持/ V4 / accessibilityservice / AccessibilityServiceInfoCompat [英] Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat

查看:261
本文介绍了多DEX文件定义Landroid /支持/ 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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆