无法使用 Android 备份服务进行备份

Can't use backup with Android Backup Service

我正在尝试将备份服务与我的应用程序集成。在我拨打电话之前一切正常:

BackupManager bm = new BackupManager(context);
bm.dataChanged();

我在 Logcat 中看到以下内容:

W/BackupManagerService﹕ dataChanged but no participant pkg='com.company.app' uid=10102

这是我对 BackupAgentHelper https://gist.github.com/cloakedninjas/fe135cb04bf324e26b0c 的实现,如果有帮助...

public class CordovaBackupAgentHelper extends BackupAgentHelper {
    static final String FILE_NAME = "gameData.json";
    static final String FILES_BACKUP_KEY = "data_file";

    @Override
    public void onCreate() {
        FileBackupHelper helper = new FileBackupHelper(this, FILE_NAME);
        addHelper(FILES_BACKUP_KEY, helper);
    }

    @Override
    public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
                         ParcelFileDescriptor newState) throws IOException {

        Log.d(Backup.LOG_TAG, "Backup requested: " + oldState.toString() + " | "  + newState.toString());

        synchronized (Backup.sDataLock) {
            Log.d(Backup.LOG_TAG, "Backup requested: " + data.toString());
            super.onBackup(oldState, data, newState);
        }
    }

    @Override
    public void onRestore(BackupDataInput data, int appVersionCode,
                          ParcelFileDescriptor newState) throws IOException {

        synchronized (Backup.sDataLock) {
            Log.d(Backup.LOG_TAG, "Restore given: " + data.toString());
            super.onRestore(data, appVersionCode, newState);
        }
    }
}

我从来没有看到我的日志条目 Backup requested。我检查了我的 Android 清单具有以下属性 android:backupAgent="CordovaBackupAgentHelper"

任何人都可以阐明这一点吗?

更新

我注意到如果我将我的清单更改为 android:backupAgent="FooBar" 我没有看到关于未声明的 class FooBar 的错误,但在尝试备份时仍然看到 dataChanged but no participant pkg。所以我猜这个错误与找不到我的备份代理有关。

一些建议:

在您的清单中,我认为备份代理的声明应该使用全名或 "dot" 简称:

android:backupAgent="com.example.project.CordovaBackupAgentHelper"

android:backupAgent=".CordovaBackupAgentHelper"

此外,您必须在清单中启用备份:

android:allowBackup="true"

话虽如此,我怀疑这些更改是否会使警告消息消失。我有一个备用代理,无法通过将这些声明更改为无效值来创建您看到的警告消息。

如果您正在使用 Google 备份传输,您是否已按照 Data Backup Guide 中的描述注册该服务并将密钥添加到您的清单中?

您是否尝试过使用 adb bmgr 工具触发备份操作以查看您的代理是否被调用而不顾警告消息?

所以我的问题是没有将属性放到正确的元素上:(

我有:

<manifest android:backupAgent="com.cloakedninjas.cordova.plugins.BackupAgentHelper" ...

而不是:

<application android:backupAgent="com.cloakedninjas.cordova.plugins.BackupAgentHelper" ...