Android端末をADBを使ってバックアップ

今回のお題は、ADB(Android Debug Bridge)というPC用のプログラムを用いた、Android端末のバックアップについてです。

ADBはAndroidアプリ開発のデバックのためのPC用のツールであり、PCと端末を接続してPCからこのツールを使用することで、端末に対して様々な操作を行うことが出来ます。
そしてその機能の1つとして、一般的なアプリケーションではバックアップ出来ないアプリやデータをPCへ直接バックアップする、というものがあります。
ここではその機能を使ったバックアップ方法と、実際に使用した際に引っかかったことなどを書いていこうと思います。

ADBプログラムの含まれたアーカイブは以下のアドレスから入手することができます。
https://developer.android.com/studio/releases/platform-tools.html

必要なもの

Android 4 以降の端末

バックアップ機能を使うためには端末側のAndroidのバージョンは4以降である必要があります。

PC (Windows、Mac、LinuxのいずれかのOS)

ADBはPC用のソフトウェアのため、パソコンが必要です。

PCと端末を接続するためのUSBケーブル

物理接続するためのケーブルです。無線での接続も出来ますが、速度と安定度を考えるとケーブルのほうが無難です。

準備

まず以下の公式ドキュメントを参考にしてUSBドライバをPCにインストールしておきます。
https://developer.android.com/studio/run/oem-usb.html

次に端末側のデバック機能を有効にします。

それからPCと端末を接続した状態で、端末側の設定から「端末(?)情報」をタップして、「ビルド番号」を7回タップします。すると設定画面に「開発者向けオプション」が追加されるので、その中の「USBデバッグ」を有効にしてください。

最後にPCと端末を接続すれば準備は完了です。

後はPCのコンソール(コマンドライン画面)からコマンドを入力することでバックアップを行えます。

バックアップ

大まかな使い方は以下の通りです。日本語の説明文は原文から意訳したものですが、誤解を招く可能性もあるので、原文を一緒に表記しました。

コマンドリファレンス
adb backup [-f <file>] [-apk|-noapk] [-obb|-noobb] [-shared|-noshared] [-all] [-system|-nosystem] [<packages…>]

端末のデータは”<file>”に指定された名前のファイルとしてアーカイブされます。Write an archive of the device’s data to <file>.

もし”-f”オプションが指定されていない場合は”backup.ab”という名前でカレントディレクトリにバックアップファイルを作成します。
If no -f option is supplied then the data is written to “backup.ab” in the current directory.

-apk|-noapk“はapkファイルのバックアップを有効にするか否かを指定します。初期設定ではバックアップをしない設定です(-noapk)。
-apk|-noapk enable/disable backup of the .apks themselves in the archive; the default is noapk.
※Tips -noapk指定ではアプリ本体はバックアップされないため、リストア時はアプリを予めインストールしておく必要があります。

-obb|-noobb“はイントールされたアプリの拡張ファイル(.obb)のバックアップを有効するか否かを指定します。初期設定ではバックアップをしない設定です(-noobb)。
-obb|-noobb enable/disable backup of any installed apk expansion(aka .obb) files associated with each application; the default is noobb.
※Tips Google Playからインストールしたアプリであれば、多くの場合後からこのデータをダウンロードすることもできるので、どちらを指定してもよいでしょう。

-shared|-noshared“はSDカードのなどのストレージに存在するコンテンツのバックアップを有効にするか否かを指定します。初期設定ではバックアップをしない設定です(-noshared)。
-shared|-noshared enable/disable backup of the device’s shared storage / SD card contents; the default is noshared.
※Tips 特定のアプリの固有データがSDカードや共有ストレージ(内部ストレージ領域)に保存されている場合は、このオプションを有効にすることでそれらのデータを含めてバックアップすることができます。

-all“は全てのインストールされたアプリをバックアップします。
-all means to back up all installed applications.

-system|-nosystem“は”-all”オプション使用時にシステムアプリのバックアップを含めるか否かを指定します。初期設定では含めます(-system)。
-system|-nosystem toggles whether -all automatically includes system applications; the default is to include system apps.
※Tips 端末によってはシステム関連のアプリは正常にバックアップやリストアが出来ない場合があります。特に異なる機器やOSにバックアップデータをリストアする可能性がある場合は無効にしておきます。

packages…“はバックアップするアプリのリストを記述します。もし”-all”や”-shared”が指定されていた場合はこの記述は無視されます。またこのアプリのリスト指定はあくまでオプションです。もし、”-nosystem”が指定されていて本来ならバックアップされないアプリも、パッケージ名が指定されている場合はバックアップ対象となります。
<packages…> is the list of applications to be backed up.  If the -all or -shared flags are passed, then the package list is optional.  Applications explicitly given on the command line will be included even if -nosystem would ordinarily cause them to be omitted.

最後に「adb backup」では、”-shared”、”-all”、若しくはアプリケーション・パッケージ名の指定が最低限必要になるので注意してください。

ADBバックアップのまとめ

実際に使用する際のことを考慮すると以下のようなオプションが考えられます。

ユーザーアプリのみ全てバックアップする: -all -nosystem -apk -obb
システムアプリを含めて全てバックアップする: -all -apk -obb (-system)

アプリ本体を除いて設定だけバックアップする場合は”-apk“を”-noapk“とする。若しくは記述しない。(この場合、リストアの際はアプリ本体は事前にインストールしておく必要あります)

アプリの追加ファイルをバックアップしない場合は”-obb“を”-noobb“とする。または記述しない。(リストア後に同データの再ダウンロードが必要になります)。

共有領域をバックアップに含める場合は”-shared“を追加する。

他にもADB Backupでバックアップできる範囲を全て指定したい場合は”-all  -apk -obb -shared“とすればいいのですが。データ量が多い場合は非常に時間が掛かるので注意が必要です。

PC上で上記のようにコマンドを入力すると端末側にバックアップを許可するかどうかの確認画面が表示されるので、「データをバックアップ」をタップすればバックアップが始まります。

リストア

リストア(復元)に関しては非常に簡単です。
adb restore アーカイブファイル名
とするだけです。
後は端末側にリストアを許可するか否かの確認画面が表示されるので、「データを復元する」をタップすればリストアが開始されます。

トラブルシューティング

バックアップやリストアに失敗する場合は、まずPCのADBプログラムから端末が正常に認識されているかどうかを確認してください。

まずコマンドラインから
adb devices
と入力して、接続しているデバイスが1つ認識されていることを確認してください。
xxx device  (xxxの部分は端末によって異なります)
と表示されていればまずはOKです。

複数のデバイスが表示される場合は
adb kill-server
と入力してADBのサーバープロセスを終了します。
それから、もう一度バックアップやリストアを実行してみてください

デバイスが表示されない場合は
adb kill-server
の後にOSから端末を取り外し出来る状態にしてUSBケーブル抜き、一度端末側の「USBデバッグ」をオフにしてから再度オンにします。そして再びUSBケーブルを繋いで、もう一度実行してみてください。

(※”adb kill-server”を実行しないで取り外しをしようとすると、OSからエラーや警告が出る場合があります。必ず取り外し前に実行してください。若しくは少し乱暴ですが、ADBのプロセスを外部から強制的に終了してもよいです)

コンソール画面になにかエラー表示がある場合は、その指示にしたがってください。

正常に接続出来ていてエラー表示もないのに問題が起きる場合は、別の可能性を考える必要があります。
ここに幾つか例をあげます。

バックアップが出来ないアプリがある場合

特定のアプリについてはバックアップが出来ない(無視される)場合があります。残念ながら該当するアプリについてはADB Backupを用いたバックアップは出来ません。

パッケージリストの指定によるバックアップが出来ない場合

端末によってはパッケージリスト指定でのバックアップに失敗します。これは端末側の制限によるものです。

リストアで固まる(処理が終わらない)

特定の環境とアプリで起きることがあります。この場合、該当するアプリのバックアップ時に”-noapk”を指定しapkファイルのバックアップをしないことで、データのリストアについては正常に行える場合があります。

特定のアプリがリストアされない

特定のアプリのリストア時に正常にリストアされずにリストア処理がそこで終了してしまうケースです。該当するアプリのバックアップ時に”-noapk”を指定した場合、アプリのデータのバックアップとリストアは正常に行えることを確認しています(ただし環境によっては、それでも失敗する場合があるかも知れません)。


上記の例のように、パッケージ(アプリ本体)のリストア時に問題が起きやすいようなので、-apk指定時のバックアップには注意が必要です。特にシステムアプリのバックアップを含む場合は-apkは指定しないほうがよいです。

ただ、バックアップ時に-apkを指定して、かつ特定のアプリのリストア処理時に処理が停止してしまう場合、本来リストア可能なアプリもリストア出来なくなってしまう場合があります。

次回はそんな時の対処方について書いていきます。

コメントを残す