pie - Android no puede crear una instancia de la aplicación java.lang.ClassNotFoundException:
android pie (4)
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 sdcard. Si se quita la sdcard podría causar este error. Las aplicaciones de terceros o los dispositivos rooteados probablemente pueden mover una aplicación a la sdcard incluso si el manifiesto no lo permite.
Estoy trabajando en la aplicación que es host en el mercado de Android. A veces (una vez al mes) recibí un informe de colisión:
No se puede crear una instancia de la aplicación java.lang.ClassNotFoundException
Las descargas de aplicaciones están entre 10.000 y 50.000. No sé por qué estas excepciones se producen en algunos dispositivos, no en todos (lo probé en 3 dispositivos diferentes y no pude volver a producirlo al final).
Leí artículos / sugerencias en diferentes foros de Android sobre el tema, pero no logré resolverlo. ¿Alguien enfrenta un problema similar y me sugiere qué debo hacer?
Nota: estoy extendiendo clase de aplicación como esta
public class MyApplication extends Application {
}
Lo registro en el archivo manifest.xml asi
<application android:icon="@drawable/app_icon"
android:label="@string/my_app_name" android:name="MyApplication">
Traza de la pila:
java.lang.RuntimeException: Unable to instantiate application com.xyz.MyApplication java.lang.ClassNotFoundException: com.xyz.MyApplication in loader dalvik.system.PathClassLoader[/mnt/asec/com.xyz-1/pkg.apk]
at android.app.ActivityThread$PackageInfo.makeApplication(ActivityThread.java:650)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4238)
at android.app.ActivityThread.access$3000(ActivityThread.java:126)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2076)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4633)
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:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: com.xyz.MyApplication in loader dalvik.system.PathClassLoader[/mnt/asec/com.xyz-1/pkg.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:645)
No sé por qué la aplicación falla en algunos dispositivos, no todos.
Creo que el problema es con getApplication () que he usado en 10 lugares diferentes. Así que he usado el patrón de singleton para resolver esto.
public class MyApplication extends Application {
private static MyApplication me;
@Override
public void onCreate() {
super.onCreate();
me = this ;
}
public static MyApplication getInstance() {
return me;
}
}
Ahora he usado getApplication () como este
MyApplication application = MyApplication.getInstance();
insted de
MyApplication application = (MyApplication) getApplication();
He cargado la versión fija en el mercado y ahora estoy esperando si hay más problemas de este tipo. Si todo va perfecto (si no hay más choques en 2 semanas), cerraré la pregunta. Mientras tanto, alguien tiene una mejor idea o conoce la solución, compártala.
Gracias,
En mi caso, estaba compilando y firmando con Eclipse ADT (con Archivo> Exportar> Exportar aplicación de Android ...) pero faltaban algunas clases si descompilo mi .apk. Para resolverlo, uso "Exportar un APK sin firmar" y lo firmo con jarsigner y zipalign.
android:name=".MyApplication"
También considere agregar el paquete completo