#!/bin/zsh
function backup
{
for f in `pm list packages -3|sed "s|package:||g"`;do
echo backing up $f
if pm path $f|sed "s|package:||g"|wc -l|grep -qw 1;then
mkdir -p /sdcard/apps/$f
cp `pm path $f|sed "s|package:||g"` /sdcard/apps/$f/$f".apk"
else
mkdir -p /sdcard/apps/$f
for g in `pm path $f|sed "s|package:||g"`;do
cp $g /sdcard/apps/$f/$f"_"`basename $g`
done
fi
echo tar -cf /sdcard/apps/$f/data.tar > /data/local/tmp/bus
for h in `echo -en /data/data/$f /sdcard/Android/data/$f /sdcard/Android/obb/$f /sdcard/Android/media/$f`;do
if [ -e $h ];then
echo $h >> /data/local/tmp/bus
fi
done
cat /data/local/tmp/bus|tr \\n \  > /data/local/tmp/bu
rm /data/local/tmp/bus
chmod 700 /data/local/tmp/bu
/data/local/tmp/bu
rm /data/local/tmp/bu
done
}
function restore
{
cd /
base64 -d > /data/local/tmp/splitinstaller<<EOF
ZXhwb3J0IGluc3RpZD1gcG0gaW5zdGFsbC1jcmVhdGUgLWkgY29tLmFuZHJvaWQudmVuZGluZ3xz
ZWQgInN8U3VjY2VzczogY3JlYXRlZCBpbnN0YWxsIHNlc3Npb258fGc7c3xcW3x8ZztzfFxdfHxn
ImAKZm9yIGYgaW4gYGVjaG8gLW4gJEBgO2RvCmV4cG9ydCBzaXplPWB3YyAtYyAkZnxjdXQgLWYg
MSAtZCBcICBgCmV4cG9ydCBzcG5hbWU9YGVjaG8gJGZ8fHNlZCAic3wuYXBrfHxnImAKY2F0ICRm
fHBtIGluc3RhbGwtd3JpdGUgLVMgJHNpemUgJGluc3RpZCAkc3BuYW1lIC0KZG9uZQpwbSBpbnN0
YWxsLWNvbW1pdCAkaW5zdGlkCg==
EOF
chmod 700 /data/local/tmp/splitinstaller
for f in `ls /sdcard/apps/*/data.tar|sed "s|\/sdcard\/apps\/||g;s|\/data.tar||g"`;do
if [ -e $f ];then
sleep .01
else
echo installing $f
if ls /sdcard/apps/$f/*.apk|wc -l|grep -qw 1;then
cp /sdcard/apps/$f/$f".apk" /data/local/tmp/$f".apk"
pm install /data/local/tmp/$f".apk"
rm /data/local/tmp/$f".apk"
else
cp /sdcard/apps/$f/*.apk /data/local/tmp
cd /data/local/tmp
./splitinstaller *.apk
rm /data/local/tmp/*.apk
cd /
fi
fi
export uid=`ls -ln /data/data|grep -w $f|tail -n 1|cut -f 4 -d \  `
echo restoring $f with uid $uid
tar -xf /sdcard/apps/$f/data.tar
for h in `echo -en /data/data/$f /sdcard/Android/data/$f /sdcard/Android/obb/$f /sdcard/Android/media/$f`;do
if [ -e $h ];then
chown -R $uid:$uid $h
restorecon -R -D -F $h
fi
done
done
rm /data/local/tmp/splitinstaller
}
export execname=`basename $0`
case "$execname" in
backup)
backup
;;
restore)
restore
;;
*)
echo please rename $execname to backup or restore.
exit 48
;;
esac
