|
9 | 9 | OUTDIR="$1"
|
10 | 10 | fi
|
11 | 11 |
|
| 12 | +if [ ! -d "$OUTDIR" ]; then |
| 13 | + mkdir -p "$OUTDIR" || { |
| 14 | + echo "Output directory does not exist, and I cannot create it. Sorry." |
| 15 | + echo |
| 16 | + exit |
| 17 | + } |
| 18 | +fi |
| 19 | + |
12 | 20 | # Configuration
|
13 | 21 | #OUTDIR='.'
|
| 22 | +USERDIR="userApps" |
| 23 | +SYSDIR="sysApps" |
14 | 24 |
|
15 | 25 | #########################################[ Helpers ]###
|
16 | 26 |
|
17 | 27 | # Create script for disabled apps
|
18 | 28 | getDisabled() {
|
19 |
| - echo "#!/bin/bash" > $OUTDIR/disable |
20 |
| - echo "# Disabled apps as of $(date '+%Y-%m-%d %H:%M')" >> $OUTDIR/disable |
| 29 | + local scriptname="$OUTDIR/disable" |
| 30 | + echo "#!/bin/bash" > "${scriptname}" |
| 31 | + echo "# Disabled apps as of $(date '+%Y-%m-%d %H:%M')" >> "${scriptname}" |
| 32 | + echo >> "${scriptname}" |
| 33 | + |
21 | 34 | for app in $(adb shell "pm list packages -d"); do
|
22 | 35 | app=$(echo $app | tr -d '\r' | awk -F : '{print $2}')
|
23 |
| - echo "adb shell \"pm disable $app\"" >> $OUTDIR/disable |
| 36 | + echo "adb shell \"pm disable $app\"" >> "${scriptname}" |
24 | 37 | done
|
| 38 | + |
| 39 | + chmod u+x "${scriptname}" |
25 | 40 | }
|
26 | 41 |
|
| 42 | + |
27 | 43 | # Create script to backup all user-apps
|
28 | 44 | getUserAppBackup() {
|
29 |
| - echo "#!/bin/bash" > $OUTDIR/userbackup |
30 |
| - echo "# Backup script as of $(date '+%Y-%m-%d %H:%M')" >> $OUTDIR/userbackup |
31 |
| - echo "# Backs up all user apps including their .apk files and data" >> $OUTDIR/userbackup |
| 45 | + local backupscript="$OUTDIR/userbackup" |
| 46 | + local restorescript="$OUTDIR/userrestore" |
| 47 | + echo "#!/bin/bash" > "$backupscript" |
| 48 | + echo "# Backup script as of $(date '+%Y-%m-%d %H:%M')" >> "$backupscript" |
| 49 | + echo "# Backs up all user apps including their .apk files and data" >> "$backupscript" |
| 50 | + echo "# Feel free to comment out/remove apps you don't want/need to be backed up." >> "$backupscript" |
| 51 | + echo >> "$backupscript" |
| 52 | + echo "[ ! -d \"${USERDIR}\" ] && mkdir \"${USERDIR}\"" >> "$backupscript" |
| 53 | + echo >> "$backupscript" |
| 54 | + |
| 55 | + echo "#!/bin/bash" > "$restorescript" |
| 56 | + echo "# Restore script as of $(date '+%Y-%m-%d %H:%M')" >> "$restorescript" |
| 57 | + echo "# Restores all app backups. Comment out (or delete) those you do not wish to restore." >> "$restorescript" |
| 58 | + echo >> "$restorescript" |
| 59 | + |
32 | 60 | for app in $(adb shell "pm list packages -3"); do
|
33 | 61 | app=$(echo $app | tr -d '\r' | awk -F : '{print $2}')
|
34 |
| - echo -e "adb backup -f ${app}.ab -apk $app" >> $OUTDIR/userbackup |
| 62 | + echo -e "adb backup -f \"${USERDIR}/${app}.ab\" -apk $app" >> "$backupscript" |
| 63 | + echo "sleep 1" >> "$backupscript" # prevent ADB daemon from being "blocked" (e.g. on LG P880) |
| 64 | + echo -e "adb restore \"${USERDIR}/${app}.ab\"" >> "$restorescript" |
35 | 65 | done
|
| 66 | + |
| 67 | + chmod u+x "$backupscript" "$restorescript" |
36 | 68 | }
|
37 | 69 |
|
| 70 | + |
38 | 71 | # Create script to backup all system-app data
|
39 | 72 | getSystemAppBackup() {
|
40 |
| - echo "#!/bin/bash" > $OUTDIR/sysbackup |
41 |
| - echo "# Backup script as of $(date '+%Y-%m-%d %H:%M')" >> $OUTDIR/sysbackup |
| 73 | + local backupscript="$OUTDIR/sysbackup" |
| 74 | + local restorescript="$OUTDIR/sysrestore" |
| 75 | + echo "#!/bin/bash" > "$backupscript" |
| 76 | + echo "# Backup script as of $(date '+%Y-%m-%d %H:%M')" >> "$backupscript" |
| 77 | + echo "# Backs up the data (not the .apk files) of all your system apps" >> "$backupscript" |
| 78 | + echo "# Feel free to comment out/remove apps you don't want/need to be backed up." >> "$backupscript" |
| 79 | + echo >> "$backupscript" |
| 80 | + echo "[ ! -d \"${SYSDIR}\" ] && mkdir \"${SYSDIR}\"" >> "$backupscript" |
| 81 | + echo >> "$backupscript" |
| 82 | + |
| 83 | + echo "#!/bin/bash" > "$restorescript" |
| 84 | + echo "# Restore script as of $(date '+%Y-%m-%d %H:%M')" >> "$restorescript" |
| 85 | + echo -e "# Restores all system app data backups.\n# DRAGONS HERE: this might fail if you restore to a different\n# device/Android version/ROM, so be careful!\n# Comment out/delete what you do not wish to restore." >> "$restorescript" |
| 86 | + echo >> "$restorescript" |
| 87 | + |
42 | 88 | for app in $(adb shell "pm list packages -s"); do
|
43 | 89 | app=$(echo $app | tr -d '\r' | awk -F : '{print $2}')
|
44 |
| - echo -e "adb backup -f ${app}.ab -noapk $app" >> $OUTDIR/sysbackup |
| 90 | + echo -e "adb backup -f \"${SYSDIR}/${app}.ab\" -noapk $app" >> "$backupscript" |
| 91 | + echo "sleep 1" >> "$backupscript" # prevent ADB daemon from being "blocked" (e.g. on LG P880) |
| 92 | + echo -e "adb restore \"${SYSDIR}/${app}.ab\"" >> "$restorescript" |
45 | 93 | done
|
| 94 | + |
| 95 | + chmod u+x "$backupscript" "$restorescript" |
46 | 96 | }
|
47 | 97 |
|
48 | 98 | # Get disabled broadcast receivers
|
49 | 99 | # Requires xml2 package (apt-get install xml2)
|
50 | 100 | getFrozenComponents() {
|
51 | 101 | adb pull /data/system/packages.xml $OUTDIR/packages.xml
|
52 |
| - xml2 < $OUTDIR/packages.xml |grep "disabled-components/item/@name" > $OUTDIR/deadreceivers |
| 102 | + [ -n "$(which xml2)" ] && xml2 < $OUTDIR/packages.xml |grep "disabled-components/item/@name" > $OUTDIR/deadreceivers |
53 | 103 | }
|
54 | 104 |
|
55 | 105 | # Get settings
|
|
0 commit comments