Android 애플리케이션에서 SharedPreferences를 백업하는 방법에 대한 숙제를했습니다. 특히 이전 버전과의 호환성을 유지하기 위해 리플렉션을 사용했습니다. 적어도 나는 노력해왔다. 불행히도, 내 코드 중 실제로 백업을 만드는 끝나지 않아! 여기에는 here과 같이 에뮬레이터에서 adb bmgr 명령이 강제 실행됩니다. 커뮤니티에서 저를 도울 수 있을지 궁금합니다. 그리고 그 과정에서 좀 더 나은 문서화가 나오기를 바랍니다.Android SharedPreferences 백업이 작동하지 않습니다.
여기 내 코드가 있습니다. 이것을 다른 사람들을 위해 가능한 한 포괄적 인 것으로 유지하기 위해서, 나는 단지 Andy을 com.example.andy의 패키지 이름으로 호출 할 것이다.
안드로이드 매니페스트 (발췌)
<application
...
android:backupAgent="com.example.andy.backupHelper"
android:restoreAnyVersion="true">
...
<meta-data
android:name="com.google.android.backup.api_key"
android:value="GIVEN KEY GOES HERE" />
...
backupHelper.java
참고 : /data/data/com.example.andy/shared_prefs/com.example.andy_preferences.xml
package com.example.andy;
import android.app.backup.BackupAgentHelper;
import android.app.backup.SharedPreferencesBackupHelper;
public class BlinkyBackup extends BackupAgentHelper {
static final String PREFS_FILE = "andy_preferences";
static final String BACKUP_KEY = "AndyPreferencesBackup";
public void onCreate() {
SharedPreferencesBackupHelper backupHelper = new SharedPreferencesBackupHelper(this, PREFS_FILE);
addHelper(BACKUP_KEY, backupHelper);
}
}
BackupAgentWrapper
package com.example.andy;
import android.app.backup.BackupManager;
import android.content.Context;
public class BackupAgentWrapper {
private BackupManager wrappedInstance;
static {
try {
Class.forName("android.app.backup.BackupManager");
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
public static void checkAvailable() {}
public void dataChanged() {
wrappedInstance.dataChanged();
}
public BackupAgentWrapper(Context ctx) {
wrappedInstance = new BackupManager(ctx);
}
}
마지막으로 런타임 중에 백업을 시작하는 명령입니다. 내 응용 프로그램에서이 코드는 내 응용 프로그램에서 사용할 수있는 클래스 (주 활동이 아님)에서 실행되며 이이 생성시 컨텍스트로 전달 된 다음 개인 변수 mContext에 저장됩니다. 주요 통화 활동 (앱에서 시작하는 첫 번째)에서
$ adb shell bmgr enable true
$ adb shell bmgr backup com.example.andy
$ adb shell bmgr run