1 votes

Comment migrer les données de l'application lorsque l'on change la source de l'application ?

Disons que j'ai installé "FunnyApp" sur Playstore, et qu'elle apparaît maintenant sur F-Droid - et je veux remplacer la version Playstore par celle de F-Droid (même problème dans l'autre sens). Le problème est que je ne peux pas simplement mettre à jour l'application à partir de la nouvelle source car la signature ne correspond pas (F-Droid signe avec sa propre clé). FunnyApp n'offre aucune fonctionnalité d'exportation, mais je ne veux pas perdre ses données.

Quelles seraient les approches possibles pour effectuer une commutation correcte ?

Les pièges :

  • La simple mise à jour/installation à partir de "l'autre source" ne fonctionne pas (incompatibilité des signatures).
  • l'exécution d'une opération de données uniquement adb backup ne sert à rien, car la restauration échouera pour la même raison.

J'ai quelques vagues idées de solutions basées sur la racine que je n'ai pas encore essayées (par exemple, Titanium Backup pourrait être en mesure de restaurer les données malgré la signature modifiée, et il y a également un module XPosed (InstallerOpts ?) qui propose de "supprimer l'avertissement de signature"). Mais avant de "tout gâcher", j'ai pensé à demander ici si quelqu'un avait déjà essayé une solution avec succès.

Les solutions non racinaires sont privilégiées (afin que davantage de personnes puissent en bénéficier), les solutions racinaires sont acceptables, les solutions XPosées comme exigence sont également acceptables.


Quelques raisons pour lesquelles on peut vouloir "changer de source" (alias "cross-update") : Se débarrasser des dépendances propriétaires, l'application n'est plus mise à jour à la source originale

2voto

Guillermo Gomez Points 423

Sans racines

Désolé mais AFAIK ce n'est pas possible :( Je n'ai jamais vu une application/outil/utilité modifier avec succès les données d'autres applications, même pas en lecture !
Vous pouvez également le faire dans une récupération personnalisée, mais qui utilise une récupération personnalisée sans rooter ? Lisez donc ci-dessous.

Racine simple (méthode manuelle)

Ne le prenez pas trop mal. Il suffit de déplacer les données d'origine, de désinstaller l'application d'origine et d'installer la nouvelle, puis de déplacer les données et de les réinstaller. chown . Des exemples de commandes de l'interpréteur de commandes sont présentés ci-dessous.

# mv /data/data/com.example.foo /data/media
 * UNINSTALL_ORIGINAL_APP
 * INSTALL_NEW_APP
# ls -ld /data/data/com.example.foo
 * take note of the user (e.g. u0_a123)
# mv /data/media/com.example.foo /data/data
# chown -R 10123.10123 /data/data/com.example.foo

Explications pour chaque étape :

  1. Déplacer les données de l'application d'origine vers un autre endroit. Comme Androis supprime automatiquement les fichiers non pertinents dans certains répertoires, nous avons besoin d'un endroit sûr comme Alt. AFAIK les fichiers inconnus sont ignorés dans /data/media c'est donc ce qui a été choisi.
  2. Remplacer l'app. Pas d'explication.
  3. Obtenir l'UID de l'application nouvellement installée. Un mauvais UID entraîne la suppression des données de l'application par l'installateur de paquets .
  4. Déplacer les données vers l'arrière et modifier l'UID.

Une petite remarque : la fonction intégrée chown La commande n'accepte pas l'option -R (récursif) par défaut dans Android L ou inférieur. Vous avez besoin de BusyBox dans ce cas. Sous Android M et supérieur, cela fonctionne très bien.

Utilitaires de racine

  • Titanium Backup

    Avec TiBu, vous pouvez facilement sauvegarder les données existantes, puis supprimer l'ancienne application et installer la nouvelle en toute sécurité. Tant que les deux paquets ont le même nom, vous pouvez restaurer les données de l'application avec TiBu, intactes !

    Cependant, cette solution est essentiellement une sauvegarde de données, et ne sera donc pas présentée ici. Si vous souhaitez en savoir plus sur la sauvegarde et la restauration des données, consultez notre rubrique tag wiki para sauvegarde , dans le cadre de la Sauvegardes basées sur les applications section.

Modules Xposed (le plus simple, recommandé par iBug)

XInstaller et son successeur, InstallerOpt peut permettre à Package Installer d'autoriser l'installation de paquets dont les signatures ne correspondent pas (en ignorant la vérification de la signature). Toutes vos données sont alors préservées et vous pouvez facilement passer d'une version à l'autre. C'est la méthode que j'utilise actuellement et elle fonctionne très bien. Malheureusement, Xposed n'est pas officiellement disponible pour Android N (pour l'instant), donc cette solution n'est valable que pour Android M et les versions inférieures.

Théoriquement, ils ne devraient pas causer de problème, car tout ce qu'ils font, c'est accrocher la fonction de vérification de la signature et changer sa valeur de retour en une valeur vraie, contournant ainsi la vérification. Si le paquet de remplacement présente d'autres défauts que la non-concordance des signatures, l'installation échouera quand même, de sorte qu'aucun paquet défectueux ne peut être installé même si vous ignorez la vérification des signatures.

Avis important
Il n'est pas recommandé de laisser cette option (ignorer la vérification de la signature) activée en permanence. En effet, elle crée une importante faille de sécurité, car des applications piratées (qui utilisent presque toujours une signature différente) peuvent également être installées. Personnellement, je ne l'active que lorsque c'est nécessaire et je la désactive dès que j'ai fini de remplacer mon paquet.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X