Android ClassNotFoundException

Tengo un problema con una de mis aplicaciones y me preguntaba si alguien podría darme alguna idea de lo que podría causarlo.

Obtengo una ClassNotFoundException , la línea importante a continuación es

E/AndroidRuntime(21982): Caused by: java.lang.ClassNotFoundException: couk.doridori.goigo.customUI.GoBoardView in loader dalvik.system.PathClassLoader@446fc3d0 

Ahora esta aplicación ha estado en funcionamiento por más de un año y hace dos días tuve dos usuarios independientes que me contactaron sobre este tema, uno sobre un incendio forestal de HTC (2.1) y otro sobre un Samsung Galaxy S (?). Ahora no puedo volver a crear este problema en mis dispositivos (2.2 y 1.6) o un emulador (2.1) y realmente no puedo entender por qué esta clase no puede ser encontrada por el cargador de clases. ¡He pasado un tiempo buscando en Google sin éxito, y espero que alguien tenga algunos consejos! Solo parece ser cuando se carga una actividad que cuando se configura contentView, trata de inflar una vista personalizada llamada GoBoardView que amplía la clase View, esto es solo hacer un simple canvas y no está usando libs de terceros ni ningún otro otras clases que tendrían un nombre de paquete clash o cualquier cosa.

¡Por favor ayuda! En caso de que sea un problema de comstackción, estoy actualizando todos mis SDK y ADT a través de Eclipse, ya que estaba comstackndo contra 1.6 y usando el antiguo ADT, pero no tengo idea de si esto ayudará a que valga la pena intentarlo. ¡Cualquier consejo sería genial, gracias! (ver abajo para EDITAR)

 E/AndroidRuntime(21982): java.lang.RuntimeException: Unable to start activity ComponentInfo{couk.doridori.goigoFull/couk.doridori.goigoFull.Board}: android.view.InflateException: Binary XML file line #14: Error inflating class couk.doridori.goigo.customUI.GoBoardView E/AndroidRuntime(21982): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2596) E/AndroidRuntime(21982): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621) E/AndroidRuntime(21982): at android.app.ActivityThread.access$2200(ActivityThread.java:126) E/AndroidRuntime(21982): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932) E/AndroidRuntime(21982): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(21982): at android.os.Looper.loop(Looper.java:123) E/AndroidRuntime(21982): at android.app.ActivityThread.main(ActivityThread.java:4603) E/AndroidRuntime(21982): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime(21982): at java.lang.reflect.Method.invoke(Method.java:521) E/AndroidRuntime(21982): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) E/AndroidRuntime(21982): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) E/AndroidRuntime(21982): at dalvik.system.NativeStart.main(Native Method) E/AndroidRuntime(21982): Caused by: android.view.InflateException: Binary XML file line #14: Error inflating class couk.doridori.goigo.customUI.GoBoardView E/AndroidRuntime(21982): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:576) E/AndroidRuntime(21982): at android.view.LayoutInflater.rInflate(LayoutInflater.java:618) E/AndroidRuntime(21982): at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) E/AndroidRuntime(21982): at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) E/AndroidRuntime(21982): at android.view.LayoutInflater.inflate(LayoutInflater.java:407) E/AndroidRuntime(21982): at android.view.LayoutInflater.inflate(LayoutInflater.java:320) E/AndroidRuntime(21982): at android.view.LayoutInflater.inflate(LayoutInflater.java:276) E/AndroidRuntime(21982): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207) E/AndroidRuntime(21982): at android.app.Activity.setContentView(Activity.java:1629) E/AndroidRuntime(21982): at couk.doridori.goigoFull.Board.onCreate(Board.java:31) E/AndroidRuntime(21982): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) E/AndroidRuntime(21982): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2544) E/AndroidRuntime(21982): ... 11 more E/AndroidRuntime(21982): Caused by: java.lang.ClassNotFoundException: couk.doridori.goigo.customUI.GoBoardView in loader dalvik.system.PathClassLoader@446fc3d0 E/AndroidRuntime(21982): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) E/AndroidRuntime(21982): at java.lang.ClassLoader.loadClass(ClassLoader.java:573) E/AndroidRuntime(21982): at java.lang.ClassLoader.loadClass(ClassLoader.java:532) E/AndroidRuntime(21982): at android.view.LayoutInflater.createView(LayoutInflater.java:466) E/AndroidRuntime(21982): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565) E/AndroidRuntime(21982): ... 22 more 

EDITAR

De acuerdo, investigando algunos de los enlaces que los usuarios han comentado en respuesta a esta pregunta, parece que el uso del contexto incorrecto para las actividades de carga puede causar este problema. Me parece interesante porque uno de los dos informes de registro que he enviado tiene esta excepción precedida por

 W/ActivityManager( 1222): startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { flg=0x20000 cmp=couk.doridori.goigoFull/.Games } 

que es bastante explicativo – el problema es que no tengo idea de dónde se podría iniciar esta actividad desde donde usa un contexto de no actividad, así que estoy un poco perplejo, pensando que podría ser algo multitarea como una rareza y su regreso al primer plano de algo . Esto aparentemente puede causar problemas con el cargador de clases. Si esto sucediera en un teléfono de un usuario, no puedo ver por qué no puedo reproducir esto (y la mayoría de los otros usuarios tampoco).

Otra cosa que encontré a través de los enlaces, que es interesante, es que algunas personas han tenido problemas debido a una “instalación apk incorrecta”, que puede resolverse mediante una reinstalación, que he pedido a los usuarios que han tenido el problema que prueben (que no hace la diferencia). También parece que una vez que se encuentra el problema (que es el primer uso) será persistente.

No puedo dejar de notar que su nombre de actividad es couk.doridori.goigoFull.Board pero su clase de vista personalizada falta es couk.doridori.goigo.customUI.GoBoardView … parece que podría tener dos paquetes diferentes (goigo vs goigoFull).

¿Estás por casualidad haciendo cosas inteligentes con los proyectos de la biblioteca? Deberá tener mucho cuidado con los nombres de clase totalmente calificados en código y en el diseño xml …

(De lo contrario, agregue más información acerca de la configuración de su proyecto y también pegue el diseño XML que el layoutinflater se está ahogando)

Ya estaba discutiendo este problema aquí: Android: no se pudo instanciar la actividad / ClassNotFoundException pero no pudimos encontrar una respuesta definitiva … Sin embargo, la respuesta de John J Smith sobre el uso correcto de Context es interesante.

Algunas personas también resolvieron su problema en este hilo y dan algunas ideas.

Espero que esto ayude…

(Por cierto, estoy feliz de ver otro progtwigdor de juegos Go!)

Agregué un diseño personalizado y comencé a ver los mensajes de ClassNotFoundException después de solo en el paquete de aplicaciones firmado, pero la comstackción de desarrollo funcionaba muy bien. Estaba usando ProGuard y el nuevo diseño que agregué no estaba incluido en la lista “excluir” en la configuración de ProGuard. Incluí el diseño personalizado en la lista de exclusiones de ProGuard y eso me solucionó el problema.

A veces me encuentro con este problema cuando me desarrollo, usualmente después de cambiar los nombres de los paquetes. Una limpieza rápida del proyecto soluciona el problema para mí.

Hay otra cosa que causa “ClassNotFoundException”. Hace algún tiempo, el proyecto de Android comenzó a usar el directorio libs para las dependencias. Si un jar está en el directorio libs, está en el classpath automáticamente, por lo que no tiene que agregarlo en la configuración del proyecto. Sin embargo, los archivos jar en “libs” no pueden tener fonts adjuntas (lo cual es ridículo). Por lo tanto, si desea adjuntar una fuente, mueva un contenedor de “libs” a “lib” y agréguelo a classpath. Puede adjuntar la fuente. Pero he visto varias veces que esto desencadena ClassNotFoundExceptions en mis clases. Al mover el flask hacia atrás se resuelve el problema.

Tuve el mismo problema. Al final, el problema fue que faltaban tabulaciones en el diseño xml.

Antes de:

   

Luego, con la sangría, la classNotFoundException nunca volvió a aparecer, y el mapa se mostró correctamente:

   

Mi experiencia puede ser que el SDK de Android se actualizó y que el enlace a la biblioteca de soporte necesitaba ser actualizado. Simplemente vaya a la configuración del proyecto> android y señale de nuevo a la biblioteca de soporte.

Para mí, el problema fue un pequeño Caps-Fault. Busqué mi código durante horas, donde todo estaba bien. Alguna vez busqué en mis archivos .xml entonces, y ahí estaba:

En los archivos java, utilicé ViewPager y en una pequeña y sucia pieza del xml perdí mis tapas y escribí viewPager por error. Obvio, que este no pudo ser encontrado …

esto se debe a la nueva versión de eclipse … elimina todas las dependencias externas de buildpath y las agrega de nuevo usando la pestaña project-> properties-> builspath-> libraries. Ahora vuelva a agregar toda la biblioteca de dependencias y seleccione todos los componentes haciendo clic en ellos en el orden y en la pestaña del proyecto en project-> properties-> builspath-. esto funcionará bien!