Search code examples
androidandroid-serviceadbandroid-backup-service

BackupTransportService throws an exception when I try to backup my data


It looks like my onBackup is being called when I run adb shell bmgr run, but there's what looks like a PolicyException. Does anybody know what this means or what's causing it? I'm banging my head here.

UPDATE: This only occurs when I try to use BackupTransportService as the transport. Using LocalTransport is just fine. Still need help though!

Here's the code for MyBackupAgent

public class MyBackupAgent extends BackupAgentHelper {

    @Override
    public void onCreate(){
        Log.d("GradeTracker.MyBackupAgent", "onCreate called");

        FileBackupHelper myDb = new FileBackupHelper(this, "../databases/" + DBAdapter.DATABASE_NAME);
        addHelper(DBAdapter.DATABASE_NAME, myDb); 
    }

    @Override
    public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
         ParcelFileDescriptor newState) throws IOException {
        Log.d("GradeTracker.MyBackupAgent", "onBackup called");
            synchronized (DBAdapter.dbBackupLockObject) {
                    super.onBackup(oldState, data, newState);
            }
    }

    @Override
    public void onRestore(BackupDataInput data, int appVersionCode,
                    ParcelFileDescriptor newState) throws IOException {
            Log.d("GradeTracker.MyBackupAgent", "onRestore called");
            synchronized (DBAdapter.dbBackupLockObject) {
                    super.onRestore(data, appVersionCode, newState);
            }
    }
}

My Manifest...

<application
        android:allowBackup="true"
        android:backupAgent="MyBackupAgent" ...>
    <meta-data android:name="com.google.android.backup.api_key" 
            android:value="<myKey>" />     
</application>

Stack trace

11-13 19:53:44.481: D/PerformBackupTask(352): starting agent for backup of BackupRequest{pkg=com.NsouthProductions.gradetrackerpro}
11-13 19:53:44.501: I/BackupManagerService(352): got agent android.app.IBackupAgent$Stub$Proxy@441b7118
11-13 19:53:44.501: D/PerformBackupTask(352): invokeAgentForBackup on com.NsouthProductions.gradetrackerpro
11-13 19:53:44.511: V/BackupServiceBinder(30648): doBackup() invoked
11-13 19:53:44.511: D/GradeTracker.MyBackupAgent(30648): onBackup called
11-13 19:53:44.511: D/BackupHelperDispatcher(30648): handling existing helper 'GradeTracker.db' android.app.backup.FileBackupHelper@425a93e0
11-13 19:53:45.382: E/BackupTransportService(352): com.google.android.backup.BackupRequestGenerator$PolicyException: server error in app com.NsouthProductions.gradetrackerpro: code 7
11-13 19:53:45.382: E/BackupTransportService(352):  at com.google.android.backup.BackupRequestGenerator.parseResponse(BackupRequestGenerator.java:360)
11-13 19:53:45.382: E/BackupTransportService(352):  at com.google.android.backup.BackupTransportService.sendRequestLocked(BackupTransportService.java:849)
11-13 19:53:45.382: E/BackupTransportService(352):  at com.google.android.backup.BackupTransportService.access$600(BackupTransportService.java:78)
11-13 19:53:45.382: E/BackupTransportService(352):  at com.google.android.backup.BackupTransportService$1.finishBackup(BackupTransportService.java:444)
11-13 19:53:45.382: E/BackupTransportService(352):  at com.android.server.BackupManagerService$PerformBackupTask.operationComplete(BackupManagerService.java:2320)
11-13 19:53:45.382: E/BackupTransportService(352):  at com.android.server.BackupManagerService$BackupHandler.handleMessage(BackupManagerService.java:572)
11-13 19:53:45.552: I/PerformBackupTask(352): Backup pass finished.

Solution

  • Solved it! My Android Backup Service key was apparently bad. My package name in my manifest has a few capital letters in it so I thought "maybe I should make sure my key was generated with a package name with the same capitalization." So I registered again with a direct copy/paste of my package name from my manifest and I got a different key which now seems to be working.