OSDN Git Service

Pass app version to agent in adb restore for kv.
authorAnton Philippov <philippov@google.com>
Wed, 11 Apr 2018 13:41:58 +0000 (14:41 +0100)
committerAnton Philippov <philippov@google.com>
Wed, 11 Apr 2018 13:58:14 +0000 (14:58 +0100)
This is a temporary solution for P to unblock GTS tests.

Bug: 77852250
Test: manual:
1. adb backup -f saved-wifi-api100.ab -keyvalue com.android.providers.settings
2. adb restore saved-wifi-api100.ab
3. See that SettingsBackupAgent receives appVersionCode in onRestore()

Change-Id: I6092bea570e7e27cb5b72165e9284ad2befc21b6

services/backup/java/com/android/server/backup/KeyValueAdbRestoreEngine.java
services/backup/java/com/android/server/backup/restore/PerformAdbRestoreTask.java

index a2de8e7..fbec5cb 100644 (file)
@@ -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);
index 77163d3..0c99b44 100644 (file)
@@ -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,