BackupAgentHelper
을 사용하여 Android 앱에서 SharedPreferences
을 백업합니다. 필자는 에뮬레이터 (안드로이드 1.6과 2.2)와 제 자신의 전화 (안드로이드 2.3.3)에서 테스트 해 보았습니다.backupAgent가 시작하려고 할 때 ClassNotFoundException이 발생합니다
android:backupAgent="com.xxx.yyy.MyBackupAgent"
Apparantly 히, 클래스가 MyBackupAgent
은 다음과 같습니다
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이 (가) 매니페스트로 응용 프로그램 태그에 선언 : 그러나 오늘 나는이처럼 보이는 개발자 콘솔에서 충돌 보고서를 가지고 .apk
을 만들 수 있기 때문에이 존재하며 여러 장치에서 제대로 실행됩니다. 그렇다면 여기서 어떻게 수업을 찾지 못하게 될 수 있습니까? 위의 메시지에서 알 수있는 한 가지는 패키지 이름과 끝에 "-2"가 추가 된 경로에 앱이 설치되어있는 것으로 보입니다. android:backupAgent
에 전체 패키지 이름과 클래스를 지정했기 때문에 클래스 로더가 내 패키지의 클래스를 보지 못하게 할 수 있습니까? 아니면 해당 부분과 관련이 없습니까? 클래스를 찾을 수없는 이유는 무엇인지 이해할 수 있습니까?
언급할만한 점은 내 앱이 SD 카드에 설치 될 수 있다는 것입니다.
위의 메시지에서 실제 패키지 이름을 com.xxx.yyy로 바꾸어 주어서 죄송합니다.
매니페스트에 나열된 backupAgent를 사용하여 APK를 만들 수 있다고해서 그것이 존재하지 않는다는 것을 의미하지는 않습니다. 원하는 가비지를 넣을 수 있으며 BackupManager가 생성하려고 시도 할 때까지 인스턴스화되지 않습니다. –