У меня есть несколько (4) отчетов об ошибках в моем приложении, когда система Android решила сделать резервную копию в облаке Google с помощью BackupAgent.Я использую SharedPreferencesBackupHelper.Трассировка стека выглядит следующим образом (мое настоящее имя пакета заменено на com.xxx.yyy):
java.lang.RuntimeException: Unable to create BackupAgent com.xxx.yyy.MyBackupAgent: java.lang.ClassNotFoundException: com.xxx.yyy.MyBackupAgent in loader dalvik.system.PathClassLoader[/mnt/asec/com.xxx.yyy-1/pkg.apk]
at android.app.ActivityThread.handleCreateBackupAgent(ActivityThread.java:2114)
at android.app.ActivityThread.access$3200(ActivityThread.java:132)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1138)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:4196)
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:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: com.xxx.yyy.MyBackupAgent in loader dalvik.system.PathClassLoader[/mnt/asec/com.xxx.yyy-1/pkg.apk]
at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at android.app.ActivityThread.handleCreateBackupAgent(ActivityThread.java:2064)
... 10 more
У меня даже однажды случился сбой программы на моем собственном телефоне с Android 2.30,3.Меня сбивает с толку этот сбой программы: я точно знаю, что в пакете присутствует класс «MyBackupAgent».Я также точно знаю, что резервное копирование в облако работает на том же телефоне, где я однажды получил сбой.
Я довольно много искал в сети, чтобы найти решение, в чем причина этой проблемы.,Все случаи, которые я обнаружил при похожих проблемах, то есть исключение ClassNotFoundException, выбрасываемое из PathClassLoader, хотя класс присутствует в apk, имеют одну общую черту.Все они имеют завершающий «-1» или «-2» и конец каталога с именем пакета, в котором установлен apk.
В моих отчетах об ошибках это разные имена, где dalvik.system.PathClassLoader ищет мой резервный класс:
/ mnt / asec / com.xxx.yyy-1 / pkg.apk
/ data / app / com.xxx.yyy-1.apk
/ mnt / asec / com.xxx.yyy-2 / pkg.apk
Возможно, я ловлю рыбу не в том озере, но что означают эти слова "-1" и "-2"msgstr "в конце каталога имя пакета означает, и может ли проблема быть связана с этим?Я сомневаюсь, что проблема заключается в моем коде, поскольку просто скажите системе запланировать резервное копирование моих общих настроек.Затем система Android начинает резервное копирование в подходящее время в будущем, и именно здесь происходит сбой.Глядя на трассировку стека, мой код даже не упоминается.Это все системные процедуры, которые заканчиваются поиском моего класса резервной копии в apk и могут по неизвестной причине не найти его.
Я не установил атрибут android: name в теге приложения в манифесте, который ячтение может вызвать аналогичную ошибку.
Кто-нибудь знает, что может вызвать это?Или еще лучше, как этого избежать.