blob: 0353b77237f5dbb834cddfb2c3cd0bc8b5cbfd31 [file] [log] [blame]
Christopher Tatef781e862010-04-21 14:32:53 -07001page.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
26on Android devices supporting API version 8 or later. It provides commands for inducing backup
27and restore operations on demand so that you do not need to repeatedly wipe data or take similar
28intrusive steps to test the operation of an application's backup agent. These commands are
29accessed 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
32that <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
40to and from some storage location. A device can have multipe transports installed, though only
41one is active at any given time. Transports are identified by name. You can see what
42transports 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
48active transport is flagged with a <code>*</code> character. Transport names may look like
49component names -- for example, <code>android/com.android.internal.backup.LocalTransport</code> --
50but they need not be, and the strings are never used as direct class references. The use of
51a 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>
58command. From this point forward, backup and restore operations will be directed through the
59newly-selected transport. Backup state tracking is managed separately for each transport, so
60switching 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
67together, and is collectively sometimes called a <em>restore set,</em> because the typical use
68of the data set is during restore operations. Each time a device is initially provisioned, a
69new data set is established. The user can get a listing of all the data sets that can be
70restored 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
75a <em>token,</em> a number in hexadecimal that identifies the restore set to the transport. After
76that is a string that may provide some brief identifying information about the restore set. Only
77the 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
84response to which the backup manager will make sure to invoke that application's agent when the
85next backup operation is run. You can simulate this manually from the command line if you wish,
86by 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
91backup. At this point you know that the application's agent will be invoked for backup at some
92point in the future, though there is no hard guarantee of when that will occur. You can force
93all 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
98had called <code>BackupManager.dataChanged()</code> since the time of the last backup operation,
99plus 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
107operations execute immediately. The backup manager currently provides two kinds of restore
108operations. The first restores an entire device with the data from a given restore set. This
109is typically only performed when a device is first provisioned, to replicate settings and other
110such saved state from the user's previous device. The second kind of restore operation restores
111a single application from the <em>active</em> data set; that is, from the data set currently
112being written to by backup operations. This second form is available as part of the public API.
113It allows applications to abandon their current data and revert to the last-known-good data as
114represented 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
121list sets</code> command. <strong>Warning!</strong> This operation will <em>replace</em> the
122data of all backup-enabled applications with the contents of the given restore set. Be careful,
123and be aware of the potential consequences.
124
125<p>A single-application restore operation does not reference a restore set token; it always uses
126the data from the currently active data set. You can induce such an operation from the command
127line 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
132backup/restore mechanism. The backup manager will immediately instantiate the application's
133agent 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
139very useful during development of backup agents, in case bugs lead you to write corrupt data
140or 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
145erase. The next backup operation that the application's agent processes will look as
146though 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
153whether the operating system thinks it should be performing such operations at all. You can also
154directly 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
159equivalent 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
161the entire active data set from its backend storage. This is so that when a user says that no,
162they do not want their data backed up, the backup manager respects that wish. No further data
163will be saved from the device, and no restore operations will be possible, unless the backup
164manager is re-enabled (either through Settings or through the above <code>bmgr</code> command).
165