LoginSignup
1
3

More than 5 years have passed since last update.

adb backupで 全てのアプリをAPK毎にバックアップする。

Last updated at Posted at 2016-12-22
1 / 5

adb backupの問題点

※今回adbのバックアップについては言及しません。

adbを使って全てのアプリをバックアップするには -all オプションを指定する事で可能(2016/12/22時点)ですが、この方法だと、install済みのアプリが多い場合は特に、backupfileが巨大なファイルになりえます。

-apkオプションを使えば個別にバックアップ可能ですが、package名を指定する必要があり、一つ一つ手動で指定するには億劫です。


書いてみた

backup_package.sh

FILENAME="packages.txt"

adb shell pm list package > ./$FILENAME;
echo "packages list output to ./$FILENAME";

cat ./$FILENAME | sed -e 's/package://g' | while read LINE;do
 APKNAME=`echo ${LINE} | tr -d '\r'`

if [ ! -e $APKNAME.ab ]; then

  echo "backup start : ${APKNAME}";
  adb backup -apk $APKNAME -shared -f $APKNAME.ab;
  echo "backup complete :  ${APKNAME} \n";

else

  echo "$APKNAME.ab is already backup. skip this line.";

fi

done

簡単なフローですが、
adb shell pm list package とするとintall済みアプリのpackege名一覧が取得できるようなので、カレントディレクトリに packages.txtとして出力します。
その一覧を元に、{package}.abとしてカレントディレクトリに出力していきます。


今後改善したい点

adb backup -apk $APKNAME -shared -f $APKNAME.ab; が呼ばれる度に端末側で
backup承認画面が表示され[BACK UP MY DATA]を押す必要があります。
-f 等でこの承認skipできればいいのですが、最適解は見いだせていません。


おまけ

端末に依存すると思いますが、よくbackupができていないのか 46byteのファイルが生成されるケースが確認できました。
そんな時は再度adb backup を走らせたいので、以下のように50byte以下のファイルを消しています。

find . -maxdepth 1 -size -50c | xargs ls -la

find . -maxdepth 1 -size -50c | xargs rm -f

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3