2011-01-11 27 views
7

Data Backupに記載されているようにBackupAgentを実装し、APIキーを登録し、私のマニフェストにBackupAgentを宣言しました。 バックアップ部分の作業はかなりうまくいっています。私は、コマンドラインでadb shell bmgr runを実行すると、次の出力がLogCatに表示されます。BackupAgent:「パッケージを復元できません...」

01-11 22:23:09.002: DEBUG/PerformBackupThread(97): starting agent for backup of BackupRequest{app=ApplicationInfo{4547c5b8 com.meins.nightclock} full=false} 
01-11 22:23:09.002: DEBUG/BackupManagerService(97): awaiting agent for ApplicationInfo{4547c5b8 com.meins.nightclock} 
01-11 22:23:09.013: DEBUG/BackupManagerService(97): agentConnected pkg=com.meins.nightclock [email protected] 
01-11 22:23:09.032: DEBUG/BackupHelperDispatcher(9122): handling existing helper 'alarms' [email protected] 
01-11 22:23:09.032: DEBUG/BackupHelperDispatcher(9122): handling existing helper 'prefs' [email protected] 
01-11 22:23:09.032: VERBOSE/LocalTransport(97): performBackup() pkg=com.meins.nightclock 
01-11 22:23:09.032: VERBOSE/LocalTransport(97): Got change set key=alarms:alarms size=16 key64=YWxhcm1zOmFsYXJtcw== 
01-11 22:23:09.042: VERBOSE/LocalTransport(97): data size 16 
01-11 22:23:09.062: VERBOSE/LocalTransport(97): Got change set key=prefs:com.meins.nightclock_preferences size=265 key64=cHJlZnM6Y29tLm1laW5zLm5pZ2h0Y2xvY2tfcHJlZmVyZW5jZXM= 
01-11 22:23:09.072: VERBOSE/LocalTransport(97): data size 265 
01-11 22:23:09.072: VERBOSE/LocalTransport(97): finishBackup() 

一方の部分を復元onReceive()法上、全く動作しませんと呼ばれていません。私は私のアプリを再インストールすると、BackupAgentを参照してもよい(?)のみ出力が

01-11 22:14:01.042: DEBUG/vending(7426): [100] LocalAssetCache.updateOnePackage(): No local info for com.meins.nightclock 

私はadb shell bmgr restore com.meins.nightclockを実行すると、それは単にUnable to restore package com.meins.nightclockを述べています。


私は完全を期す関連するマニフェストの部分についてはBackupAgentHelper

package com.meins.nightclock; 

import java.io.IOException; 

import android.app.backup.BackupAgentHelper; 
import android.app.backup.BackupDataInput; 
import android.app.backup.BackupDataOutput; 
import android.app.backup.FileBackupHelper; 
import android.app.backup.SharedPreferencesBackupHelper; 
import android.os.ParcelFileDescriptor; 
import android.util.Log; 

public class MyBackupAgent extends BackupAgentHelper { 

    public static final Object[] DATA_LOCK = new Object[0]; 

    private static final String PREFS_BACKUP_KEY = "prefs"; 
    private static final String ALARMS_BACKUP_KEY = "alarms"; 

    private DataLayerAlarms d; 

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

     if (d.backup() != 0) 
      return; 

     synchronized (DATA_LOCK) { 
      super.onBackup(oldState, data, newState); 
     } 
    } 

    @Override 
    public void onCreate() { 
     SharedPreferencesBackupHelper preferencesHelper = new SharedPreferencesBackupHelper(this, 
       getPackageName() + "_preferences"); 
     addHelper(PREFS_BACKUP_KEY, preferencesHelper); 

     FileBackupHelper fileHelper = new FileBackupHelper(this, DataLayerAlarms.BACKUP_FILE); 
     addHelper(ALARMS_BACKUP_KEY, fileHelper); 

     d = new DataLayerAlarms(this); 
    } 

    @Override 
    public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState) 
      throws IOException { 
     Log.d(toString(), "onRestore()"); 
     synchronized (DATA_LOCK) { 
      super.onRestore(data, appVersionCode, newState); 
     } 

     d.restore(); 
    } 

} 

の次の実装を使用しています:

<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:debuggable="true" 
    android:backupAgent="MyBackupAgent"> 
    <meta-data 
     android:name="com.google.android.backup.api_key" 
     android:value="AEdPqrEAAAAI4MsUOC-[...]" /> 

    ... 

</application> 

BackupManagerである理由誰もが、知っていますこのパッケージを復元できませんか?

+0

同じことが起こっています。私はそれが動作するのを見たが、突然それはもはや働いていない。 – slott

+1

私も。それは働いていて、突然それは動作を停止しました。冬のような.. – coolcool1994

答えて

3

によう、バックアップのクラス名の前にドットを追加してみてください:

android:backupAgent=".MyBackupAgent" 

するか、バックアップのクラスは、あなたのルートパッケージにない場合は、それにパスを追加します。

android:backupAgent=".package.MyBackupAgent" 
0

android:backupAgent="MyBackupAgent"からandroid:backupAgent=".MyBackupAgent"に変更すると私の仕事も変わりました。

+0

は私にとっては機能しません – abh22ishek

0

この問題は、パッケージ名を変更した後に他の問題が発生したときに発生しました。把握するのに数時間かかりました。

インスタント実行を無効にします。それは私のためにものを台無しにしました。

トランスポートのリストを確認し、グーグルが設定されていることを確認します

adb shell bmgr list transports 
    android/com.android.internal.backup.LocalTransport 
    * com.google.android.gms/.backup.BackupTransportService 

BackupAgentHelperのパッケージ名とメタデータパッケージ名は同じ名前を持っていることを確認してください。名前の競合は問題を引き起こす可能性があります。

android:backupAgent Backup Agentのサブクラスである アプリケーションのバックアップエージェントを実装するクラスの名前です。属性 の値は、完全修飾クラス名( "com.example.project.MyBackupAgent"など)である必要があります。ただし省略形として、名前の最初の文字が ".MyBackupAgent"の場合は、 要素で指定されたパッケージ名に追加されます。デフォルトはありません。名前を指定する必要があります。

関連する問題