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

Estoy construyendo una aplicación con la biblioteca de SugarORM pero cuando intento construir el proyecto para API 17 (no comprobé para otros) demuestra error de la estructura.

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:prepareComGoogleAndroidGmsPlayServicesPanorama840Library 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 quito la dependencia de gradles de SugarORM funciona bien para los dispositivos v4.2.2 y v5.0

Tienes demasiados métodos. Sólo puede haber 65536 métodos para dex .

Como se sugiere, puede utilizar el soporte multidex .

Simplemente agregue estas líneas en el 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 desde la biblioteca de soporte multidex al elemento de la aplicación

  <?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"> <!--If you are using your own custom Application class then extend --> <!--MultiDexApplication and change above line as--> android:name=".YourCustomApplicationClass"> ... </application> </manifest> 

Método override 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 .

Más detalles en la documentación de stackoverflow .

Otra solución es tratar de eliminar el código no utilizado con ProGuard : configure la configuración de ProGuard para que su aplicación ejecute ProGuard y asegúrese de que ha activado la reducción de compilaciones de versiones.

Más detalles en la documentación de stackoverflow .

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

Ponga esto dentro de su defaultConfig:

 multiDexEnabled true 

Su trabajo para mi

Tengo este mensaje de error porque mientras que la codificación de mi proyecto de actualización automática versión de compilació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' } 

Resolverlo 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 no utilizados. La mayoría de estos métodos provienen de bibliotecas incluidas en su build.gradle

Utilice los recursos minify y shrink para solucionar 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 } } 

He estado haciendo frente al mismo problema y para la ayuda multidex, usted tiene que tener presente el minSdkVersion de su uso. Si está utilizando minSdkVersion 21 o superior, simplemente escriba multiDexEnabled como este

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

Funciona para mí y si usted está usando minSdkVersion debajo de 21 (debajo de lolipop ) entonces usted tiene que hacer dos cosas más simples

1. Añada primero esta dependencia

Compile 'com.android.support:multidex:1.0.1'

En su build.gradle.

2. Último y segundo agregue una línea debajo de su aplicación en el manifiesto

Android: name = "android.support.multidex.MultiDexApplication"

 <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:name="android.support.multidex.MultiDexApplication" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> 

Bingo, entonces funcionará en la versión inferior también .. 🙂 Happy codificación

Este error también puede ocurrir cuando carga todos los apis de servicios de Google Play cuando sólo utiliza afew.

Como se afirma en google: "En las versiones de los servicios de Google Play anteriores a 6.5, tenías que compilar todo el paquete de API en tu aplicación. En algunos casos, hacerlo era más difícil mantener el número de métodos en tu aplicación API de marco, métodos de biblioteca y su propio código) bajo el límite 65.536.

Desde la versión 6.5, puede recopilar de forma selectiva las API de servicio de Google Play en su aplicación. "

Por ejemplo, cuando su aplicación necesita play-services-maps, play-services-location. Sólo tiene que agregar dos apis en su archivo build.gradle en el 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 apis haga clic aquí

Para mí Actualizar Gradle works.Look para la actualización en Android Website a continuación, agregue en su build.gradle (Proyecto) como este

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

Entonces el proyecto de la sinc. Con el archivo del gradle más él pudo ser sucedido a veces debido a java.exe (en mi caso) apenas fuerza a matar java.exe del encargado de la tarea en Windows entonces vuelven a funcionar el programa

También puede probar esto:

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

Espero que ayude a alguien. Gracias

Puede activar "Ejecutar instantáneamente" en Android Studio para obtener soporte multidex.

Haga esto, funciona:

 defaultConfig { applicationId "com.example.maps" minSdkVersion 15 targetSdkVersion 24 versionCode 1 versionName "1.0" multiDexEnabled true } 
  • Eliminar todos los datos de todas las tablas de Sugar ORM
  • Sugar ORM para Android no puede encontrar el nombre de mi columna
  • Columnas únicas en Sugar ORM
  • Sugar ORM lanza excepción NoSuchTable en lollipop
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.