El número de referencias de métodos en un archivo .dex no puede exceder los 64k API 17

Estoy construyendo una aplicación con la Biblioteca SugarORM, pero cuando bash construir el proyecto para la API 17 (no revisé otras) muestra un error de comstackción.

Information:Gradle tasks [:app:assembleDebug] :app:preBuild UP-TO-DATE :app:preDebugBuild UP-TO-DATE :app:checkDebugManifest :app:preReleaseBuild UP-TO-DATE :app:prepareComAndroidSupportAnimatedVectorDrawable2330Library UP-TO-DATE :app:prepareComAndroidSupportAppcompatV72330Library UP-TO-DATE :app:prepareComAndroidSupportCardviewV72330Library UP-TO-DATE :app:prepareComAndroidSupportDesign2330Library UP-TO-DATE :app:prepareComAndroidSupportMediarouterV72300Library UP-TO-DATE :app:prepareComAndroidSupportRecyclerviewV72330Library UP-TO-DATE :app:prepareComAndroidSupportSupportV42330Library UP-TO-DATE :app:prepareComAndroidSupportSupportVectorDrawable2330Library UP-TO-DATE :app:prepareComAndroidVolleyVolley100Library UP-TO-DATE :app:prepareComGithubSatyanSugar14Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServices840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesAds840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesAnalytics840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesAppindexing840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesAppinvite840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesAppstate840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesAuth840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesBase840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesBasement840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesCast840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesDrive840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesFitness840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesGames840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesGcm840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesIdentity840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesLocation840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesMaps840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesMeasurement840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesNearby840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesPanotwig840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesPlus840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesSafetynet840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesVision840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesWallet840Library UP-TO-DATE :app:prepareComGoogleAndroidGmsPlayServicesWearable840Library UP-TO-DATE :app:prepareMeDrakeetMaterialdialogLibrary131Library UP-TO-DATE :app:prepareDebugDependencies :app:compileDebugAidl UP-TO-DATE :app:compileDebugRenderscript UP-TO-DATE :app:generateDebugBuildConfig UP-TO-DATE :app:generateDebugAssets UP-TO-DATE :app:mergeDebugAssets UP-TO-DATE :app:generateDebugResValues UP-TO-DATE :app:generateDebugResources UP-TO-DATE :app:mergeDebugResources UP-TO-DATE :app:processDebugManifest UP-TO-DATE :app:processDebugResources UP-TO-DATE :app:generateDebugSources UP-TO-DATE :app:compileDebugJavaWithJavac Note: Some input files use or override a deprecated API. Note: Recompile with -Xlint:deprecation for details. :app:compileDebugNdk UP-TO-DATE :app:compileDebugSources :app:prePackageMarkerForDebug :app:transformClassesWithDexForDebug Error:The number of method references in a .dex file cannot exceed 64K. Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html 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.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2 Information:BUILD FAILED Information:Total time: 21.663 secs Information:2 errors Information:0 warnings Information:See complete output in console 

Pero cuando construyo este proyecto para android v5.0 o superior, funciona bien. Si elimino la dependencia de grampo de SugarORM, funciona bien para los dispositivos v4.2.2 y v5.0

Tienes demasiados métodos. Solo puede haber 65536 métodos para dex .

Como se sugiere, puede usar el soporte multidex .

Simplemente agregue estas líneas en build.gradle :

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

También en su Manifest agregue la clase MultiDexApplication de la biblioteca de soporte multidex al elemento de la aplicación

  < ?xml version="1.0" encoding="utf-8"?>     android:name=".YourCustomApplicationClass"> ...   

anula el método attachBaseContext

 @Override protected void attachBaseContext(Context newBase) { super.attachBaseContext(newBase); MultiDex.install(this); } 

Si está utilizando su propia clase de Application , cambie la clase principal de Application a MultiDexApplication .

Otra solución es intentar eliminar el código no utilizado con ProGuard : configure ProGuard para que su aplicación ejecute ProGuard y asegúrese de que la reducción esté habilitada para versiones de lanzamiento.

 android { compileSdkVersion 23 buildToolsVersion '23.0.0' defaultConfig { applicationId "com.dkm.example" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" multiDexEnabled true } 

Pon esto dentro de tu configuración predeterminada:

 multiDexEnabled true 

su trabajo para mi

Recibí este mensaje de error porque, al codificar mi proyecto, actualizo la versión de comstackción en mi archivo build.gradle :

 android { ... buildToolsVersion "23.0.2" ... } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.4.0' compile 'com.android.support:design:23.4.0' } 

Resuélvelo corrigiendo la versión:

 android { ... buildToolsVersion "23.0.2" ... } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.0.1' compile 'com.android.support:design:23.0.1' } 

Esto es lo que funcionó para mí:

Esto sucede porque hay demasiados métodos sin usar. La mayoría de estos métodos provienen de bibliotecas incluidas en su build.gradle

Utilice los recursos de minimizar y reducir para arreglar esto con gradle y limpiar su código al mismo tiempo.

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

Este error también puede ocurrir al cargar todas las apis de los servicios de Google Play cuando solo usa unas pocas.

Según lo declarado por google: “En las versiones de servicios de Google Play anteriores a la 6.5, tenía que comstackr todo el paquete de API en su aplicación. En algunos casos, al hacerlo, era más difícil mantener la cantidad de métodos en su aplicación (incluidos framework API, métodos de biblioteca y su propio código) bajo el límite de 65.536.

A partir de la versión 6.5, puedes comstackr selectivamente las API de servicio de Google Play en tu aplicación “.

Por ejemplo, cuando su aplicación necesita play-services-maps, play-services-location. Debe agregar solo las dos apis en su archivo build.gradle a nivel de la aplicación como se muestra a continuación:

 compile 'com.google.android.gms:play-services-maps:10.2.1' compile 'com.google.android.gms:play-services-location:10.2.1' 

En lugar de:

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

Para obtener la documentación completa y la lista de servicios de google play, haga clic aquí.

He estado enfrentando el mismo problema y para soporte multidex, debe tener en cuenta la versión minSdk de su aplicación. Si está utilizando minSdkVersion 21 o superior, simplemente escriba multiDexEnabled true como este

 defaultConfig { applicationId ******************* minSdkVersion 21 targetSdkVersion 24 versionCode 1 versionName "1.0" multiDexEnabled true } 

Funciona para mí y si usa minSdkVersion por debajo de 21 (debajo de lolipop ), entonces tiene que hacer dos cosas más simples.

1. Primero agrega esta dependencia

comstackr ‘com.android.support:multidex:1.0.1’

en tu build.gradle

2. Último y segundo agregue uno esta línea abajo a su aplicación en manifiesto

android: name = “android.support.multidex.MultiDexApplication”

         

Bingo entonces funcionará en la versión más baja también … 🙂 Happy coding

Para mí, la actualización de Gradle funciona. Busque la actualización en el sitio web de Android y luego agréguela en su build.gradle (Proyecto) de esta manera

  dependencies { classpath 'com.android.tools.build:gradle:2.2.0-alpha4' .... } 

a continuación, sincronice el proyecto con el archivo gradle y podría suceder a veces debido a java.exe (en mi caso) simplemente fuerce a matar java.exe del administrador de tareas en Windows y luego vuelva a ejecutar el progtwig

También puedes probar esto:

 android{ . . // to avoid DexIndexOverflowException dexOptions { jumboMode true } } 

Espero que ayude a alguien. Gracias

Soporte Multidex antes de Android 5.0

Las versiones de la plataforma anteriores a Android 5.0 (nivel API 21) usan el tiempo de ejecución de Dalvik para ejecutar el código de la aplicación. De forma predeterminada, Dalvik limita las aplicaciones a un único archivo de código de bytes de classes.dex por APK. Para evitar esta limitación, lea configure su aplicación para multidex

Soporte Multidex para Android 5.0 y superior

Android 5.0 (nivel de API 21) y superior utiliza un tiempo de ejecución llamado ART que admite de forma nativa varios archivos DEX desde archivos APK. ART realiza la comstackción previa en el momento de la instalación de la aplicación, que escanea en busca de archivos classesN.dex y los comstack en un único archivo .oat para su ejecución por el dispositivo Android. Por lo tanto, si su minSdkVersion es 21 o superior, no necesita la biblioteca de soporte multidex. Todo lo que necesita hacer es establecer multiDexEnabled en true en su build.gradle a nivel de módulo

Lea más aquí – https://developer.android.com/studio/build/multidex

puede habilitar “Ejecución instantánea” en Android Studio para obtener soporte multidex.

Haz esto, funciona:

 defaultConfig { applicationId "com.example.maps" minSdkVersion 15 targetSdkVersion 24 versionCode 1 versionName "1.0" multiDexEnabled true }