Las aplicaciones no se instalan con adb restore

Tengo un dispositivo Android 7.0 no rooteado (NVIDIA Shield Tablet) que anteriormente fue respaldado con

adb backup -apk -shared -all -nosystem -f mybackup.ab

Pero restaurarlo con

adb restore mybackup.ab

da como resultado que /Android/data, etc., se restauran, pero las aplicaciones no se instalan desde archivos apk, no hay errores.

Tuve que extraer archivos apk de mybackup.ab e instalarlos manualmente por lotes con adb install <...>.apk. Después de eso todo estuvo bien.

Estoy bastante seguro de que anteriormente tuve un problema similar con 6.0. y helio/carbono antes, pero pensé que era específico del método de copia de seguridad que había elegido.

¿Cuál es el problema adb restore? ¿Es porque el dispositivo no está rooteado? ¿Por qué adb installfunciona como se esperaba entonces?

@SkylarMT Todavía no. Todavía tengo que usar adb installen lote. Espero que alguien pueda ayudar en esto.
Tuve un éxito parcial al usar Titanium Backup para restaurar el archivo de copia de seguridad adb. Requiere root y no obtuvo todo, pero restauró más de la mitad de las aplicaciones que había instalado.
A ver si esta solución ayuda

Respuestas (3)

He adaptado un poco el script de niels para solucionar algunos problemas con él:

#!/bin/bash

set -e

if [ $# -ne 1 ]; then
  echo "Usage: $0 <package-name>"
  exit 1
fi

echo -n "Enter password: "
read -s password
echo

java -jar abe.jar unpack $1 $1.tar "$password"
tar -xf $1.tar --wildcards '*/base.apk'
rm $1.tar
for apk in apps/**/a/base.apk; do
  adb install "$apk" || true
done

adb restore $1

echo "Ready"

Simplemente descargue la última versión abe.jarde https://github.com/nelenkov/android-backup-extractor/releases y ejecute el script con su archivo de copia de seguridad como argumento. El script requiere javaser instalado.

Lo resolví con el siguiente script.

#!/bin/bash
killall adb > /dev/null 2>&1
set -e

if [ $# -ne 1 ]; then
  echo "Usage: $0 <package-name-without-ab>"
  exit 1
fi

export PATH=/opt/jdk1.8.0_152_jce/jre/bin:$PATH
ab=$1.ab
java -jar /opt/android-backup-extractor-20160710-bin/abe.jar unpack $ab $ab.tar apw; tar -xf $ab.tar --wildcards '*.apk' --strip-components=3
mv base.apk $ab.apk
rm $ab.tar
adb install $ab.apk

adb restore $ab

echo "Ready"

Además, necesita el extractor de copia de seguridad de Android. Sin embargo, en mi experiencia, la copia de seguridad de adb todavía no es realmente segura. En primer lugar, algunas aplicaciones pueden establecer una bandera, por lo que no serán una copia de seguridad. Y la restauración solo funciona a veces y no estoy seguro, por ejemplo, si cambia el dispositivo. Es una pena que en 2018 solo Titanium Backup haga un buen trabajo, si tiene un teléfono rooteado.

Huawei Backup también hace un buen trabajo en los teléfonos Huawei. Pero lejos de Titanium :-(

Los comandos adb restoreno se instalan .apk de nuevo. En realidad, este comando solo es reescribir archivos del sistema y de datos. - Sitio de desarrollo de Android

Si desea automatizar el proceso de instalación de aplicaciones:

  1. Agregue todos los .apk extraídos a una carpeta
  2. Escriba for %f in (C:\_apk folder location_\*.apk) do adb install "%f"NOTA: si tiene archivos .apk que tienen "espacios" en sus nombres adb no reconoce los espacios , reescríbalos con _ o cualquier otra cosa.
¿Puede especificar la referencia de esta información si es correcta? Dado que realiza adb backupuna copia de seguridad de todo, incluidas las aplicaciones, esperaría que adb restorehaga lo contrario. Porque de lo contrario, parece que los apks simplemente desperdician espacio en el archivo .ab.
En la tabla 1.> Comandos de copia de seguridad y restauración en el sitio de desarrollo de Android, el comando se adb restoredescribe como "Restaurar el contenido del dispositivo desde un archivo". Para mí, se interpreta como descomprimir archivos y colocarlos solo en el dispositivo, no como paquetes de instalación. Creo que tiene sentido, para la instalación fue definir el comando adb install(no necesariamente tiene la funcionalidad de instalación en otros comandos), pero estoy de acuerdo en que sería bueno :)
@MaTTBelis "Restaurar contenido del archivo" para mí significa restaurar todo lo que contiene el archivo (lo que incluye instalar el APK si está allí). Y hasta MM hizo exactamente eso (estoy usando esto desde Android 4, cuando se introdujo). Los problemas comenzaron solo con Android 7, donde un error parece impedir la instalación del APK. En algunos dispositivos, encuentra en logcat que intenta exactamente eso (pero falla sin decirlo). En realidad, para esos dispositivos funciona la respuesta de Nils .