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

 BuauOoO_987 发布于 2023-02-05 11:53

如果我从命令行运行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,我会在build文件夹中看到两个文件.

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时它总是出现在那里.

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

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

如果我不包含v13,那么其他东西不会编译.

但v13是否包含v4支持库?

这是Play服务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'
}

CommonsWare.. 304

运行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

那些从模块依赖项中删除模块的快速提示:你必须将`compile project(':foo')`转换为`compile(project(':foo')){exclude module:'support-v4'}` .注意括号. (15认同)

./gradlew -q:projectName:依赖项对我有用 (12认同)

是否有一种方法可以检查/排除Maven上不可用的.jar依赖项中的模块?`gradle dependencies`似乎不报告使用`compile files('libs/example.jar')`添加的依赖项 (3认同)

假设我有一个共同模块的两个`libs/*.jar`依赖项,它们都不能用作工件.有没有办法执行类似的依赖检查/类排除? (3认同)

@dbro:不是我知道的,但是,我再也没有研究过这一点.恕我直言,关闭袖口,这些JAR文件中的一个或两个感觉错误打包,因为共同的模块应该被分解到它自己的JAR中. (2认同)

对不起我是新手如何运行"gradle -q依赖"我不知道如何找到gradle.exe (2认同)

./gradlew -q依赖项应该具有相同的效果吧?当我这样做时,我得到一个标题为“ Root project”的文件,并在其下一行“ No configuration”。还有谁有相同的问题吗? (2认同)

嗨,我有类似的问题.我正在运行`gradlew -q dependencies`你所建议的唯一输出是`------------------------------- -----------------------------根项目------------------- -----------------------------------------没有配置`我做错了什么? (2认同)


mike.tihonch.. 122

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

android {
    dexOptions {
        preDexLibraries = false
    }
}

添加此内容后,我收到"翻译已中断"错误.猜猜我一定要试试CommonsWare方法. (10认同)

为我工作!这样做有什么不好的方面吗? (4认同)

谢谢你,这完美地解决了这个问题!无论如何,我认为它有一些副作用.. assembleDebug任务变得慢了3倍! (3认同)


MBH.. 35

因为一张图片胜过千言万语

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

首先打开Androidstudio右侧的摇篮视图,在您的应用程序的项目去Tasks,然后Android再用鼠标右键单击androidDependencies,然后选择Run:

步骤1

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

第2步

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

那么,执行gradle命令:

第一:

第一

第二:

第二

很容易.

而已.

谢谢.

10 个回答
  • 运行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
    

    2023-02-05 11:53 回答
  • 因为一张图片胜过千言万语

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

    首先打开Androidstudio右侧的摇篮视图,在您的应用程序的项目去Tasks,然后Android再用鼠标右键单击androidDependencies,然后选择Run:

    步骤1

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

    第2步

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

    那么,执行gradle命令:

    第一:

    第一

    第二:

    第二

    很容易.

    而已.

    谢谢.

    2023-02-05 11:54 回答
  • 另外要注意,您可以通过转到Android Studio Gradle视图并选择目标"androidDependencies"来查看您的Android依赖项.

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

    2023-02-05 11:54 回答
  • 如果有人发现CommonsWare的答案无法应用于android库项目,这里是要解决的片段

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

    你会发现问题

    找不到支持的Gradle DSL方法:'exclude()'

    如果您使用编译项目(':yourAndroidLibrary') {exclude module:'support-v13'}

    不同之处是"项目"之前的手镯"("")".

    2023-02-05 11:54 回答
  • exclude module: 'support-v4'
    

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

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

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

    2023-02-05 11:54 回答
  • 我有同样的问题,似乎我的应用程序有太多的方法因为库:http: //developer.android.com/tools/building/multidex.html

    解决了它:

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

    更多信息错误:任务':app:dexDebug'的执行失败.> comcommand以非零退出值2结束

    2023-02-05 11:54 回答
  • 我有同样的错误,但这是因为我最近从使用v4变为v13.所以我所要做的就是清理项目.

    2023-02-05 11:54 回答
  • 我在遗留项目上遇到了同样的错误.我的错是支持库被包含两次:一次进入google-play-services lib,另一次进入独立.

    这就是我修复它的方法:

    BAD 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'
    }
    

    GOOD 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'
    }
    

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

    2023-02-05 11:55 回答
  • 我通过在android块中的build.gradle文件中添加以下代码解决了类似的错误.

    android {
        dexOptions {
            preDexLibraries = false
        }
    }
    

    2023-02-05 11:55 回答
  • 升级到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'
    

    2023-02-05 11:55 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有