Android | Utilice ADB para realizar una copia de seguridad y restaurar los datos de prueba locales de Tuan Chau | Octubre de 2020

Además de hacer que ADB sea más útil para probar y depurar aplicaciones de Android, hoy me gustaría presentar un pequeño truco para realizar copias de seguridad y restaurar datos locales para las pruebas.

Probar datos al depurar una aplicación incrustada es tan importante como los datos reales aequipo de servidor. ¿Alguna vez ha tenido que borrar los datos de la aplicación para ejecutar una aplicación de depuración? ¿O alguna vez ha trabajado en paralelo para depurar y lanzar versiones y tiene diferentes versiones de la base de datos? Si la respuesta es SÍ (estoy seguro de que la mayoría de nosotros lo hacemos). Duele, especialmente cuando los datos están relacionados con una fecha u hora (la interfaz de usuario difiere para los elementos creados el mes pasado y hoy); o es difícil y lleva algún tiempo crear datos de prueba (como crear cuentas nuevas).

Retrocedamos

package=<app.package>
device_path="zzzBackup" # use any name you like
backup_time=$(date +%F_%H-%M-%S)
backup_version=
$(adb shell dumpsys package $package
| grep versionName | sed -E "s/ versionName=//")
echo "Backup version:===$backup_version==="separator="__version_"
backup_path="$device_path/$backup_time$separator$backup_version"
echo Backup to "$backup_path"
adb shell "run-as $package mkdir -p $backup_path"adb shell "run-as $package cp -a shared_prefs $backup_path"
adb shell "run-as $package cp -a databases $backup_path"

Con este script, se creará una nueva carpeta en la carpeta de datos de la aplicación y será el directorio raíz de todos los datos (/data/data/app.package) retrocedemos (zzzBackup). De hecho, puede utilizar una ruta externa, por ejemplo /sdcard/Download/Backup para device_path para que pueda comprobarlo con el Explorador de archivos. Desafortunadamente, no funciona en dispositivos Samsung o Android 11.

El script usa la fecha, la hora y la versión de la aplicación para crear la carpeta de la versión de respaldo. La carpeta se creará de la siguiente manera:

2020-09-28_15-30-27__version_1.1.0

Una cosa más, el script hace una copia de seguridad solo de los dos directorios principales de la aplicación que tendrán casi la mayoría de las aplicaciones (shared_prefs y databases). Puede agregar otras carpetas que desee o simplemente necesita hacer una copia de seguridad de todas . . Sin embargo, hacer una copia de seguridad de todo puede generar un error de permiso o ralentizarse debido a una pérdida de caché o carpeta canaria (si está utilizando fuga canario).

Restaurar

package=<app.package>

device_path="zzzBackup"
restore_path="$device_path/$1"

echo "Restore from $restore_path"

adb shell am force-stop $package

adb shell "run-as $package rm -rf shared_prefs" # Clean app's data
adb shell "run-as $package rm -rf databases" # Clean app's data

adb shell "run-as $package cp -a $restore_path/shared_prefs ."
adb shell "run-as $package cp -a $restore_path/databases ."

Necesitamos garantizar dos cosas en el script de recuperación. El primero es device_path, debe tener el mismo valor que la ruta en el script de respaldo. Estos últimos son directorios respaldados.

Vistazo

Es difícil recordar todas las copias de seguridad, por lo que necesitamos un tercer script para comprobar qué copia de seguridad tenemos.

package=jp.naver.line.android
device_path="zzzBackup"
adb shell "run-as $package ls $device_path"

De nuevo, debemos garantizar device_path valor.

Eso es todo para realizar copias de seguridad y restaurar. Ejecutemos estos scripts juntos

sh backup.sh
sh browse.sh
sh restore.sh 2020-09-28_15-30-27__version_1.1.0

Happy tuning y MAGA: haz que ADB sea grandioso nuevamente

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *