アプリの個別バックアップ
前提
- USBでスマホとPCを接続しデバッグモードにしていること
- adb devicesでデバイスを認識していること
結論
for buf in $(adb shell pm list packages -e -3 | cut -d':' -f2 | sed -e 's/\r//'); adb backup -f ${buf}.ab -apk -obb ${buf}
スマホ画面からパスワードを1アプリ毎に設定することで,バックアップがPC側のカレントディレクトリに作成される.
説明
有効にしているアプリのリスト(パッケージ名)を取得
adb shell pm list packages -e
出力はこんな感じ
package:ecareme.asuswebstorage
package:skype.raider
...
出力のうち「:」より右をPKGNAMEとすると,
adb backup -f FNAME -apk -obb -shared -system PKGNAME
ここでFNAMEはバックアップファイル名で省略するとbackup.abというファイル名になる.
最近のデバイスは自動で暗号化機能がONになっているためか,パスワードを設定しないとバックアップを開始してくれないので,かなり面倒くさい.
復元は
adb restore FNAME
以上をシェルスクリプト化する.
ただ,毎回パスワード入力を求められて,やっぱし恐ろしく面倒くさい.
for buf in $(adb shell pm list packages -e -3 | cut -d':' -f2 | sed -e 's/\r//'); adb backup -f ${buf}.ab -apk -obb ${buf}
Heliumはこの辺をアンドロイドアプリとして動作させることで自動入力させているのだと思われる.
内蔵ストレージのバックアップ
前提
- 上の前提(USBでデバッグモードで接続)に加え,
- ディレクトリをpullするだけでは,文字コード問題やパス長問題が発現するので,端末上でzip圧縮して転送する.
端末上でのzip圧縮は,色々なアプリがあるので適当に.
(参考までに,私はX-plore File Managerを使っている) - /sdcardにFILE.zipが保存されているとする.例えば/sdcard/Music→/sdcard/Music.zipなどに圧縮しておいておく.無圧縮でも良い.
結論
以下でPCの/sdcard/直下にあるzipを全て落とし,削除する.
for f in $(adb shell ls /sdcard/ | grep zip | sed -e 's/\r//g'); adb pull /sdcard/$f .
for f in $(adb shell ls /sdcard/ | grep zip | sed -e 's/\r//g'); adb shell rm /sdcard/$f