.dex文件中的方法引用数超过64K

目前在我的项目中包括播放服务和firebase库之后,我的android应用程序正在工作,我得到这个错误,无法运行我的代码

:app:prePackageMarkerForDebug:app:transformClassesWithDexForDebug为了在进程中运行dex,Gradle守护进程需要一个更大的。 它目前大约有910 MB。 要获得更快的构build,请将Gradle守护进程的最大堆大小增加到2048 MB以上。 为此,在项目gradle.properties中设置org.gradle.jvmargs = -Xmx2048M。 有关更多信息,请参阅https://docs.gradle.org/current/userguide/build_environment.html错误:.dex文件中的方法引用数量不能超过64K。 通过https://developer.android.com/tools/building/multidex.html了解如何解决此问题:app:transformClassesWithDexForDebug FAILED错误:执行任务失败:app:transformClassesWithDexForDebug。 com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException:java.util.concurrent.ExecutionException:com.android.ide.common.process.ProcessException:org.gradle.process。 internal.ExecException:处理'命令'/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/bin/java''以非零退出值2结束

我的build.gradle文件在这里:

apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "xyz.in.network" minSdkVersion 16 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { shrinkResources true minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' multiDexEnabled true } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile project(':libs:ViewPagerIndicator') compile 'com.google.android.gms:play-services:9.0.0' compile 'com.android.support:appcompat-v7:23.4.0' compile 'com.android.support:design:23.4.0' compile 'com.google.android.gms:play-services-maps:9.0.0' compile 'com.google.android.gms:play-services-location:9.0.0' compile 'com.android.support:cardview-v7:23.4.0' compile 'com.getbase:floatingactionbutton:1.10.1' compile 'com.squareup.picasso:picasso:2.5.2' compile 'com.android.volley:volley:1.0.0' compile 'com.google.firebase:firebase-messaging:9.0.0' compile 'com.android.support:multidex:1.0.1' } apply plugin: 'com.google.gms.google-services' 

而我的manifest文件就在这里

 <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:name="android.support.multidex.MultiDexApplication" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".Util.DisconnectedNetwork" android:screenOrientation="portrait" android:theme="@style/Theme.Transparent"></activity> <service android:name=".FCM.FirebaseMessagingHandler"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service> <service android:name=".FCM.FirebaseRegistrationTokenHandler"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> </intent-filter> </service> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> </application> 

将堆大小增加到2048M后。 Gradle给这​​个错误

错误:任务“:app:transformClassesWithDexForDebug”的执行失败。 com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException:java.util.concurrent.ExecutionException:com.android.dex.DexIndexOverflowException:方法ID不在[0,0xffff]中: 65536

我遵循所有在android开发人员网站上给出的指示,但仍然有这个问题。 如何解决这个问题呢?

Related of ".dex文件中的方法引用数超过64K"

你需要在android默认configuration中启用multidex ,然后:

 android { compileSdkVersion 23 buildToolsVersion '23.0.3' defaultConfig { applicationId "com.example.case" minSdkVersion 16 targetSdkVersion 23 versionCode 43 versionName "4.0.13" // Enabling multidex support. multiDexEnabled true } 

当您在日常生活中构build应用程序时,通常使用debug默认风格。 所以如果你的应用程序有超过65k的方法,你不需要启用它的所有风格。

作为一个方面说明,您可能需要在debugging版本上使用Proguard,因此您不必在其上启用multiDex。

完整的应用程序/ build.gradle( 文档 )

 android { compileSdkVersion 21 buildToolsVersion "21.1.0" defaultConfig { ... minSdkVersion 14 targetSdkVersion 21 ... // Enabling multidex support. multiDexEnabled true } ... } dependencies { compile 'com.android.support:multidex:1.0.1' } 

最后一部分:将MultiDex应用程序添加到清单中(或作为您自己的Application的父项)

 <?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> 

我遇到了类似的错误,所以我在Android Studio中安装了一个名为Methods Count( http://www.methodscount.com/ )的插件。 它显示了每个依赖关系使用的方法引用的数量,它显示了我的编译path

 compile 'com.google.android.gms:play-services:9.0.1' 

拥有超过69K的参考资料

我改变它来显示你的一个依赖:

 compile 'com.google.android.gms:play-services:9.0.0' 

并显示69,520个方法引用作为这个编译path的依赖。

很可能你没有使用编译path的范围,并且可能能够指定更集中的path来消除大量使用的方法引用,并且在65k以下获得path。 个性化的服务列表在这里 。

就我而言,我只能想象我在一年前添加了gms服务,当时我将Firebase整合到我的应用中,但在Firebase网站上找不到相同的参考。

只是意识到对你的问题的评论说,关于把依赖分解成你所需要的类似的东西。

你有mutlidex启用释放味道,你应该有这条​​线也debugging味道

 debug { multiDexEnabled true } release { shrinkResources true minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' multiDexEnabled true }