在Android Studio中,多个dex文件定义了Landroid/support/v4/。

7

我可以与许多库进行集成(添加和使用)。

但是对于ActionBarSherlock库,我遇到了很多问题。

第一个问题是常见的Multiple dex files define问题,

我知道这是由于重复的android-support-v4.jar引起的,但是我现在无法解决这个问题:

Error:Execution failed for task ':fitness:dexDebug'.

Error Code:
2
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
    at com.android.dx.command.dexer.Main.run(Main.java:230)
    at com.android.dx.command.dexer.Main.main(Main.java:199)
    at com.android.dx.command.Main.main(Main.java:103)

我按照相同错误的答案进行了操作。它使用了:

dependencies {
    compile('...') {
      exclude module: 'support-v4'
    }

    compile 'com.android.support:support-v4:18.0.+'
}

但是我收到了“第二个问题”:unsupported Gradle DSL method found: 'exclude()'!错误。 因此,我将主模块build.gradle更改为以下内容:

//configurations {
//    all*.exclude group: 'com.android.support', module: 'support-v4'
//}

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':google-play-services')
    compile files('/google-play-services/libs/google-play-services.jar')
    compile (project(':actionbarsherlock')) {
        exclude(module: 'support-v4')
    }
    compile 'com.android.support:support-v4:18.0.+'
}

解决了第二个问题,但是仍然出现第一个问题 Multiple dex files define 错误。

我阅读了许多主题,但现在无法解决第一个问题

请帮帮我,

谢谢,

p/s:我可以成功地与Gradle同步,但运行时会出现以上错误。

我使用的是Android Studio 0.5.5

编辑

ActionBarSherlockbuild.gradle只有一个android-support-v4.jar

dependencies {
        compile fileTree(dir: 'libs', include: '*.jar')
}

setting.gradle应该像这样:

include ':fitness', ':google-play-services',':actionbarsherlock'

@Garbriele:我更新了一个新问题,请展示项目的build.gradle文件主模块的build.gradle文件项目的build.gradle文件

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.9.+'
    }
}

编辑后的主模块build.gradle如下:
dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' // Get following error in this line
} 

我在下面遇到了这个错误:

输入图像描述

好的,感谢@Garbriele的评论,我已经通过使用以下内容来修复它:

repositories {
            mavenCentral()
        }
dependencies {
        compile fileTree(dir: 'libs', include: '*.jar')
        compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' // Get following error in this line
    } 

编辑2 当我这样写:

repositories {
            mavenCentral()
        }
dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile 'com.google.android.gms:play-services:+'
}

仍然遇到了第一个问题Multiple dex files define错误。

我希望现在知道如何通过Maven成功添加com.google.android.gms:play-services库。

请帮帮我,

谢谢,

更新

按照以下步骤:

  • 将Maven库放入主模块的build.gradle中:compile 'com.google.android.gms:play-services:+'

  • 重启Android Studio

  • 与gradle同步项目

就不会再次出现此错误。


你可以使用 compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' 和 compile 'com.google.android.gms:play-services:4.3.23' 来移除本地库。 - Gabriele Mariotti
当我输入compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'(这意味着通过Maven下载此库)时,我的Gradle无法再同步Gradle项目同步失败...。您能帮我解决这个问题吗? - Huy Tower
1
你是否将"repositories { mavenCentral() }"添加到了你的build.gradle文件中? - Gabriele Mariotti
我发现很难理解你的问题。你能否编辑一下并强调一下你目前遇到的问题?我对你之前遇到问题但又解决了的部分感到困惑。 - Scott Barta
@ScottBarta:更新了一个新问题,以便您了解更多细节。仍然出现主要错误,就像问题标题所述。请告诉我解决方案? - Huy Tower
2个回答

4
很奇怪,当我按照以下方式设置我的依赖项时:
repositories {
            mavenCentral()
        }
dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile 'com.google.android.gms:play-services:+'
}

我仍然会遇到第一个问题Multiple dex files define错误。

但是按照以下步骤后:

  • 通过Gradle将库放入主模块的build.gradle中:compile 'com.google.android.gms:play-services:+'

  • 重启Android Studio

  • 使用Gradle同步项目

我不再遇到此错误。


1
我在我的libs目录中有重复的库:
$ ls -la libs/
total 80
drwxr-xr-x   5  wheel    170 25 Sep 22:09 .
drwxr-xr-x  10  wheel    340 25 Sep 22:07 ..
-rw-r--r--   1  wheel   3736 25 Sep 21:36 ApiComponent.jar
-rw-r--r--   1  wheel  28741 25 Sep 21:36 DependencyService.jar
-rw-r--r--   1  wheel   3736 25 Sep 22:09 classes.jar

对我来说,删除classes.jar有效。 我修改了我的DependencyService项目,以生成DependencyService.jar而不是classes.jar,从而避免了重复。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接