tutorial support studio not minifyenabled developer could application android noclassdeffounderror multidex

support - proguard android



NoClassDefFoundError por debajo de SDK 21 (3)

Acabo de experimentar un error incómodo en mi aplicación.

En mi Nexus 5/7, con Android 5.0.1 / 5.0.2, todo funciona bien. Sin embargo, si intento ejecutar exactamente el mismo código en un dispositivo con una versión anterior (probado 4.4.4 y 4.3), obtengo el siguiente error:

03-13 13:49:41.140 21714-21714/? E/dalvikvm﹕ Could not find class ''com.default.package.application.model.Appcomponent'', referenced from method com.default.package.application.controller.DatabaseHandler.getScreenComponents 03-13 13:49:41.140 21714-21714/? E/dalvikvm﹕ Could not find class ''android.support.v7.app.ActionBarActivityDelegate$1'', referenced from method android.support.v7.app.ActionBarActivityDelegate.<init> 03-13 13:49:41.140 21714-21714/? E/dalvikvm﹕ Could not find class ''android.support.v7.app.ActionBarActivityDelegateHC'', referenced from method android.support.v7.app.ActionBarActivityDelegate.createDelegate 03-13 13:49:41.140 21714-21714/? E/dalvikvm﹕ Could not find class ''android.support.v7.app.ActionBarActivityDelegateBase'', referenced from method android.support.v7.app.ActionBarActivityDelegate.createDelegate 03-13 13:49:41.150 21714-21714/? E/dalvikvm﹕ Could not find class ''android.support.v7.app.ActionBarActivityDelegate$ActionBarDrawableToggleImpl'', referenced from method android.support.v7.app.ActionBarActivityDelegate.getDrawerToggleDelegate 03-13 13:49:41.150 21714-21714/? E/dalvikvm﹕ Could not find class ''android.support.v7.internal.view.SupportMenuInflater'', referenced from method android.support.v7.app.ActionBarActivityDelegate.getMenuInflater 03-13 13:49:41.150 21714-21714/? E/dalvikvm﹕ Could not find class ''android.support.v7.app.ActionBarActivityDelegate$ActionBarDrawableToggleImpl'', referenced from method android.support.v7.app.ActionBarActivityDelegate.getV7DrawerToggleDelegate 03-13 13:49:41.150 21714-21714/? E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.default.package, PID: 21714 java.lang.NoClassDefFoundError: android.support.v7.app.ActionBarActivityDelegateHC

Ya he intentado agregar la biblioteca support.v7 como jar, pero no hace ninguna diferencia. Pero como funciona en dispositivos Lollipop, esto no tendría sentido de todos modos.

¿Podría ser que hay algún problema relacionado con el cambio Dalvik / Art? O quizás el hecho de que tuve que usar com.android.support:multidex:1.0.0 ya que es una aplicación bastante grande.

Actualización: Intenté eliminar algunas dependencias para estar por debajo del límite del método de 65k. Después de eso, la aplicación se ejecutó en 4.4.4 y 4.3 dispositivos. Todo lo que hice para habilitar el soporte multidex fue configurar

multiDexEnabled true

en la sección defaultConfig y añadiendo

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

A continuación en la sección de dependencias de mi build.gradle.

¿Alguna idea de por qué esto causa estos problemas en las versiones anteriores de Android?


Hay tres formas en que esto va a funcionar.

  1. Como @FireZenk señaló, puede declarar esta clase como la aplicación en su AndroidManifest.xml .

<application android:name="android.support.multidex.MultiDexApplication">

Y, de hecho, con la versión 0.14.0 del plugin android grado y la versión 21.1.0 de las herramientas de compilación cuando se especifica multiDexEnabled true en defaultConfig, ProductFlavor o BuildTypethen, automáticamente incluye la dependencia de com.android.support:multidex:1.0.0. Puede verificarlo con la tarea de AndroidDependencie o ejecutar ./gradlew -q comando android: dependencies (android: es mi módulo de android). Así que no hay necesidad de agregar explícitamente el

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

Si ha ampliado la clase de aplicación en su aplicación:

  1. Defina que su aplicación extiende la clase MultiDexApplication, como:

public class MyApplication extends MultiDexApplication { ... }

o como @ user2700475 publicado

  1. Haga que su aplicación anule attachBaseContext:

public class MyApplication extends Application { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this);} }

Con la ayuda de respuestas anteriores, logro encontrar la solución a este problema. Solo quiero poner todo esto junto.


Resolví el problema agregando esto a mi clase de aplicación.

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

Parece ser necesario para las versiones de Android anteriores a 5.


Si no tiene / usa la clase de Aplicación, puede poner esto:

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

En su etiqueta en AndroidManifest.xml

Si ya ha implementado una clase de Aplicación, las respuestas de @ user2700475 + @sirvon son su mejor opción.

Obviamente, también es necesario agregar la dependencia de Gradle:

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

Más información sobre el problema de los métodos de 65k: https://developer.android.com/tools/building/multidex.html