aboutsummaryrefslogtreecommitdiffstats
path: root/bin/androidbackup.sh
diff options
context:
space:
mode:
Diffstat (limited to 'bin/androidbackup.sh')
-rwxr-xr-xbin/androidbackup.sh143
1 files changed, 143 insertions, 0 deletions
diff --git a/bin/androidbackup.sh b/bin/androidbackup.sh
new file mode 100755
index 0000000..ee95f01
--- /dev/null
+++ b/bin/androidbackup.sh
@@ -0,0 +1,143 @@
+#!/bin/bash
+
+if [ -e $HOME/bin/functions.sh ]
+then
+ . $HOME/bin/functions.sh
+else
+ exit 0
+fi
+
+## CONFIGURATION
+ADB=adb
+
+function help()
+{
+ echo "Android data backup/restore"
+ echo "Usage:"
+ echo -e "\t [backup|restoredata|restoreapk] [device]"
+ exit 0
+}
+
+function _backup()
+{
+ adb -s $DEVICE pull /data/system/packages.list .
+ cat packages.list | while read line
+ do
+ read name dir <<< $(echo $line | awk '{ print $1 " " $4 }')
+ #echo $dir
+ apk=$($ADB shell bash -c "ls /data/app/${name}* 2> /dev/null")
+ if [ -n $exists ]
+ then
+ echo $name $apk
+ else
+ echo LALALALALAAA $name
+ fi
+ echo ""
+ done
+}
+
+function _restoreapk() {
+ mkdir -p done skipped
+ apps=$(ls -1 | grep -c apk)
+ num=1
+ for i in *.apk
+ do
+ if [ $i = "done" -o $i = "skipped" ]
+ then
+ continue
+ fi
+ echo_green "Application $i ($num/$apps)"
+
+ name=$(echo $i | sed 's/-[0-9].apk//')
+ existing=$($ADB shell sh -c "ls /data/app*/${name}* 2> /dev/null")
+ echo $existing
+ if [ -n "$existing" ]
+ then
+ echo $i already installed
+ mv $i skipped
+ continue
+ fi
+ echo " Restore apk? [1|0] (default 1)"
+ echo -en " "
+ read inst
+ inst=${inst:=1}
+
+ if [ $inst -eq 1 ]
+ then
+ $ADB install $i
+ mv $i done
+ else
+ echo -e " Skipping...\n\n"
+ mv $i skipped
+ fi
+ let num=num+1
+ done
+}
+
+function _restoredata()
+{
+ mkdir -p done skipped
+ apps=$(ls -l | grep -v skipped | grep -v done | grep -c '^d')
+ num=1
+ for i in *
+ do
+ if [ $i = "done" -o $i = "skipped" ]
+ then
+ continue
+ fi
+
+ echo_green "Application $i ($num/$apps)"
+ if [ $(adb shell ls -l /data/data | grep -c $i) -lt 1 ]
+ then
+ echo_red " not installed, skipping.\n\n"
+ mv $i skipped
+ continue
+ fi
+
+ echo " Restore data? [1|0] (default 0)"
+ echo -en " "
+ read inst
+ inst=${inst:=0}
+
+ if [ $inst -eq 1 ]
+ then
+ if [ $i = "com.android.providers.telephony" ]
+ then
+ echo -e "SMS/CALLS"
+ $ADB push $i/databases/mmssms.db /data/data/$i/databases
+ $ADB shell chmod 660 /data/data/$i/databases/mmssms.db
+ $ADB shell toolbox chown 1001:1001 /data/data/$i/databases/mmssms.db
+ $ADB shell killall system_server
+ mv $i done
+ else
+ own=$($ADB shell ls -l /data/data/ | grep $i | head -n 1 | awk '{ print $3}')
+ echo -e " User $own\n\n"
+ mute $ADB push $i /data/data/$i
+ mute $ADB shell chown $own:$own /data/data/$i/*
+ mute $ADB shell chown $own:$own /data/data/$i/*/*
+ mute $ADB shell chown $own:$own /data/data/$i/*/*/*
+ mv $i done
+ fi
+ else
+ echo -e " Skipping...\n\n"
+ mv $i skipped
+ fi
+ let num=num+1
+ done
+}
+
+case $1 in
+ backup)
+ _backup
+ ;;
+ restoredata)
+ _restoredata
+ ;;
+ restoreapk)
+ _restoreapk
+ ;;
+ *)
+ help
+ exit 0
+ ;;
+esac