mrrfv / open-android-backup

Back up your device without vendor lock-ins, using insecure software or root. Supports encryption and compression out of the box. Works cross-platform.
http://openandroidbackup.me/
GNU General Public License v3.0
674 stars 37 forks source link

A postinstall data breaks backup due to `set -e` #44

Closed bitstreamout closed 1 year ago

bitstreamout commented 1 year ago

Device info

Manufacturer: Nokia Android version: 10.0 Custom ROM/rooted? No Model: 7 plus

System info

Available disk space: 539213824 kB Operating system: Linux ... openSUSE Leap 15.3


Describe the issue below.

The command ./backup.sh stops at the line

adb: error: failed to stat remote object '/data/preloads/apps-postinstall/GoogleHandWritingIME/GoogleHandWritingIME.apk': Permission denied

just listed all apps an indeed this is the only one

Nokia/linux-android-backup-master> adb shell pm list packages -3 -f | grep apps-postinstall
package:/data/preloads/apps-postinstall/GoogleHandWritingIME/GoogleHandWritingIME.apk=com.google.android.apps.handwriting.ime

will try to add an exception for this postinstall in the list

bitstreamout commented 1 year ago

Here a first workaround ... guess: tar would also work with this method, but due to the visible error I've choosen the adb method

Simple workaround

---
 backup.sh |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--- backup.sh
+++ backup.sh   2022-12-25 14:10:06.041313595 +0000
@@ -74,7 +74,7 @@ function get_file() {
   if [ "$export_method" = 'tar' ]; then
     adb exec-out "tar -c -C $1 $2 2> /dev/null" | pv -p --timer --rate --bytes | tar -C $3 -xf -
   else # we're falling back to adb pull if the variable is empty/unset
-    adb pull $1/$2 $3
+    adb pull $1/$2 $3 || echo "Can not backup $2 ignoring it" 1>&2
   fi
 }

@@ -221,7 +221,7 @@ then
       # apk_path=/data/app/~~4wyPu0QoTM3AByZS==/com.whatsapp-iaTC9-W1lyR1FxO==/base.apk
       # apk_base=47856542.apk
       get_file $(dirname $apk_path) $(basename $apk_path) ./backup-tmp/Apps
-      mv ./backup-tmp/Apps/$(basename $apk_path) ./backup-tmp/Apps/$apk_base
+      mv ./backup-tmp/Apps/$(basename $apk_path) ./backup-tmp/Apps/$apk_base || echo "Not found $(basename $apk_path)" 1>&2
     )
   done
mrrfv commented 1 year ago

I'll consider adding this workaround.