Tengo dos dispositivos que tienen Android 5.0.2 y 6.0.1 respectivamente. Me gustaría migrar algunas aplicaciones que no están en la nube desde el dispositivo con la versión de Android más antigua a la nueva utilizando adb
. El comando de copia de seguridad es sencillo:
adb backup -apk -f foo.bar.baz.ab foo.bar.baz
Ahora, después de conectar el dispositivo con la nueva versión de Android, se espera que el siguiente comando funcione:
adb restore foo.bar.baz.ab
Desgraciadamente no es así. Como es habitual, el proceso de restauración falla silenciosamente sólo informando que el proceso de restauración ha terminado. En realidad no pasa nada. Aquí están los registros:
adb logcat -s BackupManagerService
08-27 01:02:44.100 1300 2300 I BackupManagerService: Comenzando la restauración completa...
08-27 01:02:44.100 1300 2300 D BackupManagerService: Iniciando la interfaz de confirmación de la restauración, token=1956031088
08-27 01:02:44.120 1300 2300 D BackupManagerService: Esperando la finalización de la restauración completa...
08-27 01:02:45.650 1300 2450 D BackupManagerService: acknowledgeFullBackupOrRestore : token=1956031088 allow=true
08-27 01:02:45.660 1300 18181 I BackupManagerService: --- Realizando la restauración del conjunto de datos completo ---
08-27 01:02:45.680 1300 18181 I BackupManagerService: El paquete foo.bar.baz no está instalado; requiere apk en el conjunto de datos
08-27 01:02:45.680 1300 18181 D BackupManagerService: Archivo APK; instalando
08-27 01:02:45.680 1300 18181 D BackupManagerService: Instalando desde la copia de seguridad: foo.bar.baz
08-27 01:02:45.690 1300 18181 E BackupManagerService: No se puede transcribir el apk restaurado para su instalación
08-27 01:02:45.690 1300 18181 E BackupManagerService: Error de análisis en la cabecera: Número inválido en la cabecera: '' para el radix 8
08-27 01:02:45.710 1300 18181 W BackupManagerService: io exception on restore socket read
08-27 01:02:45.710 1300 18181 W BackupManagerService: java.io.IOException: Número inválido en la cabecera: '' para radix 8
08-27 01:02:45.710 1300 18181 W BackupManagerService: at com.Android.server.backup.BackupManagerService$PerformAdbRestoreTask.extractRadix(BackupManagerService.java:7380)
08-27 01:02:45.710 1300 18181 W BackupManagerService: at com.Android.server.backup.BackupManagerService$PerformAdbRestoreTask.readTarHeaders(BackupManagerService.java:7179)
08-27 01:02:45.710 1300 18181 W BackupManagerService: at com.Android.server.backup.BackupManagerService$PerformAdbRestoreTask.restoreOneFile(BackupManagerService.java:6396)
08-27 01:02:45.710 1300 18181 W BackupManagerService: at com.Android.server.backup.BackupManagerService$PerformAdbRestoreTask.run(BackupManagerService.java:6254)
08-27 01:02:45.710 1300 18181 W BackupManagerService: at java.lang.Thread.run(Thread.java:818)
08-27 01:02:45.710 1300 2300 I BackupManagerService: Procesamiento de restauración completa completado.
08-27 01:02:45.720 1300 18181 D BackupManagerService: Pase de restauración completo completado.
Parece algo extraño que no se pueda restaurar el mismo formato de copia de seguridad en un dispositivo más nuevo. También he intentado volver a empaquetar el tarball subyacente utilizando nelenkov/android-backup-extractor
conservando el mismo orden de los archivos ( tar cvf ... -T files.lst
) con la esperanza de que la cabecera rota sea reparada. No hubo suerte.
¿Qué es lo que provoca ese comportamiento de copia de seguridad/restauración y cómo puedo resolver el problema para migrar la aplicación del dispositivo antiguo al nuevo? Cualquier ayuda es altamente apreciado y gracias de antemano.
- Android Debug Bridge versión 1.0.31
- LG Optimus E975, Android 5.0.2, CyanogenMod 12-2015...
- Samsung Galaxy S5, Android 6.0.2, flasheado a un firmware más reciente de Sprint (inicialmente Android 5.0.x anterior)