android - java.lang.ClassNotFoundException en la aplicación en funcionamiento
(22)
He creado y publicado mi primera aplicación de Android. Es muy sencillo. Funciona bien en el simulador y algunos teléfonos, pero obtengo este error:
java.lang.RuntimeException: Unable to instantiate application cz.teamnovak.droid.Novak ESC Track guide: java.lang.ClassNotFoundException: cz.teamnovak.droid.Novak ESC Track guide in loader dalvik.system.PathClassLoader[/data/app/cz.teamnovak.droid-1.apk]
at android.app.ActivityThread$PackageInfo.makeApplication(ActivityThread.java:649)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4232)
at android.app.ActivityThread.access$3000(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2071)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: cz.teamnovak.droid.Novak ESC Track guide in loader dalvik.system.PathClassLoader[/data/app/cz.teamnovak.droid-1.apk]
at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
at android.app.Instrumentation.newApplication(Instrumentation.java:942)
at android.app.ActivityThread$PackageInfo.makeApplication(ActivityThread.java:644)
... 11 more
¿Alguna idea de lo que puede causar esto?
¿Estás usando tu código en diferentes entornos, digamos, usando Dropbox o algo así? ¿Usas alguna biblioteca o similar? Tuve muchos problemas después de compartir los archivos del espacio de trabajo y lo solucioné reconfigurando las dependencias. Espero que ayude a alguien!
A veces tengo este problema con eclipse. Lo que me ha corregido es ir a Project Properties / Android y cambiar la API de destino de compilación a una versión diferente y volver a publicarla. Encontraré que lo corrigió, luego puedo volver a cambiarlo al objetivo de compilación deseado.
o
Es posible que deba verificar su proguard.cfg .
Suponiendo que haya vinculado sus bibliotecas correctamente y que los proyectos de su biblioteca tengan el código que necesita marcar para exportar, el próximo paso que quizás quiera hacer es verificar su configuración de Proguard y asegurarse de no estar eliminando las clases que necesita.
Estaba luchando con esto bastante después de que mi aplicación funcionara yendo directamente al emulador o dispositivo de eclipse. El problema que tenía era después de que se publicó la aplicación (es decir, pasó por proguard) y se ejecutaba en el dispositivo faltaban las clases que estaban incluidas en el proyecto. Estaban siendo despojados de alguna manera.
Mi problema puede haber sido causado cuando intenté usar IntelliJ y volví a eclipsar.
Aquí está el archivo de proguard que funcionó para mí:
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembers class * {
native <methods>;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
Algo así sucedió cuando cambié el objetivo de compilación a 3.2. Después de buscar, encontré que una había llamado a la carpeta jar lib "lib" en lugar de "libs". Acabo de renombrarlo a libs y actualicé las referencias en la ruta de compilación de Java y todo estaba funcionando de nuevo. Tal vez esto ayude a alguien ...
Asegúrese de que android:hasCode
no esté configurado como false
en su archivo de manifiesto. ¡Esto es lo que me solucionó el problema!
Bueno, tienes una java.lang.ClassNotFoundException. Eso significa que falta una clase en el tiempo de ejecución de la aplicación. Debería verificar si ha agregado todas sus bibliotecas a la ruta de compilación.
Haga clic derecho en su proyecto -> propiedades -> ruta de compilación java -> bibliotecas, agregue sus bibliotecas o cree una que contenga sus clases y habilite la exportación de órdenes para sus libs.
Compruebe si el nombre del paquete en la clase coincide con el nombre del paquete en el archivo de manifiesto. Esto funcionó para mí
El error de clase no encontrada muestra que faltan sus archivos de clase. Diríjase a Propiedades> Ruta de compilación de Java y agregue su paquete que contiene sus archivos java a la pestaña Fuente si no se encuentra. Luego crea tu proyecto. Esto creará los archivos .class faltantes.
En mi caso, el ícono de la aplicación estaba causando el error:
<application
android:name="com.test.MyApp"
android:icon="@drawable/myicon"
¿Por qué? Debido a que puse el icono solo en la carpeta "dibujable", y estoy usando un dispositivo de prueba de alta resolución, por lo que se ve en la carpeta "drawable-hdpi" para el icono. El comportamiento predeterminado para todo lo demás es utilizar los íconos de "dibujable" si no están en "drawable-hdpi". Pero para el ícono de lanzamiento esto no parece ser válido.
Entonces la solución es poner una copia del ícono (con el mismo nombre, por supuesto) en "drawable-hdpi" (o cualquiera de las resoluciones admitidas por los dispositivos).
En mi caso, sucede cuando moví mi actividad de inicio a un paquete diferente sin actualizar el archivo de manifiesto.
En mi caso, tuve que agregar android:name=".activity.SkeletonAppActivity"
lugar de android:name=".SkeletonAppActivity"
en el archivo de manifiesto para la actividad principal. SkeletonAppActivity
estaba en un paquete diferente de la clase de aplicación. ¡Buena suerte!
Esta es mi observación con respecto al Error. Recientemente actualicé el ADT a 22.0.1. Recibo el siguiente error cuando importé mis proyectos anteriores "E / AndroidRuntime (24807): Causado por: java.lang.ClassNotFoundException: com.sherl.sherlockfragmentsapp.StartActivity en el cargador dalvik.system.PathClassLoader [/ data / app / com. sherl.sherlockfragmentsapp-1.apk] "
Luego cambié "Propiedades-> Java Build Path-> Order and Export" de la siguiente manera [No se puede agregar la imagen debido a las reglas del foro]
- Librerías privadas de Android - verificadas
- Android 4.2.2: sin marcar
- Dependencias de Android: verificado
- / src - seleccionado
- / gen - seleccionado
Resolvió el problema. Espero que esto sea para ayudarlos chicos.
Para mí, ''cerrar'' la aplicación de Eclipse y ''reabrir'' el proyecto resolvió el problema.
Recibí este error cuando ejecuté mi aplicación en versiones anteriores de Android. Pensé que SearchView era retrocompatible con Android 1.5, pero fue creado en 3.0. Eliminé su referencia del código y funcionó.
Recientemente invertí algo de tiempo en un informe de error similar que me llegó a través de los informes de error de Play Store.
Una visión general de algunas causas posibles.
Biblioteca faltante
Dado que mi aplicación se prueba antes del lanzamiento y el problema solo ocurre aprox. una vez a la semana estoy bastante seguro de que el mío no es un problema de la biblioteca. Debería pensar en esta dirección si falla una compilación en su sistema e instalar la aplicación utilizando ADB provoca un error al iniciarse.
Limpiar y construir su proyecto podría ayudar si se trata de un problema local y asegúrese de tener la versión más reciente de SDK e IDE.
En estos casos, una clase de su aplicación o una biblioteca utilizada en su aplicación desencadena el error. Esta es una diferencia importante con el siguiente punto donde no se encuentra el punto de entrada (actividad con intención principal o su servicio personalizado / objeto de aplicación) de su aplicación.
Si es así, investiga las siguientes preguntas y respuestas que he seleccionado. Todos ellos tienen una respuesta aceptada.
no se pudo crear una instancia de la aplicación - ClassNotFoundException Actividad de Android ClassNotFoundException - se intentó todo Android ClassNotFoundException
Actividad principal o aplicación no encontrada
Desconfiguración de AndroidManifest.xml
Más como un error de principiante fue citado aquí antes en una de las respuestas que habla sobre el archivo de manifiesto de Android.
Importante aquí es que este error siempre bloquearía la carga de su aplicación. Debe construir sin embargo, pero se bloquea en el primer uso.
He editado esa respuesta, esta es la parte importante:
¡No use el atributo android: name! a menos que haya implementado un objeto Aplicación personalizado.
El atributo de aplicación: nombre no tiene nada que ver con el nombre de tu aplicación. Este es el nombre de una clase específica para cargar como su instancia de Aplicación. Es por eso que obtendrías la ClassNotFoundException si esa clase no existiera.
Para el nombre de la aplicación, use el atributo android: label en este mismo nodo de aplicación.
Suprimido: java.io.IOException: no se puede abrir el archivo DEX
¡Ahora se está poniendo interesante! Esto era parte del seguimiento de la pila registrado en mi caso a través de la tienda de juegos. Así que puedo crear una compilación y ejecutarla en mi dispositivo sin errores (mientras que todos los errores previos evitarían cualquier ejecución).
Se hizo un comentario importante a la siguiente pregunta de SO: Aplicación de Android ClassNotFoundException, no se puede crear una instancia de la aplicación
Parece que el sistema tiene problemas para abrir el archivo dex de la aplicación java.io.IOException: no se puede abrir el archivo DEX, esto es antes de que se carguen las clases, por lo que no tiene nada que ver con la definición de la clase de aplicación en el Manifiesto - user2046264 27 de febrero de 14 a 2:25
La parte importante aquí es la IOException suprimida. Esto indica que una operación IO falló. Ejemplos de operaciones IO son llamadas de red y de almacenamiento.
Otro informe de error que va en esa dirección se incluye en Android a No se puede crear una instancia de la aplicación java.lang.ClassNotFoundException: donde se menciona la función del almacenamiento externo proporcionado por una tarjeta sd.
Algunas otras preguntas similares indican que esto puede ser un error del usuario. "/ mnt / asec / ..." indica que la aplicación se está ejecutando desde la tarjeta sd. Si se elimina la tarjeta SD, podría causar este error. Las aplicaciones de terceros o los dispositivos rooteados probablemente puedan mover una aplicación a la tarjeta SD incluso si no está permitida por el manifiesto.
Si está desesperado, lea todas las respuestas a esa pregunta, ya que también hay otras rutas enumeradas. Piense en la especificación completa del paquete, el uso de singletons y más.
El punto aquí es que tanto la red como el almacenamiento son IO.
Para mi caso específico, verifiqué todos los dispositivos que informaron este error y encontré que todos tienen soporte de almacenamiento externo. De modo que un usuario podría instalar la aplicación y moverla a un almacenamiento externo, retirar la tarjeta SD y obtener este error (solo una teoría, no probada).
Para obtener más información sobre las opciones de installLocation, consulte http://developer.android.com/guide/topics/data/install-location.html
También consideré la red. En la parte superior de la página de detalles de seguimiento de la pila, en los informes de Play Store obtendrá una descripción general de las ocurrencias del error a lo largo del tiempo.
Me pareció que el error ocurrió más cerca de las veces que se lanzó una actualización. Esto podría respaldar la teoría de que el usuario obtiene una actualización de la aplicación, descarga esta actualización que de alguna manera se corrompe. La instalación va bien, pero la primera ejecución de la aplicación da como resultado el error (una vez más solo una teoría, no probada).
Otros recursos
Finalmente, 2 recursos que no son SO que podrían ayudarlo:
https://groups.google.com/forum/#!topic/android-developers/JC7_qqwBRjo https://code.google.com/p/android/issues/detail?id=72121
Sé que esta pregunta ha sido respondida, y probablemente no fue el caso. Pero estaba recibiendo este error, y pensé que publicaría por qué en caso de que pueda ser útil para cualquier otra persona.
Así que estaba recibiendo este error, y después de varias horas avergonzado me di cuenta de que había desactivado ''Proyecto> Crear automáticamente''. Entonces, aunque no tenía errores de compilación, esta es la razón por la que recibí este error. Todo comenzó a funcionar tan pronto como me di cuenta de que en realidad no estaba construyendo el proyecto antes de implementarlo: - /
Bueno, esa es mi historia :-)
Sí, tuve exactamente el mismo problema. Fue porque especifiqué el atributo android:name
en el nodo de la aplicación en el archivo de manifiesto.
Su archivo de manifiesto de Android probablemente se parece a esto:
<application
android:name="Novak ESC Track guide"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:description="@string/help_text" >
¡No use el atributo android:name
! a menos que haya implementado un objeto Aplicación personalizado.
El atributo de application:name
no tiene nada que ver con el nombre de tu aplicación. Este es el nombre de una clase específica para cargar como su instancia de Application
. Es por eso que obtendrías la ClassNotFoundException
si esa clase no existiera.
Para el nombre de la aplicación, use el atributo android:label
en este mismo nodo de aplicación.
Eliminarlo y debería funcionar:
<application
android:icon="@drawable/icon"
android:label="@string/app_name"
android:description="@string/help_text" >
Tenía el mismo error: java.lang.RuntimeException: no se puede instanciar la actividad (classnotfound) PRIMERO intento de cambiar la plataforma de compilación (2.3.3 -> 2.2 -> 2.3.3) funcionó para mí.
Tenemos un par de proyectos donde este problema se registraba de vez en cuando en Android Market. Encontré los siguientes problemas en los manifiestos:
Si el nombre del paquete es com.prueba, los nombres de las actividades deben ser
.ActivityName
(con un punto.ActivityName
), no soloActivityName
.Para algunas clases, las que aparecían en los registros con mayor frecuencia, el nombre de la clase se especificaba como
com.test.Name
mientras que debería haber sido.Name
.
Supongo que muchas implementaciones de Android manejan estos problemas menores con éxito (esta es la razón por la cual la excepción nunca ocurrió en las pruebas), mientras que otros pocos lanzan la excepción.
Tengo el mismo problema en Android OS versión 4.1.2
agregue la siguiente línea a su AndroidManifest.xml
debajo de android:label="@string/app_name"
en la etiqueta de la aplicación
android:name="android.support.multidex.MultiDexApplication"
Esto puede ayudar a alguien con el mismo problema.
Tuve una ClassNotFoundException que apuntaba a mi clase de aplicación.
Encontré que me perdí el constructor de Java en mi .project
Si falta algo en su buildSpec , cierre Eclipse, asegúrese de que todo esté en su lugar e inicie Eclipse nuevamente
<buildSpec>
<buildCommand>
<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.android.ide.eclipse.adt.ApkBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
Tuvo este tipo de problema hoy después de actualizar a la última ADT / SDK. Me tomó bastante tiempo. Comprobé que utilicé google-apis (para mapas), uses-library, limpié el proyecto, etc.
Eliminar el .project y agregar uno nuevo (crear un nuevo proyecto de Android) finalmente lo resolvió.
Utilicé un método de supertipo que se declaró ''final'' en una de mis actividades (específicamente el método ''isResumed ()''). El error real se muestra en LogCat solo después de reiniciar mi dispositivo de desarrollo.