当前位置: 首页 > 知识库问答 >
问题:

AS更新到1.0后,在项目中获取“Method ID not in[0,0xFFFF]:65536”错误

邹麻雀
2023-03-14
 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,但这并不能解决我的问题。

有没有人知道这里会出什么问题?

编辑:

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添加了它,所以我不认为这是问题的根源。

编辑2:

是的,这是问题的根源。当我需要Google Cloud Messaging时,我用http://developer.android.com/google/play-services/setup.html#split中的基础替换了这种依赖关系:

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

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

编辑3:

自play services 7.0.0起,GCM处于

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

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

共有1个答案

尉迟鸿熙
2023-03-14

该错误表示您已达到应用程序中的最大方法计数。其中包含用于项目的任何库。

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

  1. 删除任何您并不真正需要的第三方库。如果您使用google play服务,可能会对方法计数做出很大贡献。幸运的是,在最新发布的play-services版本中,可以只包含框架的一部分。
  2. 为您的应用程序使用Multidex设置。
 类似资料:
  • 我尝试将构建工具更改为最新的 因为默认情况下,它更改为20.0.0,似乎使用4.4w的SDK,但这并没有解决我的问题。 有人知道这里会出什么问题吗? 从那以后,唯一新的依赖项是最后一行,我是按照https://developer.android.com/google/gcm/client.html添加的,所以我不认为这是问题的根源。 编辑2: 是的,这是问题的根源。由于我需要,我用http://d

  • 我以前见过各种版本的德克斯错误,但这一个是新的。清理/重新启动等不会有帮助。库项目似乎完好无损,依赖项似乎正确链接。 或 或 还有一种jumbo模式可以用一种不太可靠的方式来解决这个问题: 更新:如果您的应用程序太胖,并且您的主应用程序中有太多的方法,您可能需要按照 http://blog.osom.info/2014/12/too-many-methods-in-main-dex.html

  • 背景:我已经在AWS Kubernetes上安装了一个Kafka集群,带有合流舵图。 我已经配置了一个Oracle服务器,所以我可以用Kafka connect连接到它。 我的Kafka连接配置 我以这种方式进行了配置,并创建了一些主题: 我的conf主题:与DDL servername servername表一起提供。MYSCHEMA。我的桌子 在《Kafka·波克·德夫·迈斯凯玛》中。MYTA

  • 更新Xamarin后。表单到最新版本我得到以下错误: at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in /Users/builder/data/lanes/2923/52635947/source/mono/external/referencesource/mscorlib/system/

  • 在从Github复制文件之后,我正在从事一个laravel项目。 当运行作曲家更新命令时,下面的错误来了 VirtualAlloc()失败:[0x00000008]内存资源不足,无法处理此命令。 VirtualAlloc()失败:[0x00000008]内存资源不足,无法处理此命令。 PHP致命错误:第90行的phar://C:/composer/composer.phar/src/compose

  • 问题内容: 我正在尝试使用包含Latex样式方程式的AngularJS双向绑定文本。我想调用MathJax格式化方程式,但是我不确定在AngularJS完成更改模型后确保调用MathJax的最佳方法。我想我需要回调。这是我的JavaScript: } 这是我的HTML: 小提琴在这里:http : //jsfiddle.net/LukasHalim/UVjTD/1/。您会注意到,即使您单击两次更新