#!/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