2011-09-21 29 views
1

我用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替换上述我的真包的名称。

+0

仅仅因为你可以在清单中列出的backupAgent打造APK _不_意味着它是存在的。你可以放任何你想要的垃圾,直到BackupManager试图创建它才会被实例化。 –

回答

-1

对我来说,好像有被安装在设备上的重复包。如果我是你,我会测试:

  • 已包名被无意中被改变。
  • 您是否尝试清理项目,从您的测试设备上卸载应用程序,重新构建并重新安装它?

我知道这些问题可能看起来像船长明显你,但我不能告诉你这两个东西有多少次救了我。

+0

包名称尚未更改。 我自己无法重现错误,当我尝试使用时效果很好。上述错误消息来自已从Android Market下载我的应用并在应用崩溃时上传错误报告的用户。因此,该消息来自Android电子市场中的开发者控制台。 – Anders

+0

那么,我只能假设用户已经从Android Market下载了它。它可能来自另一个地方。它是一个付费应用程序,在文件共享站点周围比较流行。也许这可以解释在安装路径末尾附加的“-2”?但是,这个“-2”能否成为找不到类的理由? 说用户确实从非法下载站点下载我的应用程序。 Android中的错误报告是否仍会转到我在Android Market中的开发者控制台? – Anders

相关问题