adb backupの問題点
※今回adbのバックアップについては言及しません。
adbを使って全てのアプリをバックアップするには -all
オプションを指定する事で可能(2016/12/22時点)ですが、この方法だと、install済みのアプリが多い場合は特に、backupfileが巨大なファイルになりえます。
-apk
オプションを使えば個別にバックアップ可能ですが、package名を指定する必要があり、一つ一つ手動で指定するには億劫です。
書いてみた
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