1

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로 바꾸어 주어서 죄송합니다.

+0

매니페스트에 나열된 backupAgent를 사용하여 APK를 만들 수 있다고해서 그것이 존재하지 않는다는 것을 의미하지는 않습니다. 원하는 가비지를 넣을 수 있으며 BackupManager가 생성하려고 시도 할 때까지 인스턴스화되지 않습니다. –

답변

-1

내게는 장치에 중복 패키지가 설치되어있는 것 같습니다. 내가 너라면 나도 시험해 볼거야.

  • 실수로 패키지 이름이 변경 되었습니까?
  • 프로젝트를 정리하고 테스트 장치에서 응용 프로그램을 제거하고 다시 빌드하고 다시 설치해 보았습니까?

나는이 질문이 선장처럼 보일 수도 있음을 알고 있습니다.하지만이 두 가지가 나를 얼마나 많이 구했는지 말할 수는 없습니다.

+0

패키지 이름이 변경되지 않았습니다. 오류를 직접 재현 할 수 없으며 시도 할 때 제대로 작동합니다. 위의 오류 메시지는 Android 마켓에서 내 앱을 다운로드 한 사용자가 앱이 다운되었을 때 오류 보고서를 업로드 한 것입니다. 따라서 메시지는 Android 마켓의 개발자 콘솔에서 가져온 것입니다. – Anders

+0

글쎄, 사용자가 Android 마켓에서 다운로드했다고 가정 할 수 있습니다. 그것은 다른 지역에서 올 수 있습니다. 유료 앱이며 파일 공유 사이트에서 상대적으로 인기가 있습니다. 어쩌면 설치 경로 끝에 "-2"가 붙었을 수도 있습니다. 그러나 "-2"가 클래스가 발견되지 않는 이유가 될 수 있습니까? 사용자가 불법 다운로드 사이트에서 내 앱을 다운로드했다고 가정 해 보겠습니다. Android의 오류 보고서가 Android 마켓의 개발자 콘솔로 계속 이동합니까? – Anders