Правильный способ реализации BackupAgentHelper для резервного копирования нескольких файлов
В течение двух дней я пытаюсь заставить BackupAgent/BackupAgentHelper работать на Android версии ниже 6.0. Моя цель - сделать резервную копию всех файлов в папке /data/data/com.package/, либо через com.google.android.backup/.BackupTransportService, либо через android / com.android.internal.backup.LocalTransport.
Есть ли где-нибудь учебник по реализации BackupAgentHelper по умолчанию, который хранит несколько файлов? Я пытался использовать FileBackupHelper с каждым фрагментом, который я мог найти в Интернете, но файлы просто не восстанавливались.
Мой текущий BackupAgentHelper:
public class CustomBackupAgent extends BackupAgentHelper {
private static final String TAG = "FullBackupAgent";
private static final boolean DEBUG = true;
public void addFileHelper(String files[])
{
FileBackupHelper aHelper = new CustomFileHelper(this, files);
addHelper("userfiles", aHelper);
}
@Override
public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
ParcelFileDescriptor newState) throws IOException {
addFileHelper(getBackupDirs());
super.onBackup(oldState, data, newState);
}
private String[] getBackupDirs() {
LinkedList<File> dirsToScan = new LinkedList<>();
ArrayList<String> allFiles = new ArrayList<>();
// build the list of files in the app's /data/data tree
File file = new File(getFilesDir().getParentFile().getAbsolutePath());
dirsToScan.add(file);
Log.e(TAG, "Backing up dir tree @ " + file.getAbsolutePath() + " :");
while (dirsToScan.size() > 0) {
File dir = dirsToScan.removeFirst();
File[] contents = dir.listFiles();
if (contents != null) {
for (File f : contents) {
if (f.isDirectory()) {
dirsToScan.add(f);
} else if (f.isFile()) {
Log.e(TAG, " " + f.getAbsolutePath());
allFiles.add(f.getAbsolutePath());
}
}
}
}
return allFiles.toArray(new String[allFiles.size()]);
}
}
Когда я провожу резервное копирование с помощью "adb shell bgmr run", я получаю следующий вывод logcat:
08-31 16:09:36.534 E/FullBackupAgent: Backing up dir tree @ /data/data/package :
08-31 16:09:36.542 E/FullBackupAgent: /data/data/package/cache/com.android.opengl.shaders_cache
08-31 16:09:36.542 E/FullBackupAgent: /data/data/package/shared_prefs/multidex.version.xml
08-31 16:09:36.550 E/FullBackupAgent: /data/data/package/code_cache/secondary-dexes/package.apk.classes2.dex
08-31 16:09:36.550 E/FullBackupAgent: /data/data/package/code_cache/secondary-dexes/package.apk.classes2.zip
08-31 16:09:36.550 D/BackupHelperDispatcher: handling existing helper 'userfiles' package.CustomFileHelper@41515378
08-31 16:09:36.557 I/PerformBackupTask: Backup pass finished.
08-31 16:11:38.776 V/BackupManagerService: Backup requested but nothing pending
И когда я переустанавливаю приложение, я получаю следующий вывод logcar:
08-31 16:30:13.932 D/BackupManagerService: MSG_RUN_RESTORE observer=android.app.backup.IRestoreObserver$Stub$Proxy@41b003c8
08-31 16:30:13.972 I/dalvikvm: Could not find method android.content.Context.getNoBackupFilesDir, referenced from method android.support.v4.content.ContextCompat.getNoBackupFilesDir
08-31 16:30:13.972 W/dalvikvm: VFY: unable to resolve virtual method 470: Landroid/content/Context;.getNoBackupFilesDir ()Ljava/io/File;
08-31 16:30:13.979 V/LocalTransport: ... key=com.android.sharedstoragebackup size=1107
08-31 16:30:14.065 V/BackupServiceBinder: doRestore() invoked
08-31 16:30:14.073 I/BackupManagerService: Restore complete.
Но ни один из файлов, которые я скопировал, не будет восстановлен. Я также пытался регистрировать или устанавливать точки останова доступными методами, которые я могу переопределить с помощью BackupHelperAgent, но не останавливал и не входил ни в один из них.
AndroidManifest.xml выглядит так:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="package">
<application android:allowBackup="true" android:label="@string/app_name"
android:backupAgent="CustomBackupAgent"
android:restoreAnyVersion="true"
android:supportsRtl="true">
<meta-data
android:name="com.google.android.backup.api_key"
android:value="xxx" />
</application>
</manifest>
Если вы когда-либо использовали BackupAgent для резервного копирования целых каталогов, пожалуйста, помогите:)
Заранее спасибо!