NoClassDefFoundError para el código en una biblioteca Java en Android

Estoy experimentando un error muy a menudo entre mis usuarios. La aplicación se bloquea durante el inicio. Cuando se supone que la MainActivity está cargada, la VM aparentemente no puede encontrar la clase. No puedo entender por qué. La arquitectura de la aplicación es que hay un proyecto común que tanto mi versión libre y pro están utilizando. No sé si es relevante. Consulte el seguimiento de la pila a continuación. ¿Alguna idea?

java.lang.NoClassDefFoundError: com.android.common.MainActivity at com.mycompany.myapp.Splash.onCreate(Splash.java:23) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) at android.app.ActivityThread.access$1500(ActivityThread.java:117) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:130) at android.app.ActivityThread.main(ActivityThread.java:3687) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.ClassNotFoundException: com.android.common.MainActivity in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar:/data/app/com.android.pro-1.apk] 

Edit: Gracias por el comentario de abajo, Richard. Ahora he cambiado com.android.Splash a otra cosa. De todos modos, no era el verdadero nombre de clase. Mi error…!

Tuve el mismo problema, hice lo siguiente para solucionar el problema.

  1. Vaya a "Propiedades" del proyecto.
  2. Seleccione "Java Build Path"
  3. Seleccione la pestaña "Ordenar y exportar"
  4. Debería ver las rutas de acceso y las dependencias "src" y "gen" del proyecto seleccionado aquí.
  5. El orden cómo enumeraron era primero "src" y entonces "gen" la trayectoria
  6. Los cambio, por lo que la carpeta "gen" se construye antes de que el "src"

Gen – código automatizado en proyecto (de dependencias y referencias)
Src – código fuente en el proyecto

No era necesario reiniciar el Eclipse. Acaba de empezar a funcionar.

Honestamente nunca he probado "Herramientas de Android> Fix Project Properties", a veces puede estar haciendo lo mismo. No sé, lo hice más arriba después de ver el mensaje de error, pensando que algo está mal con las rutas de construcción.


Editar


Más tarde no fue suficiente, yo estaba recibiendo el error de nuevo. Entonces "comprobé" todas las dependencias enumeradas en esa visión. Ahora funciona de nuevo. Hasta aquí todo bien. Mantendré esta actualización si falla de nuevo.

FYI : en mi último intento, traté de "Herramientas de Android> Fix Project Properties", pero no funcionó para mí.

Actualmente estoy usando SDK 20.0.3 y ninguna de las soluciones anteriores funcionó para mí.

Pude hacer que las cosas funcionaran

  • Clic derecho en el proyecto de Android
  • A continuación, seleccione Generar ruta -> Fuente de vínculo para abrir el diálogo Fuente de vínculo.
  • A continuación, especificé la carpeta 'src' del proyecto Java y le di un nombre distinto del predeterminado de 'src' (por ejemplo, 'src2').
  • Ahora puede hacer clic con el botón derecho del ratón -> eliminar la nueva carpeta 'src2'.

Esto trajo estos archivos de clase Java creados que fueron compilados para la VM de Dalvik en lugar de la VM de Java cuando se construyó el proyecto de Android. Esto permitió que los archivos de clase Java en el archivo jar de la Biblioteca de Android pasaran a través de dexing cuando se creó el proyecto .apk de Android. Ahora, cuando se ejecutó la aplicación, se encontraron las clases de proyecto Java en lugar de lanzar Java.lang.NoClassDefFoundError.

Si desea utilizar un archivo jar en lugar de vincular la fuente, entonces tendrá que crear un proyecto de Biblioteca Android. (Un proyecto de Android con 'is library' está activado en Propiedades -> Android.) Deberá vincular el origen del proyecto Java al proyecto de la Biblioteca de Android como se describe anteriormente o copiar los archivos de origen de la carpeta 'src' de El Proyecto Java a la carpeta 'src' del proyecto de la Biblioteca de Android. Crea el proyecto de la Biblioteca de Android. A continuación, podrá copiar el archivo de jar de Android Project que se creó en la carpeta 'libs' de la carpeta Android porque los archivos de clase en él fueron compilados para la VM de Davlik en lugar de la VM de Java cuando se construyó el proyecto de Android. Esto permite que los archivos de clase Java en el archivo jar de la biblioteca de Android pasen a través de dexing cuando se crea el proyecto .apk de Android. Ahora, cuando se ejecuta la aplicación, se encontrarán las clases de proyecto Java en lugar de lanzar Java.lang.NoClassDefFoundError.

Trate de ir a Project -> Propiedades -> Java Build Path -> Pedido y exportación y asegúrese de que las bibliotecas privadas de Android se comprueban para su proyecto y para todos los otros proyectos de biblioteca que está utilizando. Tengo la solución siguiendo el siguiente enlace NoClassDefFoundError Android Project ?

Sólo en caso de que ayuda a alguien, me enfrenté al mismo problema. Mi archivo jar estaba bajo el directorio libs y el jar se agregó a la ruta de construcción. Sin embargo, estaba lanzando esa excepción.

Acabo de limpiar el proyecto y funcionó para mí.

Eclipse -> Proyecto -> Limpieza -> Seleccione el proyecto y limpie

He intentado todas las soluciones antes mencionadas, pero no funcionó para mí, Esto es lo que hice para hacerlo hecho proyecto-> config construir ruta-> orden y exportación-> mover el proyecto dependiente en la parte superior

Este error también se genera cuando crea una aplicación que utiliza la API de Google (como Google Maps), pero la ejecuta en un dispositivo que se dirige a la API de Android.

Encontré este NoClassDefFoundError cuando utilicé java.nio.charset.StandardCharsets.

La razón es que StandardCharsets no ha existido hasta JRE 1.7. Si hago que la versión de compilación de java se establezca en 1.7, Eclipse se quejó de que "Android requiere el nivel de cumplimiento de compilador 5.0 o 6.0". Así que lo arreglé haciendo clic con el botón derecho del ratón en el nombre del proyecto-> Herramientas de Android-> Propiedades del proyecto de corrección. Se compila con JRE1.6.

Sin embargo, porque StandardCharsets no ha existido hasta 1.7. Informó NoClassDefFoundError cuando lo corrí.

No he llegado a darse cuenta de esto hasta después de probar un montón de otros métodos, incluyendo la reinstalación de JDK. La verdadera razón es claramente contada por el significado de NoClassDefFoundError: La clase no se puede encontrar en tiempo de ejecución aunque pasó compilación.

Conclusión general es que mientras Android no funciona con JRE 1.7, si utiliza cualquier nueva característica proporcionada desde 1.7, se encontrará con este error.

Mi solución es que he copiado los código fuente en mi código!

La descripción de NoClassDefFoundError es, desde la etiqueta SO:

El error Java lanzado si la máquina virtual de Java o una instancia de ClassLoader intenta cargar en la definición de una clase (como parte de una llamada de método normal o como parte de crear una nueva instancia utilizando la nueva expresión) y ninguna definición de la clase podría ser encontrado. La definición de clase buscada existía cuando se compilaba la clase en ejecución, pero ya no se podía encontrar la definición.

O mejor:

NoClassDefFoundError en Java se produce cuando Java Virtual Machine no puede encontrar una clase en tiempo de ejecución que estuviera disponible durante la compilación.

Desde esta página. Compruébelo, hay algunas maneras de solucionar el error. Espero que ayude.

Para mí este problema estaba relacionado con la API que estaba utilizando no se está desplegando. Por ejemplo, utilicé una ZSDK_API.jar como referencia.

Para corregir el problema tuve que hacer clic derecho en el proyecto y seleccionar propiedades. Desde JAVA BUILD PATH, tuve que añadir la API que no estaba siendo desplegada. Esto era extraño ya que la aplicación estaba lanzando MainActivity clase no encontrada y en realidad el error fue causado por la clase DiscoveryHandler no se encuentra.

Espera que esto ayude a alguien.

En mi caso, estaba tratando de agregar una clase java normal (de un proyecto java normal) compilado con jre 1.7 a un proyecto de la aplicación de Android compilado con jre 1.7.

La solución fue recompilar esa clase normal de java con jre 1.6 y añadir referencias al proyecto de la aplicación android (compilado con jre 1.6 también) como de costumbre (en el orden de las fichas y la exportación asegúrese de comprobar la clase, el proyecto, etc).

El mismo proceso, cuando se utiliza una biblioteca de android para hacer referencia a las clases java normales externas.

No sé qué hay de malo con jre 1.7, al compilar clases java normales de un proyecto java normal e intentar hacer referencia a ellas en los proyectos de la aplicación android o android.

Si no usas las clases java normales (de un proyecto java normal) no necesitas rebajar a jre 1.6.

Conoci a NoClassDefFoundError para una clase que existe en mi proyecto (no una clase de biblioteca). La clase existe, pero tengo NoClassDefFoundError. En mi caso, el problema era el soporte multidex. El problema y la solución está aquí: Android Multidex y bibliotecas de soporte

Se obtiene este error para las versiones de Android inferiores a 5.0.

Otra idea. Por ejemplo, usted tiene clase derivada de "android.support.v4.app.Fragment".

Sin embargo, usted cometió un error y lo heredó de "android.app.Fragment". A continuación, tendrá este error en los dispositivos Android 2.

Acabo de averiguar algo con este error.

Sólo asegúrate de que el archivo jar de la biblioteca contenga la clase R compilada en el paquete android.support.v7.appcompat y copie todo el res del soporte "proyecto" de appcompat v7 en tu carpeta ANDROID_SDK_HOME / extras / android / support / v7 / appcompat.

Utilizo Netbeans con el complemento de Android y esto solucionó mi problema.

Supongo que no se especifica el destino de javac al crear la biblioteca común, por lo que javac utiliza automáticamente el último destino disponible, que es probable 1.7 (Java7) o 1.8 (Java8).

Ya se ha dicho que

Android requiere nivel de cumplimiento del compilador 5.0 o 6.0

dx de las herramientas de compilación de Android <19.0.0 no es capaz de convertir Java7 (o superior) bytecode a bytecode Dalvik.

Por lo tanto, utilice una versión de herramientas de compilación> = 19.0.0 o utilice javac con -target 6 , modificando por ejemplo su hormiga build.xml así:

 <javac srcdir="src/" destdir="build/" target="6" /> 

He arreglado este problema mediante la adición de la ruta del proyecto de la biblioteca en project.propertied manualmente. Algunos como eclipse no agregó esta entrada automaticvally junto con "agregar proyecto". Por lo que el punto donde la aplicación estaba tratando de referir cualquier componente dentro del proyecto de lib estaba cayendo.

Usted también puede intentar la misma cosa. App dependecy en project.properties como

Android.library.reference.1 = …. \ android-sdks \ extras \ google \ google_play_services \ libproyecto / google-play-services_lib

y correr .

Jars solía estar en la lib / carpeta, ahora están en libs / Si utiliza lib, puede mover sus jarras de lib a libs, y eliminar las dependencias de las propiedades del proyecto / java construir ruta, ya que Android ahora los encontrará automáticamente .

Para mí, el problema era que la biblioteca referenciada fue construida usando java 7. He resuelto esto reconstruyendo usando el 1.6 JDK.

Algún tiempo java.lang.NoClassDefFoundError: error aparece cuando se usa ART en lugar de tiempo de ejecución de Dalvik. Para cambiar el tiempo de ejecución, vaya a la opción de desarrollador -> Seleccionar tiempo de ejecución -> Dalvik.

Si ninguno de los anteriores funciona (como me pasó a mí), y está utilizando como biblioteca otro proyecto en Eclipse.

Hazlo: Haz clic con el botón derecho del ratón en el proyecto -> Propiedades -> Android -> Biblioteca -> Agregar

Eso lo hizo por mí! Adición de un proyecto como biblioteca (Propiedades del proyecto)

Actividad de nuevo añadido a manifest.I intentó en mi manifiesto, entonces la aplicación funcionó.

  <activity android:name="com.xxx.xxx.MainActivity" 

Intenta ir a

  • Haga clic en el proyecto
  • Ruta de construcción de Java
  • Fuente
  • Lado derecho -> botón Añadir carpeta
  • Carpeta libs seleccionada y Aceptar

Espero que ayude.

En Android Studio:

1) Agregue multiDexEnabled = true en su configuración predeterminada

2) Añadir compilación com.android.support:multidex:1.0.0 en sus dependencias

3) La Application class extiende MultiDexApplication lugar de simplemente Application

Soluciones:

  1. Producto en la lista
  2. Comprobar la orden de exportación
  3. Habilitar Multi Dex
  4. Compruebe el nivel de las vistas de api en el diseño. Me enfrenté al mismo problema con searchView. Tengo comprobar el nivel de la api mientras que agrega searchview pero agregado implementa SearchView.OnQueryTextListener al archivo de la clase.

1) En el archivo de Manifiesto mencione su nombre de actividad y acción para él y también categoría. 2) En su actividad, mencione su contenido de inicio y mencione su ID de visualización en la actividad.

  • Runtime Execption java.lang.NoClassDefFoundError: retrofit2.Platform en Android
  • NoClassDefFoundError en la biblioteca de Caligrafía
  • Mejor registrador de Android para iniciar sesión en el archivo
  • Java.lang.NoClassDefFoundError con todos los R classess cuando se utiliza la biblioteca de Android
  • Excepción de mapas de Android java.lang.NoClassDefFoundError: android.security.MessageDigest
  • ¿Cómo arreglar NoClassDefFoundError en twitter4j usando Android Studio?
  • Problemas de inicialización de la clase cargando java.util.logging.LogManager en Android Dalvik VM
  • Gson NoClassDefFoundError después de que las herramientas ADT y SDK se actualicen a v17
  • Java.lang.NoClassDefFoundError en versiones anteriores de Android SDK
  • Android JavaCV dilema, NoClassDefFoundError lanzado dentro del método 'dibujar' cuando se crea IplImage
  • ERROR: java.lang.NoClassDefFoundError: android.support.v4.content.LocalBroadcastManager
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.