J'ai deux appareils qui ont respectivement Android 5.0.2 et 6.0.1. J'aimerais migrer certaines applications non-cloud de l'appareil avec la version Android la plus ancienne vers le nouveau en utilisant adb
. La commande de sauvegarde est simple :
adb backup -apk -f foo.bar.baz.ab foo.bar.baz
Maintenant, après avoir connecté l'appareil avec la nouvelle version d'Android, la commande suivante devrait fonctionner :
adb restore foo.bar.baz.ab
Malheureusement, ce n'est pas le cas. Comme d'habitude, le processus de restauration échoue en silence, signalant simplement que le processus de restauration est terminé. En fait, rien ne se passe vraiment. Voici les journaux :
adb logcat -s BackupManagerService
08-27 01:02:44.100 1300 2300 I BackupManagerService : Début de la restauration complète...
08-27 01:02:44.100 1300 2300 D BackupManagerService : Démarrage de l'interface utilisateur de confirmation de restauration, token=1956031088
08-27 01:02:44.120 1300 2300 D BackupManagerService : Waiting for full restore completion...
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 : --- Exécution d'une restauration complète du jeu de données ---
08-27 01:02:45.680 1300 18181 I BackupManagerService : Le paquet foo.bar.baz n'est pas installé ; nécessite apk dans le jeu de données.
08-27 01:02:45.680 1300 18181 D BackupManagerService : Fichier APK ; installation
08-27 01:02:45.680 1300 18181 D BackupManagerService : Installation à partir de la sauvegarde : foo.bar.baz
08-27 01:02:45.690 1300 18181 E BackupManagerService : Impossible de transcrire l'apk restauré pour l'installation
08-27 01:02:45.690 1300 18181 E BackupManagerService : Parse error in header : Nombre non valide dans l'en-tête : '' pour le radix 8
08-27 01:02:45.710 1300 18181 W BackupManagerService : exception io sur la lecture de la socket de restauration
08-27 01:02:45.710 1300 18181 W BackupManagerService : java.io.IOException : Nombre invalide dans l'en-tête : '' pour 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 : Traitement de la restauration complète terminé.
08-27 01:02:45.720 1300 18181 D BackupManagerService : Passe de restauration complète terminée.
Il semble quelque peu étrange que le même format de sauvegarde ne puisse pas être restauré sur un appareil plus récent. J'ai également essayé de reconditionner l'archive tarball sous-jacente à l'aide de nelenkov/android-backup-extractor
en conservant le même ordre des fichiers ( tar cvf ... -T files.lst
) en espérant que l'en-tête cassé soit réparé. Pas de chance.
Quelle est la cause d'un tel comportement de sauvegarde/restauration et comment puis-je résoudre le problème pour migrer l'application de l'ancien appareil vers le nouveau ? Toute aide est la bienvenue hautement J'apprécie et je vous remercie d'avance.
- Android Debug Bridge version 1.0.31
- LG Optimus E975, Android 5.0.2, CyanogenMod 12-2015...
- Samsung Galaxy S5, Android 6.0.2, flashé vers un firmware stock Sprint plus récent (initialement Android 5.0.x plus tôt)