support sirve que powder para not gel failed could application android gradle android-gradle multidex android-multidex sugarorm

android - sirve - multidex in kotlin



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

Cuando las referencias de su aplicación superan los 65.536 métodos, encuentra un error de compilación que indica que su aplicación ha alcanzado el límite de la arquitectura de compilación de Android

Soporte Multidex anterior a Android 5.0

Las versiones de la plataforma anteriores a Android 5.0 (API nivel 21) usan el tiempo de ejecución Dalvik para ejecutar el código de la aplicación. Por defecto, Dalvik limita las aplicaciones a un solo archivo de código de bytes classes.dex por APK. Para evitar esta limitación, puede agregar la biblioteca de soporte multidex a su proyecto:

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

Soporte Multidex para Android 5.0 y superior

Android 5.0 (API nivel 21) y superior utiliza un tiempo de ejecución llamado ART que admite de forma nativa cargar múltiples archivos DEX desde archivos APK. Por lo tanto, si su minSdkVersion es 21 o superior, no necesita la biblioteca de soporte multidex .

Evita el límite de 64K

  • Elimine el código no utilizado con ProGuard: habilite la reducción del código

Configurar multidex en la aplicación para

Si su minSdkVersion está configurado en 21 o superior, todo lo que necesita hacer es configurar multiDexEnabled en verdadero en su archivo build.gradle de nivel de módulo

android { defaultConfig { ... minSdkVersion 21 targetSdkVersion 28 multiDexEnabled true } ... }

si su minSdkVersion está configurado en 20 o menos, entonces debe usar la biblioteca de soporte multidex

android { defaultConfig { ... minSdkVersion 15 targetSdkVersion 28 multiDexEnabled true } ... } dependencies { compile ''com.android.support:multidex:1.0.3'' }

Anule la clase de aplicación, cámbiela para extender MultiDexApplication (si es posible) de la siguiente manera:

public class MyApplication extends MultiDexApplication { ... }

agregar al archivo de manifiesto

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp"> <application android:name="MyApplication" > ... </application> </manifest>

Estoy creando una aplicación con la biblioteca SugarORM pero cuando intento compilar el proyecto para API 17 (no verifiqué otras) muestra un error de compilació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: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 elimino la dependencia de SugarORM Gradle, funciona bien para ambos dispositivos v4.2.2 y v5.0.


En android / app / build.gradle

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 configuración predeterminada:

multiDexEnabled true

esto funciona para mi


Este error también puede ocurrir cuando carga todas las API de servicios de Google Play cuando solo usa algunas.

Según lo declarado por Google: "En las versiones de los servicios de Google Play anteriores a la 6.5, tenía que compilar todo el paquete de API en su aplicación. En algunos casos, hacerlo dificultaba mantener la cantidad de métodos en su aplicación (incluyendo API de marco, métodos de biblioteca y su propio código) por debajo del límite de 65,536.

A partir de la versión 6.5, puedes compilar selectivamente las API del servicio 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 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 vez de:

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

Para obtener una documentación completa y una lista de las API de servicios de Google Play, haga clic here


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

Use recursos de reducción y reducción 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 } }


Haz esto, funciona:

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


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

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

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

1. Primero agregue esta dependencia

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

en su build.gradle.

2. Último y segundo, agregue uno en esta línea a continuación a su aplicación en 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 también funcionará en la versión inferior .. :) Happy coding


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

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

luego sincronice el proyecto con el archivo gradle y, a veces, podría suceder debido a java.exe (en mi caso) simplemente fuerce kill java.exe desde el administrador de tareas en Windows y luego vuelva a ejecutar el programa


Recibí este mensaje de error porque al codificar la versión de compilación de actualización automática de mi proyecto 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'' }


Solo un comentario lateral, antes de agregar soporte para multidex, asegúrese de no agregar dependencias innecesarias.

Por ejemplo, en la guía oficial de análisis de Facebook

Indican claramente que debe agregar la siguiente dependencia:

implementation ''com.facebook.android:facebook-android-sdk:[4,5)''

que en realidad es todo el FacebookSDK, por lo que si necesita, por ejemplo, solo Analytics, debe reemplazarlo por:

implementation ''com.facebook.android:facebook-core:5.+''

Opciones de SDK parcial de Facebook


También puedes probar esto:

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

Espero que ayude a alguien. Gracias


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

Como se sugiere, puede utilizar 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 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>

anular 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 tratar de eliminar el código no utilizado con ProGuard : configure los ajustes de ProGuard para que su aplicación ejecute ProGuard y asegúrese de tener habilitada la reducción para las versiones de lanzamiento.


puedes habilitar "Instant Run" en Android Studio para obtener soporte multidex.


Soporte Multidex anterior a Android 5.0

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

Soporte Multidex para Android 5.0 y superior

Android 5.0 (API nivel 21) y superior utiliza un tiempo de ejecución llamado ART que admite de forma nativa cargar múltiples archivos DEX desde archivos APK. ART realiza la precompilación en el momento de la instalación de la aplicación, que busca archivos classN.dex y los compila en un único archivo .oat para que el dispositivo Android lo ejecute. 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 verdadero en su build.gradle de nivel de módulo

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