diff --git a/services/backup/java/com/android/server/backup/KeyValueAdbRestoreEngine.java b/services/backup/java/com/android/server/backup/KeyValueAdbRestoreEngine.java index a2de8e7372d05..fbec5cb22af2e 100644 --- a/services/backup/java/com/android/server/backup/KeyValueAdbRestoreEngine.java +++ b/services/backup/java/com/android/server/backup/KeyValueAdbRestoreEngine.java @@ -64,8 +64,7 @@ public class KeyValueAdbRestoreEngine implements Runnable { try { File restoreData = prepareRestoreData(mInfo, mInFD); - // TODO: version ? - invokeAgentForAdbRestore(mAgent, mInfo, restoreData, 0); + invokeAgentForAdbRestore(mAgent, mInfo, restoreData); } catch (IOException e) { e.printStackTrace(); } @@ -83,8 +82,8 @@ public class KeyValueAdbRestoreEngine implements Runnable { return sortedDataName; } - private void invokeAgentForAdbRestore(IBackupAgent agent, FileMetadata info, File restoreData, - int versionCode) throws IOException { + private void invokeAgentForAdbRestore(IBackupAgent agent, FileMetadata info, File restoreData) + throws IOException { String pkg = info.packageName; File newStateName = new File(mDataDir, pkg + ".new"); try { @@ -95,9 +94,9 @@ public class KeyValueAdbRestoreEngine implements Runnable { if (DEBUG) { Slog.i(TAG, "Starting restore of package " + pkg + " for version code " - + versionCode); + + info.version); } - agent.doRestore(backupData, versionCode, newState, mToken, + agent.doRestore(backupData, info.version, newState, mToken, mBackupManagerService.getBackupManagerBinder()); } catch (IOException e) { Slog.e(TAG, "Exception opening file. " + e); diff --git a/services/backup/java/com/android/server/backup/restore/PerformAdbRestoreTask.java b/services/backup/java/com/android/server/backup/restore/PerformAdbRestoreTask.java index 77163d348e1cd..0c99b4400dd6e 100644 --- a/services/backup/java/com/android/server/backup/restore/PerformAdbRestoreTask.java +++ b/services/backup/java/com/android/server/backup/restore/PerformAdbRestoreTask.java @@ -99,6 +99,7 @@ public class PerformAdbRestoreTask implements Runnable { private FullBackupObbConnection mObbConnection = null; private ParcelFileDescriptor[] mPipes = null; private byte[] mWidgetData = null; + private long mAppVersion; private long mBytes; private final BackupAgentTimeoutParameters mAgentTimeoutParameters; @@ -476,6 +477,9 @@ public class PerformAdbRestoreTask implements Runnable { if (info.path.equals(BACKUP_MANIFEST_FILENAME)) { Signature[] signatures = tarBackupReader.readAppManifestAndReturnSignatures( info); + // readAppManifestAndReturnSignatures() will have extracted the version from + // the manifest, so we save it to use in key-value restore later. + mAppVersion = info.version; PackageManagerInternal pmi = LocalServices.getService( PackageManagerInternal.class); RestorePolicy restorePolicy = tarBackupReader.chooseRestorePolicy( @@ -667,6 +671,8 @@ public class PerformAdbRestoreTask implements Runnable { Slog.d(TAG, "Restoring key-value file for " + pkg + " : " + info.path); } + // Set the version saved from manifest entry. + info.version = mAppVersion; KeyValueAdbRestoreEngine restoreEngine = new KeyValueAdbRestoreEngine( mBackupManagerService,