First commit

This commit is contained in:
Yorick Barbanneau 2018-11-08 00:37:08 +01:00
commit 00b4d46db6
3 changed files with 174 additions and 0 deletions

153
restore.sh Executable file
View file

@ -0,0 +1,153 @@
#!/bin/bash
source ./lib/message/message.sh
DATADIR="/data/data"
PHONE_TMPDIR="/sdcard/tmp"
TMPDIR="/tmp/a_restore"
SYSTEM_PART="/dev/block/mmcblk0p14"
DEBUG=0
DRYRUN=""
CURRENT_DIR=$(pwd)
process_args () {
while :; do
case $1 in
-h|-\?|--help)
usage
exit 0
;;
v|--version)
show_version
exit 0
;;
-d|--debug)
DEBUG=1
;;
--dry-run)
DRYRUN="echo"
;;
*)
debug "folder : $1"
[[ ! -d "$1" ]] && error "You must specify a folder" "fatal"
cd "$1"
break
esac
shift
done
}
usage () {
msg "\n**Android App Restore script for oandbackup**\n"
msg "This script restore backup made by oandbackup\n\n"
msg "__USAGE__ :\n"
msg "$0 -d --dry-run <folder>\n"
msg "-d\t\tactivate debug mode\n"
msg "--dry-mode\tdo nothing\n"
msg "\n"
}
show_version () {
msg "\nversion 0.01A\n"
}
clean () {
msg "\n\nTerminating script ..."
msg "\nCleaning phone temp directory : "
$ADB_EXE shell "rm -rf $PHONE_TMPDIR" 2> /dev/null
[[ $? -eq 0 ]] && msg "green" "Ok\n" || msg "red" "Error"
msg "\nCleaning local temp directory : "
rm -rf $TMPDIR
[[ $? -eq 0 ]] && msg "green" "Ok\n" || msg "red" "Error\n"
exit 0
}
trap clean 2
process_args $@
GPG_EXE=$(which gpg)
ADB_EXE=$(which adb)
ZIP_EXE=$(which unzip)
[[ -z $GPG_EXE ]] && error "gpg executable not found"
[[ -z $ADB_EXE ]] && error "adb executable not found"
[[ -z $ZIP_EXE ]] && error "unzip executable not found"
if [ ! -z $DRYRUN ]
then
GPG_EXE="debug $GPG_EXE"
ADB_EXE="debug $ADB_EXE"
ZIP_EXE="debug $ZIP_EXE"
fi
$ADB_EXE shell "mkdir $PHONE_TMPDIR" 2> /dev/null
msg "**Android Restore App**\n\n"
msg "**Pass 1** Install Application\n"
mkdir -p $TMPDIR
for d in $(ls -d */)
do
mkdir -p ${TMPDIR}/${d}
msg "\tInstall __${d}__ : "
cd "$d"
[[ -f base.apk.gpg ]] && $GPG_EXE --decrypt --no-verbose base.apk.gpg > ${TMPDIR}/${d}base.apk 2> /dev/null
if [ -f ${TMPDIR}/${d}base.apk ]
then
$ADB_EXE push ${TMPDIR}/${d}base.apk ${PHONE_TMPDIR}/base.apk > /dev/null || (msg "red" "Error in adb push\n"; cd ..; continue)
else
msg "red" " no application to restore \n"
cd ..
continue
fi
#I've got some problem with adb install ...
[[ -z $DRYRUN ]] && ret=$(adb install ${TMPDIR}/${d}base.apk)
[[ "$ret" -eq "Success" ]] && msg "green" " installed\n" || msg "red" " error\n"
$ADB_EXE shell "rm ${PHONE_TMPDIR}/base.apk"
cd ..
done
msg "\nAll installations done, reboot phone into recovery\n"
$ADB_EXE reboot recovery
msg "When recovery is ready, press space to continue..."
while true; do
IFS= read -s -n1 -r key
[[ $key == ' ' ]] && break
done
#Mount system partition to avoid error in ls
$ADB_EXE shell "mount $SYSTEM_PART /system"
sleep 2
msg "\n\n**Pass 2** Restore apps data\n"
for d in $(ls -d */)
do
msg "\tRestore data for __${d}__ : "
cd $d
mkdir -p ${TMPDIR}/${d}
datafile=$(find . -type f -name "*.zip.gpg")
if [ -z $datafile ]
then
basename=$(basename ${d}).zip
[[ -z $basename ]] && error "Can't found data file"
else
basename=$(basename $datafile .gpg)
$GPG_EXE --no-verbose --decrypt $datafile > ${TMPDIR}/${d}$basename 2>/dev/null
fi
$ZIP_EXE -qq ${TMPDIR}/${d}$basename -d ${TMPDIR}/${d} || (msg "red" "Can't extract $basename\n"; cd ..; continue)
#get app user and group
user=$($ADB_EXE shell "ls -dla ${DATADIR}/${d}" | awk '{print $3}')
if [ ! -z $user ]
then
msg "found user **$user** "
$ADB_EXE push ${TMPDIR}/${d}${d}* $DATADIR/${d} >/dev/null
$ADB_EXE shell "chown -R $user:$user ${DATADIR}/${d}*" && msg "green" "Done\n" || error "red" "can't chown\n"
else
warning "Can't found user"
fi
cd ..
done
clean