【问题标题】:UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexIndexOverflowException merging dependencies意外的顶级异常:com.android.dex.DexIndexOverflowException 合并依赖项
【发布时间】:2016-02-08 23:57:21
【问题描述】:

在我的项目中,当我想将 google play 依赖项添加到我的应用程序中的 ues google map 时出现问题。问题是当我想运行项目时,我给出了这些错误:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
    at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:502)
    at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:283)
    at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)
    at com.android.dx.command.dexer.Main.run(Main.java:246)
    at com.android.dx.command.dexer.Main.main(Main.java:215)
    at com.android.dx.command.Main.main(Main.java:106)
Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.7.0_72\bin\java.exe'' finished with non-zero exit value 2

这是我的依赖:

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        minSdkVersion 14
        versionCode 2
        versionName "1.0.1"
    }
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.android.support:support-v13:22.0.0'
    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'com.android.support:support-v4:22.0.0'
    compile 'com.google.android.gms:play-services:8.1.0'
    compile ('org.bouncycastle:bcprov-jdk16:1.46')
    compile ('com.nineoldandroids:library:2.4.0')
    compile ('commons-lang:commons-lang:2.6')
    compile ('com.google.zxing:core:3.2.0')
}

我还删除了所有库,因为我虽然他们可能对 google play 8.1.0 有问题,但没有任何改变。我也尝试从所有编译中排除com.google.android.gms:play-services,但它也不起作用。

【问题讨论】:

    标签: android android-studio gradle dependencies android-gradle-plugin


    【解决方案1】:

    首先,请注意您的依赖项块
    您使用的是同一个库的不同版本,可能是不必要的依赖项。

    在任何情况下都使用相同的版本

    dependencies{
        compile 'com.android.support:appcompat-v7:22.2.0'
        compile 'com.android.support:support-v13:22.0.0'   ARE YOU SURE?
        compile 'com.android.support:appcompat-v7:22.0.0'  TWICE ? REMOVE IT
        compile 'com.android.support:support-v4:22.0.0'    APPCOMPAT contains it. REMOVE IT.
    }
    

    如果问题仍然存在,则您的方法太多。 dex只能有65536种方法

    意外的顶级异常:
    com.android.dex.DexIndexOverflowException: 方法 ID 不在 [0, 0xffff]: 65536

    由于 gradle 插件 0.14.0 和 Build Tools 21.1.0,您可以使用 multidex support

    只需在build.gradle 中添加这些行:

    android {
    
        defaultConfig {
            ...
    
            // Enabling multidex support.
            multiDexEnabled true
        }
        ...
    }
    
    dependencies {
      compile 'com.android.support:multidex:1.0.0'
    }
    

    同样在您的Manifest 中,将multidex 支持库中的MultiDexApplication 类添加到应用程序元素中

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.android.multidex.myapplication">
        <application
            ...
            android:name="android.support.multidex.MultiDexApplication">
            ...
        </application>
    </manifest>
    

    如果您使用自己的Application 类,请将父类从Application 更改为MultiDexApplication

    【讨论】:

    • 我之前尝试过 multiDexEnabled true 但它导致我的应用程序崩溃并且无法解决问题。 :(
    • multidex 应该可以解决您的构建问题。如果您能够构建并且应用程序崩溃,那么您还有另一个问题。如果问题完全不同,请使用堆栈跟踪编辑问题或打开另一个问题。
    • 没有 multiDexEnabled 和新的依赖项,我的应用程序可以正常工作。我真的不知道为什么
    • 好的,我刚刚更新了答案。您不再有问题,因为删除了不必要的库,您的 apk 中的方法少于 65536 个。所以你不需要multdex。
    • 我赞成你的投票,因为它非常有用,但我的问题通过添加解决了:编译 'com.google.android.gms:play-services-maps:6.5.87' 而不仅仅是 googleplay。但我有更多关于支持的问题。我想使用操作栏和材料设计,我的应用可以在旧版本上运行,那么我真的需要添加什么?!
    【解决方案2】:

    检查您的代码.. 依赖{

    编译fileTree(dir: 'libs', include: ['*.jar'])

    **compile 'com.android.support:appcompat-v7:22.2.0'**
    compile 'com.android.support:support-v13:22.0.0'
    **compile 'com.android.support:appcompat-v7:22.0.0'**
    compile 'com.android.support:support-v4:22.0.0'
    compile 'com.google.android.gms:play-services:8.1.0'
    compile ('org.bouncycastle:bcprov-jdk16:1.46')
    compile ('com.nineoldandroids:library:2.4.0')
    compile ('commons-lang:commons-lang:2.6')
    compile ('com.google.zxing:core:3.2.0')
    

    }

    当您在代码中两次实现任何库时,会发生非零退出值 2 错误 .. compile 'com.android.support:appcompat-v7:22.0.0'编译'com.android.support:appcompat-v7:22.2.0' 请删除其中之一。

    还要检查“libs”文件夹中的其他库。这对我有用。希望这会对你有所帮助。

    【讨论】:

    • 另外,如果你必须保留库和方法,那么你可以通过在 gradle 配置中声明它来启用多 dex 支持。 defaultConfig { // 启用多索引支持。 multiDexEnabled true }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    相关资源
    最近更新 更多