如果我从命令行运行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
:
其次你会看到这样的东西:
我发布这个的主要原因是,要知道在哪里执行gradle
任务或上面发布的命令并不容易.所以这也是执行它们的地方.
那么,执行gradle命令:
第一:
第二:
很容易.
而已.
谢谢.
运行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
因为一张图片胜过千言万语
为了让像我这样的初学者完成这项任务变得更容易,更快捷.这是截图显示@ edsappfactory.com发布的答案对我有用:
首先打开Androidstudio右侧的摇篮视图,在您的应用程序的项目去Tasks
,然后Android
再用鼠标右键单击androidDependencies
,然后选择Run
:
其次你会看到这样的东西:
我发布这个的主要原因是,要知道在哪里执行gradle
任务或上面发布的命令并不容易.所以这也是执行它们的地方.
那么,执行gradle命令:
第一:
第二:
很容易.
而已.
谢谢.
另外要注意,您可以通过转到Android Studio Gradle视图并选择目标"androidDependencies"来查看您的Android依赖项.
还有一个提示:我遇到了这个问题,直到我从项目和相关模块/库项目中的libs文件夹中删除了v4支持lib.
如果有人发现CommonsWare的答案无法应用于android库项目,这里是要解决的片段
compile (project(':yourAndroidLibrary')) {exclude module:'support-v13'}
你会发现问题
找不到支持的Gradle DSL方法:'exclude()'
如果您使用编译项目(':yourAndroidLibrary') {exclude module:'support-v13'}
不同之处是"项目"之前的手镯"("和")".
exclude module: 'support-v4'
对项目依赖项不起作用,我能让它工作的唯一方法是通过以下语法:
configurations { dependencies { compile(project(':Android-SDK')) { compile.exclude module: 'support-v4' } } }
其中:Android-SDK是您的项目名称.
我有同样的问题,似乎我的应用程序有太多的方法因为库:http: //developer.android.com/tools/building/multidex.html
解决了它:
android { defaultConfig { ... multiDexEnabled = true } }
更多信息错误:任务':app:dexDebug'的执行失败.> comcommand以非零退出值2结束
我有同样的错误,但这是因为我最近从使用v4变为v13.所以我所要做的就是清理项目.
我在遗留项目上遇到了同样的错误.我的错是支持库被包含两次:一次进入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' }
希望它可以帮助某人:-)
我通过在android块中的build.gradle文件中添加以下代码解决了类似的错误.
android { dexOptions { preDexLibraries = false } }
升级到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'