Me acaba de experimentar un torpe error en mi App.

En mi Nexus 5/7, con android 5.0.1/5.0.2, todo funciona bien.
Sin embargo, si intento ejecutar el mismo código en un dispositivo con una versión anterior (probado 4.4.4 y 4.3) me sale 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 añadir el soporte.v7 biblioteca como tarro, pero no hace ninguna diferencia.
Pero ya funciona en Lollipop dispositivos esto no tendría sentido de todos modos.

Podría ser que hay algún problema relativo a la Dalvik/Art cambiar?
O tal vez el hecho de que tuve que usar com.android.apoyo:multidex:1.0.0, ya que es un lugar de gran aplicación.

Actualización: he probado la eliminación de algunas dependencias para ver debajo de la 65k método de límite. Después de que la aplicación se ejecutó en 4.4.4 y 4.3 dispositivos.
Todo lo que hice para la habilitación de multidex apoyo fue la creación de

multiDexEnabled true

en el defaultConfig sección y añadiendo

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

a continuación en la sección de dependencias de mi generación.gradle.

Alguna idea de por qué esta causa estos problemas en las antiguas versiones de android?

  • crear nuevos lollipop proyecto en eclipse y agregar sus appcompat a este proyecto
  • ¿De dónde com.default.package.application.model.appcomponent vienen ?
  • He intentado crear un nuevo proyecto en Android Studio y la adición de todas las fuentes existentes, pero sigo teniendo el mismo problema. com.por defecto.paquete es sólo un marcador de posición para el nombre del paquete aquí.
InformationsquelleAutor user2700475 | 2015-03-13

3 Comentarios

  1. 43

    Me ha resuelto el problema mediante la adición de este para mi Clase de Aplicación.

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

    Parece ser necesaria para android versiones anteriores a la 5.

    • se le extiende la Aplicación de la clase por MultiDexApplication? «public class App se extiende MultiDexApplication «…así?
    • clase pública MyApplication se extiende MultiDexApplication { @Override protected void attachBaseContext(Contexto de la base) { super.attachBaseContext(base); MultiDex.instalar(this); }
    • Ahh…erróneamente upvoted es 🙁 todavía no trabajo para la pre-versiones de kitkat
    • Fijo que es para mí, sin embargo, si usted está utilizando Robolectric luego unittests probablemente va a fallar. He contestado una pregunta similar, herecon algunos enlaces adicionales y la información para resolver varias cuestiones en torno a Multidex.
  2. 12

    Hay tres maneras de cómo se va a trabajar.

    1. Como @FireZenk observó usted puede declarar esta clase como la aplicación en su AndroidManifest.xml.
    <application android:name="android.support.multidex.MultiDexApplication">

    Y en realidad con el android de grado de la versión del plugin 0.14.0 y herramientas de compilación de la versión 21.1.0 cuando se especifica el multiDexEnabled cierto en el defaultConfig, ProductFlavor, o BuildTypethen automáticamente se incluye la dependencia a la com.android.apoyo:multidex:1.0.0.
    Se puede comprobar que con el androidDependencie tarea o de ejecutar ./gradlew -q android:dependencias de comandos (android: es mi android módulo).
    Así que no es necesario añadir explícitamente el

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

    Si usted tiene la Aplicación extendida de la clase en su aplicación:

    1. Definir que su Aplicación se extiende MultiDexApplication clase, como:
    public class MyApplication extends MultiDexApplication {
    ...
    }

    o como @user2700475 publicado

    1. Tienen su Solicitud de invalidación de attachBaseContext:
    public class MyApplication extends Application {
    @Override
    protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);}
    }

    Con la ayuda de las respuestas anteriores me las arreglo para encontrar una solución a este problema. Sólo quiero poner todo esto junto.

    • Gracias el primer paso ayudó!
    • guardar mi tiempo 🙂
    • Me gustaría recomendar la 3ª opción, sin embargo, si usted está utilizando Robolectric luego unittests probablemente va a fallar. He contestado una pregunta similar, herecon algunos enlaces adicionales y la información para resolver varias cuestiones en torno a Multidex.
  3. 5

    Si usted no tiene/uso de la clase de Aplicación, usted puede poner este:

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

    En su etiqueta AndroidManifest.xml

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

    También obviamente, usted necesita agregar el Gradle dependencia:

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

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

Dejar respuesta

Please enter your comment!
Please enter your name here