Почему я получаю ClassNotFoundException, когда backupAgent пытается запустить - PullRequest
1 голос
/ 22 сентября 2011

Я использую BackupAgentHelper для резервного копирования SharedPreferences в моем приложении для Android.Я протестировал его в эмуляторе (Android 1.6 и 2.2) и на своем телефоне (Android 2.3.3), и все это работает хорошо.Однако сегодня я получил отчет о сбое в консоли разработчика, который выглядит следующим образом:

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-2/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-2/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:backupAgent="com.xxx.yyy.MyBackupAgent"

класс MyBackupAgent присутствует , так как я могу собрать .apk, и он отлично работает на нескольких устройствах.Так как может быть, что он не находит здесь класс?Одна вещь, которую я заметил в сообщении выше, это то, что приложение, кажется, установлено по пути, в котором есть имя моего пакета И добавленный «-2» в конце.Может ли это привести к тому, что загрузчик классов не увидит класс в моем пакете, поскольку я указываю полное имя пакета и класс в android:backupAgent, или эта часть не имеет значения?Кто-нибудь может понять, в чем причина того, что класс не может быть найден?

Стоит упомянуть, что мое приложение можно установить на SD-карту.

Извините за замену моего реального имени пакета на com.xxx.yyy в сообщении выше.

1 Ответ

0 голосов
/ 22 сентября 2011

Мне кажется, что на устройстве установлен дубликат пакета.На вашем месте я бы проверил:

  • Неумышленно ли было изменено имя пакета.
  • Вы пытались очистить проект, удалить приложение с тестового устройства,перестраивать и переустанавливать его?

Я знаю, что эти вопросы могут показаться вам капитаном, но я не могу сказать, сколько раз эти две вещи спасли меня.

...