Android Studio DexIndexOverflowException: 方法 ID 不在中

62

我使用Android Studio开发应用程序,但遇到了这个错误,我不知道如何解决。

com.android.dex.DexIndexOverflowException: 方法ID不在[0, 0xffff]之间

:app:lintVitalRelease
:app:prePackageMarkerForRelease
:app:transformClassesWithDexForRelease FAILED
Error:Execution failed for task ':app:transformClassesWithDexForRelease'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
Information:BUILD FAILED
Information:Total time: 34.783 secs
Information:1 error 

4
我使用安卓工作室。 - Hassan Ouhadou
{btsdaf} - NewestStackOverflowUser
8个回答

122

6
如果错误是由于添加Google Play服务引起的,则请查看此答案:https://dev59.com/YJPfa4cB1Zd3GeqPGrX_#35210195 - scai
1
我的问题通过添加 dexOptions { javaMaxHeapSize "4g" } 得以解决。 - Dansp
1
@DanielPereira。最终,我们应该做的是优化我们的代码、应用程序,而不是增加堆大小,即使我们现代设备的内存比过去大得多 :) - Huy
@VIRGINSTV,为了把所有东西放在一个地方:此外,根据文档 https://developer.android.com/studio/build/multidex,您需要调用MultiDex.install或使用MultiDexApplication。另一个解决方案是将minSdk更改为21,其中不需要multidex,就不会出现这样的错误。 - Deepscorn

27

Android有一个预定义的方法上限,为65536。

如果您添加了整个Google Play服务,请删除它并添加特定的服务。

删除compile 'com.google.android.gms:play-services:9.6.1',然后添加例如:compile 'com.google.android.gms:play-services-maps:9.6.1'用于地图。

https://developers.google.com/android/guides/setup

列出了编译应用程序时可以包含的各个API列表,以及如何在build.gradle文件中描述它们。


1
那就是我的问题。我创建了MapActivity,谷歌添加了一堆服务。谢谢! - Stefano Mtangoo
2
在我的情况下,我已经设置了这两个依赖项:`compile 'com.google.android.gms:play-services:10.0.1'`, `compile 'com.google.android.gms:play-services-ads:10.0.1'`但是我不得不将其减少为`compile 'com.google.android.gms:play-services-ads:10.0.1'` - Yoraco Gonzales
1
这应该是被接受的答案。这对我有用。其他方法可能也能行,但根本原因是使用了很多不必要的服务。 - mister270

22

在你的gradle中设置multiDex

defaultConfig {
    // ...
    multiDexEnabled true
}

对我来说起作用了。


1
什么是multiDexEnabled? - Sandeep

7

在所有谷歌服务包的列表下,最好使用单独的包。

Google Play服务APIbuild.gradle中的描述
Google+com.google.android.gms:play-services-plus:11.2.0
Google账户登录com.google.android.gms:play-services-auth:11.2.0
Google Actions,基础客户端库com.google.android.gms:play-services-base:11.2.0
Google地址APIcom.google.android.gms:play-services-identity:11.2.0
Google Analyticscom.google.android.gms:play-services-analytics:11.2.0
Google Awarenesscom.google.android.gms:play-services-awareness:11.2.0
Google Castcom.google.android.gms:play-services-cast:11.2.0
Google云消息传递com.google.android.gms:play-services-gcm:11.2.0
Google Drivecom.google.android.gms:play-services-drive:11.2.0
Google Fitcom.google.android.gms:play-services-fitness:11.2.0
Google位置和活动识别com.google.android.gms:play-services-location:11.2.0
Google Mapscom.google.android.gms:play-services-maps:11.2.0
Google移动广告com.google.android.gms:play-services-ads:11.2.0
Google Placescom.google.android.gms:play-services-places:11.2.0
移动视觉com.google.android.gms:play-services-vision:11.2.0
Google附近com.google.android.gms:play-services-nearby:11.2.0
Google全景图查看器com.google.android.gms:play-services-panorama:11.2.0
Google Play游戏服务com.google.android.gms:play-services-games:11.2.0
SafetyNetcom.google.android.gms:play-services-safetynet:11.2.0
Android Paycom.google.android.gms:play-services-wallet:11.2.0
Android Wearcom.google.android.gms:play-services-wearable:11.2.0


6
    Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536


solution : inside build.gradle(app)
defaultConfig {
        applicationId "com.rentalhousereviews"
        ------------
        -----------
        multiDexEnabled true  //add this line
    }



dependencies {
compile 'com.android.support:multidex:1.0.1'
}

5

DexIndexOverflowException也是由超过65536个方法导致的。当添加大型库(例如Google Play服务)时,这很容易发生。查看此答案以获取解决方案。


2
我已经发现了我的自己创建的项目中存在这个错误已经超过4个月了,我因此失去了14个以上的项目。我在Stack Overflow和其他网站以及android.developer.multidex的官方网站上寻找解决方法,但是谷歌安卓的任何官方方法都无法解决我的问题。
最后,我尝试了一下简单修改谷歌广告服务,这是我找到的最终解决方案:
  • 首先编译我发现错误的代码是: compile 'com.google.android.gms:play-services:9.0.2'

  • 修改只需添加“-maps”,确保您的广告正常工作! compile 'com.google.android.gms:play-services-maps:9.0.2'

版本9.0.2可以让您的minSdkVersion 11正常工作,如您所知,广告只能与版本11及更高版本一起使用!
我很自豪地找到了解决方案,并分享这个简单的解决方案来解决其他人的问题。

0

执行任务“:app:transformDexArchiveWithDexMergerForDebug”失败。

com.android.build.api.transform.TransformException:com.android.dex.DexIndexOverflowException:方法ID不在[0,0xffff]范围内:65536

最新版本的com.android.support:multidex:1.0.3适用于我!

dependencies {
  compile 'com.android.support:multidex:1.0.3'
}

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