| Christopher Tate | f781e86 | 2010-04-21 14:32:53 -0700 | [diff] [blame^] | 1 | page.title=bmgr |
| 2 | @jd:body |
| 3 | |
| 4 | <!-- quickview box content here --> |
| 5 | |
| 6 | <div id="qv-wrapper"> |
| 7 | <div id="qv"> |
| 8 | <h2>bmgr quickview</h2> |
| 9 | <p><code>bmgr</code> lets you inspect and control the backup/restore system on an Android device. |
| 10 | |
| 11 | <h2>In this document</h2> |
| 12 | <ol> |
| 13 | <li><a href="#transports">About backup transports</a></li> |
| 14 | <li><a href="#restoresets">About restore sets</a></li> |
| 15 | <li><a href="#backup">Forcing a backup operation</a></li> |
| 16 | <li><a href="#restore">Forcing a restore operation</a></li> |
| 17 | <li><a href="#other">Other commands</a></li> |
| 18 | </ol> |
| 19 | |
| 20 | </div> |
| 21 | </div> |
| 22 | |
| 23 | <!-- normal page content here --> |
| 24 | |
| 25 | <p><code>bmgr</code> is a shell tool that developers can use to interact with the Backup Manager |
| 26 | on Android devices supporting API version 8 or later. It provides commands for inducing backup |
| 27 | and restore operations on demand so that you do not need to repeatedly wipe data or take similar |
| 28 | intrusive steps to test the operation of an application's backup agent. These commands are |
| 29 | accessed via the <a href="{@docRoot}guide/developing/tools/adb.html">adb</a> shell. |
| 30 | |
| 31 | <p>There are a couple of basic concepts used by the Backup Manager that are built into the way |
| 32 | that <code>bmgr</code> operates. These are <a href="#transports">backup transports</a> and |
| 33 | <a href="#restoresets">restore sets</a>. |
| 34 | |
| 35 | |
| 36 | <a name="transports"></a> |
| 37 | <h2>About backup transports</h2> |
| 38 | |
| 39 | <p>A <em>backup transport</em> is the code module responsible for moving backup and restore data |
| 40 | to and from some storage location. A device can have multipe transports installed, though only |
| 41 | one is active at any given time. Transports are identified by name. You can see what |
| 42 | transports are available on your device or emulator by running the |
| 43 | <code>bmgr list transports</code> command: |
| 44 | |
| 45 | <pre>adb shell bmgr list transports</pre> |
| 46 | |
| 47 | <p>The output of this command is a list of the transports available on the device. The currently |
| 48 | active transport is flagged with a <code>*</code> character. Transport names may look like |
| 49 | component names -- for example, <code>android/com.android.internal.backup.LocalTransport</code> -- |
| 50 | but they need not be, and the strings are never used as direct class references. The use of |
| 51 | a component-like naming scheme is simply for purposes of preventing name collisions. |
| 52 | |
| 53 | <p>You can change which transport is currently active from the command line as well: |
| 54 | |
| 55 | <pre>adb shell bmgr transport NAME</pre> |
| 56 | |
| 57 | <p>where <code>NAME</code> is one of the names as printed by the <code>bmgr list transports</code> |
| 58 | command. From this point forward, backup and restore operations will be directed through the |
| 59 | newly-selected transport. Backup state tracking is managed separately for each transport, so |
| 60 | switching back and forth between them will not corrupt the saved state. |
| 61 | |
| 62 | |
| 63 | <a name="restoresets"></a> |
| 64 | <h2>About restore sets</h2> |
| 65 | |
| 66 | <p>All of the application data that a device has written to a given backup transport is tracked |
| 67 | together, and is collectively sometimes called a <em>restore set,</em> because the typical use |
| 68 | of the data set is during restore operations. Each time a device is initially provisioned, a |
| 69 | new data set is established. The user can get a listing of all the data sets that can be |
| 70 | restored through the current transport by running this shell command: |
| 71 | |
| 72 | <pre>adb shell bmgr list sets</pre> |
| 73 | |
| 74 | <p>The output is listing of available restore sets, one per line. The first item on each line is |
| 75 | a <em>token,</em> a number in hexadecimal that identifies the restore set to the transport. After |
| 76 | that is a string that may provide some brief identifying information about the restore set. Only |
| 77 | the token is actually used within the backup and restore mechanism. |
| 78 | |
| 79 | |
| 80 | <a name="backup"></a> |
| 81 | <h2>Forcing a backup operation</h2> |
| 82 | |
| 83 | <p>Normally, applications notify the backup manager directly that their data has changed, in |
| 84 | response to which the backup manager will make sure to invoke that application's agent when the |
| 85 | next backup operation is run. You can simulate this manually from the command line if you wish, |
| 86 | by running this shell command: |
| 87 | |
| 88 | <pre>adb shell bmgr backup PACKAGE</pre> |
| 89 | |
| 90 | <p><code>PACKAGE</code> is the formal package name of the application you wish to schedule for |
| 91 | backup. At this point you know that the application's agent will be invoked for backup at some |
| 92 | point in the future, though there is no hard guarantee of when that will occur. You can force |
| 93 | all pending backup operations to run immediately by using the following command: |
| 94 | |
| 95 | <pre>adb shell bmgr run</pre> |
| 96 | |
| 97 | <p>This causes a backup pass to execute immediately, invoking the agents of all applications that |
| 98 | had called <code>BackupManager.dataChanged()</code> since the time of the last backup operation, |
| 99 | plus any applications which had been manually scheduled for backup via |
| 100 | <code>bmgr backup PACKAGE</code>. |
| 101 | |
| 102 | |
| 103 | <a name="restore"></a> |
| 104 | <h2>Forcing a restore operation</h2> |
| 105 | |
| 106 | <p>Unlike backup operations, which are batched together and run on an occasional basis, restore |
| 107 | operations execute immediately. The backup manager currently provides two kinds of restore |
| 108 | operations. The first restores an entire device with the data from a given restore set. This |
| 109 | is typically only performed when a device is first provisioned, to replicate settings and other |
| 110 | such saved state from the user's previous device. The second kind of restore operation restores |
| 111 | a single application from the <em>active</em> data set; that is, from the data set currently |
| 112 | being written to by backup operations. This second form is available as part of the public API. |
| 113 | It allows applications to abandon their current data and revert to the last-known-good data as |
| 114 | represented in their current backup image. |
| 115 | |
| 116 | <p>A full-system restore operation can be initiated with this shell command: |
| 117 | |
| 118 | <pre>adb shell bmgr restore TOKEN</pre> |
| 119 | |
| 120 | <p>where <code>TOKEN</code> is the desired restore set's token as printed out by the <code>bmgr |
| 121 | list sets</code> command. <strong>Warning!</strong> This operation will <em>replace</em> the |
| 122 | data of all backup-enabled applications with the contents of the given restore set. Be careful, |
| 123 | and be aware of the potential consequences. |
| 124 | |
| 125 | <p>A single-application restore operation does not reference a restore set token; it always uses |
| 126 | the data from the currently active data set. You can induce such an operation from the command |
| 127 | line like this: |
| 128 | |
| 129 | <pre>adb shell bmgr restore PACKAGE</pre> |
| 130 | |
| 131 | <p><code>PACKAGE</code> is the formal package name of an application that is participating in the |
| 132 | backup/restore mechanism. The backup manager will immediately instantiate the application's |
| 133 | agent and invoke it for restore. |
| 134 | |
| 135 | <a name="other"></a> |
| 136 | <h2>Other commands</h2> |
| 137 | |
| 138 | <p>The data for a single application can be erased from the active data set on demand. This is |
| 139 | very useful during development of backup agents, in case bugs lead you to write corrupt data |
| 140 | or saved state information. The shell command for wiping an application's data is this: |
| 141 | |
| 142 | <pre>adb shell bmgr wipe PACKAGE</pre> |
| 143 | |
| 144 | <p><code>PACKAGE</code> is the formal package name of the application whose data you wish to |
| 145 | erase. The next backup operation that the application's agent processes will look as |
| 146 | though the application had never backed anything up before. |
| 147 | |
| 148 | <p>You can see whether the backup manager is operational at all by running this command: |
| 149 | |
| 150 | <pre>adb shell bmgr enabled</pre> |
| 151 | |
| 152 | <p>This might be useful if your application's agent is never being invoked for backup, to verify |
| 153 | whether the operating system thinks it should be performing such operations at all. You can also |
| 154 | directly disable or enable the backup manager with this command: |
| 155 | |
| 156 | <pre>adb shell bmgr enable BOOLEAN</pre> |
| 157 | |
| 158 | <p>where <code>BOOLEAN</code> is either <code>true</code> or <code>false</code>. This is |
| 159 | equivalent to disabling or enabling backup in the device's main Settings UI. |
| 160 | <strong>Warning!</strong> When backup is disabled, the current transport will explicitly wipe |
| 161 | the entire active data set from its backend storage. This is so that when a user says that no, |
| 162 | they do not want their data backed up, the backup manager respects that wish. No further data |
| 163 | will be saved from the device, and no restore operations will be possible, unless the backup |
| 164 | manager is re-enabled (either through Settings or through the above <code>bmgr</code> command). |
| 165 | |