Android для Невозможно создать экземпляр приложения java.lang.ClassNotFoundException:

Я работаю над приложением, которое является хостом на рынке Android. Иногда (раз в месяц) я получил отчет о сбоях:

Невозможно создать экземпляр приложения java.lang.ClassNotFoundException

Загрузка приложений составляет от 10 000 до 50 000. Я не знаю, почему эти исключения повышают на некоторых устройствах не все (я тестировал его на 3 разных устройствах, и я не мог его повторно продлить).

Я читал статьи/предложения на разных форумах по поводу форума, но мне не удалось его решить. Кто-нибудь сталкивается с подобной проблемой и предлагает мне, что мне делать?

Примечание: Я расширяю класс приложения следующим образом

public class MyApplication extends Application {

}

Я зарегистрирую его в файле manifest.xml, как это

<application android:icon="@drawable/app_icon"
    android:label="@string/my_app_name" android:name="MyApplication">

Трассировка стека:

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)

Я не знаю, почему крах приложения на некоторых устройствах не все.

Ответ 1

Я думаю, проблема связана с getApplication(), которую я использовал в 10 разных местах. Поэтому я использовал шаблон singleton для решения этой проблемы.

public class MyApplication extends Application {
    private static MyApplication me;

    @Override
    public void onCreate() {        
        super.onCreate();
        me = this ;

    }
    public static MyApplication getInstance() {
         return me;
    }
}

Теперь я использовал getApplication(), как этот

     MyApplication application = MyApplication.getInstance();

insted

     MyApplication application = (MyApplication) getApplication();

Я загрузил исправленную версию на рынок и теперь жду, если будет больше такого рода сбоев. Если все будет идеально (если больше не произойдет сбой через 2 недели), я закрою вопрос. Между тем у кого-то есть лучшая идея или знать решение, пожалуйста, поделитесь им.
Спасибо,

Ответ 2

Некоторые другие подобные вопросы указывают на то, что это может быть ошибка пользователя. "/mnt/asec/..." указывает, что приложение запускается с SD-карты. Если SD-карта удалена, это может привести к этой ошибке. Сторонние приложения или укорененные устройства, вероятно, могут перенести приложение на SD-карту, даже если оно не разрешено манифестом.

Подобный вопрос

Ответ 3

В моем случае я компилировал и подписывался с Eclipse ADT (с файлом > Экспорт > Экспорт приложений для Android...), но я пропустил некоторые классы, если я декомпилирую мой .apk. Чтобы решить эту проблему, я использую "Экспортировать unsigned APK" и подписываю ее с помощью jarsigner и zipalign.

Ответ 4

 android:name=".MyApplication"

также рассмотреть возможность добавления полного пакета