我用BackupAgentHelper
来备份SharedPreferences
在我的Android应用程序。我已经在模拟器(Android 1.6和2.2)和我自己的手机(Android 2.3.3)上测试过它,并且一切正常。不过,今天我得到了在开发者控制台崩溃报告看起来像这样:为什么我得到ClassNotFoundException的时候backupAgent试图启动
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
的backupAgent声明在应用程序代码中表现为:
android:backupAgent="com.xxx.yyy.MyBackupAgent"
Apparantly,类MyBackupAgent
是目前,因为我可以构建.apk
,它在多个设备上运行得很好。那么它怎么会在这里找不到课?我在上面的消息中注意到的一件事是,该应用程序似乎安装在一个路径中,该路径中包含我的软件包名称,并在最后附加了“-2”。这是否会导致类加载器在我的包中看不到该类,因为我在android:backupAgent
中指定了完整的包名称和类,还是该部分不相关?任何人都可以理解可能是因为无法找到该类的原因吗?
值得一提的是,我的应用程序可以在SD卡上安装。
请原谅我的消息与com.xxx.yyy替换上述我的真包的名称。
仅仅因为你可以在清单中列出的backupAgent打造APK _不_意味着它是存在的。你可以放任何你想要的垃圾,直到BackupManager试图创建它才会被实例化。 –