From 406dffaad72ff5f43bb8cbb4f756517c3ae0a0ff Mon Sep 17 00:00:00 2001 From: myroad94 Date: Sun, 6 Dec 2020 23:36:57 +0100 Subject: [PATCH 1/3] backup.sh: handle pkg only existing in other user --- backup.sh | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/backup.sh b/backup.sh index 4463b82..f164ce5 100644 --- a/backup.sh +++ b/backup.sh @@ -6,9 +6,9 @@ set -e uid=$1 shift -pkg=$1 +pkgarg=$1 -if [ -z "$uid" -o -z "$pkg" ]; then +if [ -z "$uid" -o -z "$pkgarg" ]; then echo "Usage $0 " exit 0 fi @@ -22,11 +22,6 @@ pkgs="$*" uids="$uid" alluids=0 -# Backup all installed packages? -if [ "$pkg" = "all" ]; then - pkgs="$(pm list packages | cut -f2 -d':')" -fi - if [ "$uid" = "all" ]; then alluids=1 uids="$(pm list users | grep 'UserInfo' | cut -f1 -d':' | cut -f2 -d'{')" @@ -35,6 +30,12 @@ fi for uid in $uids; do echo "Creating backup for uid $uid.." mkdir -p $base/data/$uid + + # Backup all installed packages? + if [ "$pkgarg" = "all" ]; then + pkgs="$(pm list packages --user "$uid" | cut -f2 -d':')" + fi + for pkg in $pkgs; do if [ -f /data/app/$pkg-*/base.apk ]; then echo " Backing up pkg $pkg.." From 214c207667ec25d1e65469133dc1cf6e2c2ddacd Mon Sep 17 00:00:00 2001 From: myroad94 Date: Sun, 6 Dec 2020 23:41:04 +0100 Subject: [PATCH 2/3] backup.sh: new accounts_Xe.db + tar for permission --- backup.sh | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/backup.sh b/backup.sh index f164ce5..694883a 100644 --- a/backup.sh +++ b/backup.sh @@ -65,15 +65,27 @@ for uid in $uids; do fi done echo "done." + # This is for old Android. if [ -f "/data/system/users/$uid/accounts.db" ]; then echo "Creating backup of accounts.db .." - cp /data/system/users/$uid/accounts.db $base/data/$uid/ + tar -cf "$base/data/$uid/accounts.db.tar" "/data/system/users/$uid/accounts.db" + echo "done." + fi + # Newer Android (like Android 9). + if [ -f "/data/system_ce/$uid/accounts_ce.db" ]; then + echo "Creating backup of accounts_ce.db .." + tar -cf "$base/data/$uid/accounts_ce.db.tar" "/data/system_ce/$uid/accounts_ce.db" + echo "done." + fi + if [ -f "/data/system_de/$uid/accounts_de.db" ]; then + echo "Creating backup of accounts_de.db .." + tar -cf "$base/data/$uid/accounts_de.db.tar" "/data/system_de/$uid/accounts_de.db" echo "done." fi done if [ -f "/data/system/sync/accounts.xml" ]; then - echo "Creating backup of accounts.xml .." - cp /data/system/sync/accounts.xml $base/data/ + echo "Creating backup of accounts.xml ..." + tar -cf "$base/data/accounts.xml.tar" "/data/system/sync/accounts.xml" echo "done." fi From d1948fb49af7ef7b5c48c28140737e2840f6e312 Mon Sep 17 00:00:00 2001 From: myroad94 Date: Sun, 6 Dec 2020 23:55:26 +0100 Subject: [PATCH 3/3] restore.sh: do not restore pkg depending on user --- restore.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/restore.sh b/restore.sh index 15b0015..f91d2e1 100644 --- a/restore.sh +++ b/restore.sh @@ -37,6 +37,11 @@ for uid in $uids; do echo "Restoring backup for uid $uid.." for pkg in $pkgs; do [ -z "$pkg" ] && ( echo "Missing pkg"; exit 1) + # Testing if for this user, data existed, or if app was installed but disabled. + if ( [ ! -f "$base/data/$uid/$pkg-user.tar" ] ) && ( [ ! -f "$base/data/$uid/$pkg.disabled" ] ) ; then + # The app didn't exist for the user (neither in enabled nor disabled form). Stop the current iteration and proceed to the next pkg. + continue 1 + fi echo " Restoring pkg $pkg.." if [ -f "$base/apks/$pkg.apk" ]; then if [ -z "$(pm list package $pkg)" ]; then