2011-01-11 8 views
7

Data Backup에 설명 된대로 BackupAgent를 구현하고 API 키를 등록하고 My Manifest에 BackupAgent를 선언했습니다. 백업 부분 작업은 꽤 잘되어 있습니다. 내가 명령 줄에서 adb shell bmgr run을 실행하면 다음과 같은 출력은 로그 캣에 나타납니다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을 참조 할 수있는 유일한 출력을 다시 설치하면 나는 단순히 Unable to restore package com.meins.nightclock을 주장 adb shell bmgr restore com.meins.nightclock을 실행하면

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

입니다. BackupManager 인 이유,

<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> 

사람이 알고 있나요 :


나는 완벽하게하기 위해 관련 매니페스트 부분을 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(); 
    } 

} 

의 다음 구현을 사용하고 있습니다 이 패키지를 복원 할 수 없습니까?

+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 BackupAgent의 서브 클래스 인 응용 프로그램의 백업 에이전트 을 구현하는 클래스의 이름입니다. 값은 정규화 된 클래스 이름 (예 : "com.example.project.MyBackupAgent")이어야합니다. 그러나 축약 형으로, 이름의 첫 번째 문자 인 이 마침표 (예 : ".MyBackupAgent") 인 경우 요소에 지정된 패키지 이름에 추가됩니다. 기본값은 없습니다. 이름을 지정해야합니다.

관련 문제