4 votes

Comment migrer contacts2.db entre appareils Android (SELinux activé) ?

J'ai exporté un contacts2.db depuis un samsung s6 et j'essaie de l'importer sur un Samsung S2 tab. Les deux téléphones fonctionnent sous Android 6 et sont enracinés. Ce que j'ai réalisé jusqu'à présent :

  • J'ai réussi à copier le fichier depuis l'appareil source avec :

    adb shell "su -c cat /path/to/contacts2.db" > contacts2.db

  • J'ai réussi à restaurer la base de données en copiant le fichier sur la carte SD de l'appareil de destination, puis en utilisant la fonction de restauration de la base de données. adb shell

    su cd /data/data/com.android.contacts/databases/ mv contacts2.db contacts2.db.bak cp /sdcard/contacts2.db . chown u0_a4:u0_a4 contacts2.db chmod 600 contacts2.db cd .. restorecon -Rv databases kill $(ps | grep contacts | awk '{ print $2 }')

  • Ensuite, je relance les contacts via l'interface, j'ai redémarré, mais les contacts ne s'affichent pas. Il ne semble pas s'agir d'une erreur de permission de fichier, mais d'un problème de base de données ? Les appareils fonctionnent avec le même firmware stock Samsung.

Qu'est-ce que j'ai manqué ici ?

1voto

Les contacts sont stockés dans data/data/com.android.providers.contacts/databases .

Si vous voulez simplement synchroniser les contacts dans le nouveau téléphone, ajoutez le même compte Google sur le nouveau téléphone. La synchronisation se fera automatiquement en arrière-plan.

Vous pouvez également essayer Samsung SmartSwitch.

0voto

Andy Yan Points 9360

Le format de la base de données est probablement légèrement différent sur les 2 appareils. Comme cité dans votre propre commentaire...

...une version de la base de données fait partie de la base de données, ce qui empêche les contacts d'utiliser une présentation incorrecte (trop récente/ancienne) de la base de données.

Personnellement, je n'ai jamais réussi à déplacer ce fichier sur des appareils ayant des ROMs différentes, mais quand ils sont flashés avec la même ROM, il suffit de déposer le fichier à cet endroit (sans toucher aux permissions, etc.).

0voto

Gro-Tsen Points 111

Voici quelques informations partielles que j'ai pu obtenir. Le site contacts2.db comme toutes les bases de données SQLite3, possède un pragme (métadonnée) appelé user_version (qui peut être lu avec PRAGMA user_version dans sqlite3) qui est un nombre entier généralement utilisé pour stocker le numéro de version d'un schéma de base de données. Il est utilisé, notamment, par de nombreuses bases de données Android et contacts2.db en particulier, dans l'exécution du code de migration automatique qui tentera d'effectuer les conversions de schéma requises lorsque la version de la base de données ne correspond pas à celle attendue par le code (ici, l'option com.android.providers.contacts ) : le code de migration se trouve dans ContactsDatabaseHelper.java dans le code Android. Malheureusement, de nombreuses choses peuvent mal tourner lors de cette migration (et lorsqu'elle échoue, c'est généralement de manière catastrophique, c'est-à-dire que tout le contenu est perdu). Il est parfois utile de vérifier le user_version sur la base de données avant la migration, et éventuellement effectuer ou réparer les migrations "à la main" (en utilisant sqlite3) en suivant ce que le code Java tente de faire. J'ai pu sauver ma base de données de contacts une fois de cette manière (mais bien sûr, cela nécessite une certaine connaissance de SQL).

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