android - 将 AS 更新到 1.0 后,项目中出现 "method ID not in [0, 0xffff]: 65536"错误

标签 android gradle android-studio dex

我将Android Studio更新到最新版本,让它“修复项目”之类的——但现在我的项目没有编译,给我

 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    D:\VGA\AndroidStudio\sdk\build-tools\21.1.1\dx.bat --dex --no-optimize --output D:\VGA\Projects\Sales-App\Android-Project\svn\android\app\build\intermediates\dex\debug --input-list=D:\VGA\Projects\Sales-App\Android-Project\svn\android\app\build\intermediates\tmp\dex\debug\inputList.txt
Error Code:
    2
Output:

    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:277)
        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:302)
        at com.android.dx.command.dexer.Main.run(Main.java:245)
        at com.android.dx.command.dexer.Main.main(Main.java:214)
        at com.android.dx.command.Main.main(Main.java:106)

然而,这并不能通过多索引来解决,因为当我添加这个时:

defaultConfig {
    ...
    multiDexEnabled = true
}

发生这种情况

D:\VGA\AndroidStudio\sdk\build-tools\21.1.1\dx.bat --dex --no-optimize --multi-dex --main-dex-list D:\VGA\Projects\Sales-App\Android-Project\svn\android\app\build\intermediates\multi-dex\debug\maindexlist.txt --output D:\VGA\Projects\Sales-App\Android-Project\svn\android\app\build\intermediates\dex\debug --input-list=D:\VGA\Projects\Sales-App\Android-Project\svn\android\app\build\intermediates\tmp\dex\debug\inputList.txt

错误代码: 3 输出:

UNEXPECTED TOP-LEVEL ERROR:
java.lang.OutOfMemoryError: GC overhead limit exceeded
    at com.android.dx.cf.code.ConcreteMethod.makeSourcePosistion(ConcreteMethod.java:254)
    at com.android.dx.cf.code.RopperMachine.run(RopperMachine.java:306)
    at com.android.dx.cf.code.Simulator$SimVisitor.visitLocal(Simulator.java:612)
    at com.android.dx.cf.code.BytecodeArray.parseInstruction(BytecodeArray.java:367)
    at com.android.dx.cf.code.Simulator.simulate(Simulator.java:94)
    at com.android.dx.cf.code.Ropper.processBlock(Ropper.java:787)
    at com.android.dx.cf.code.Ropper.doit(Ropper.java:742)
    at com.android.dx.cf.code.Ropper.convert(Ropper.java:349)
    at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:280)
    at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:137)
    at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:93)
    at com.android.dx.command.dexer.Main.processClass(Main.java:729)
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)
    at com.android.dx.command.dexer.Main.access$300(Main.java:82)
    at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)
    at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
    at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
    at com.android.dx.command.dexer.Main.processOne(Main.java:632)
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:505)
    at com.android.dx.command.dexer.Main.runMultiDex(Main.java:332)
    at com.android.dx.command.dexer.Main.run(Main.java:243)
    at com.android.dx.command.dexer.Main.main(Main.java:214)
    at com.android.dx.command.Main.main(Main.java:106)

我尝试将构建工具更改为最新的

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.1"

因为默认情况下它更改为 20.0.0 似乎使用 4.4W 的 SDK,但这并没有解决我的问题。

有人知道这里出了什么问题吗?

编辑:

更改构建工具或编译 SDK 并不能解决问题。

将应用程序变成一个多 dex 项目并添加以下内容

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.1"

    defaultConfig {
        ...
        multiDexEnabled true
    }

...
    dexOptions {
        incremental true
        javaMaxHeapSize "4g"
    }
}

修复了构建过程,但这似乎仍然只是一种“处理”,而不是解决问题。

我不确定这是否相关,但这是我的依赖列表:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:multidex:1.0.0'
    compile 'com.android.support:appcompat-v7:21.0.2'
    compile 'com.squareup:otto:1.3.5'
    compile 'com.squareup.picasso:picasso:2.4.0'
    compile 'com.squareup.retrofit:retrofit:1.7.1'
    compile 'com.jakewharton:butterknife:6.0.0'
    compile 'com.madgag.spongycastle:core:1.51.0.0'
    compile 'com.madgag.spongycastle:prov:1.51.0.0'
    compile 'com.madgag.spongycastle:pkix:1.51.0.0'
    compile 'com.google.code.gson:gson:2.3'
    compile 'commons-io:commons-io:2.4'
    compile 'org.apache.httpcomponents:httpclient-android:4.3.5'
    compile 'com.squareup.dagger:dagger:1.2.2'
    compile 'com.squareup.dagger:dagger-compiler:1.2.2'
    compile('com.googlecode.json-simple:json-simple:1.1.1') {
        exclude module: 'junit'
    }
    compile 'com.google.android.gms:play-services:6.5.87'
}

从那时起唯一的新依赖是最后一行,我根据 https://developer.android.com/google/gcm/client.html 添加所以我认为这不是问题的根源。

EDIT2:

是的,这是问题的根源。由于我需要 Google Cloud Messaging,我根据 http://developer.android.com/google/play-services/setup.html#split 用基础替换了该依赖项。 :

compile 'com.google.android.gms:play-services-base:6.5.87'

它解决了这个问题。谢谢你的帮助。

EDIT3:

从播放服务 7.0.0 开始,GCM 就在

compile 'com.google.android.gms:play-services-gcm:7.0.0'

EDIT4:

Play 服务已更新至 7.3.0。 请在此处查看最新版本:http://developer.android.com/google/play-services/setup.html#split

最佳答案

该错误表示您已达到应用中的最大方法计数。这确实包括您用于项目的任何库。

有两种方法可以解决这个问题:

  1. 摆脱任何您并不真正需要的第三方库。如果您使用可能对方法计数有很大贡献的 google play 服务。幸运的是,在最新的播放服务发布时,它 is possible to include only parts框架。
  2. 使用 multi dex setup为您的应用程序。

关于android - 将 AS 更新到 1.0 后,项目中出现 "method ID not in [0, 0xffff]: 65536"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27377080/

相关文章:

安卓工作室 : how to import Android library project

java - Android 共享首选项加载问题

java - 将多个 RecyclerView 与一个 Adapter 类一起使用

android - onDetachedFromWindow 永远不会为 View 调用

android - Android无法同时识别多个按钮

java - Android Studio 中缺少存储库

android - 如何使用recyclerview实现Material Design父子过渡

spring-boot - SpringBoot,Thymeleaf,Gradle:未访问静态资源,CSS未显示

opencv - Android NDK unsatisfiedLinkError(仅适用于<4.3的android)

android - 我正在尝试使用 Spinner 来显示使用 ArrayAdapter 的数组中的项目。 Spinner 必须像 textView 一样显示提示