J'ai finalement réussi à restaurer le contenu de ma précédente base de données sur mon appareil actuel et je vais vous expliquer comment.
L'idée était de copier la sauvegarde de /données/données/com.Android.providers.telephony de mon installation précédente, vers un appareil virtuel Android, le sauvegarder au format XML à l'aide de SMS Backup & Restore, puis restaurer cette sauvegarde XML sur mon appareil. SMS Backup & Restore a fusionné les messages de la sauvegarde avec les messages de l'appareil actuel, ce qui m'a évité d'avoir à fusionner les deux bases de données à la main.
Dans ma question, l'AVD fonctionnant en 6.0.0 ne pouvait pas lire le contenu de ma base de données car elle avait été créée sur CM 13 qui est basé sur Android 6.0.1. Mais Google ne semble pas fournir une image d'émulateur basée sur Android 6.0.1, donc j'ai quand même utilisé un AVD fonctionnant en 6.0.0. Pour des raisons de performance, je l'ai configuré pour émuler une image de type Intel Atom (x86) CPU et j'ai installé le pilote Intel HAXM sur mon PC (j'ai suivi les instructions du fabricant). cette réponse pour le faire).
La base de données mmssms.db contient des propriétés sur elle-même, en particulier les numéros de version, donc je les ai édités pour faire croire à Android qu'il traitait avec une base de données d'une version qu'il pouvait traiter. J'ai ouvert mmssms.db dans le dossier Expert SQLite J'ai cliqué sur l'onglet "Base de données" et, dans la liste des propriétés, j'ai trouvé les lignes suivantes :
- version du schéma
- version_utilisateur
Je les ai rétrogradés à 44 et 60, respectivement.
Puis j'ai transféré ma sauvegarde de /data/data/com.Android.providers.telephony à l'AVD en utilisant adb push après s'être assuré que l'emplacement était déjà vide à cet endroit. Utilisation de shell adb J'ai défini le propriétaire et le groupe de tout ce qui se trouve dans ce répertoire et ses sous-répertoires à radio et dans le base de données le sous-répertoire chmod à 660.
J'ai redémarré l'appareil.
J'ai installé SMS Backup & Restore sur l'AVD via ADB. (Le .apk de cette application peut être trouvé dans /data/app sur un appareil où elle est déjà installée. Je n'ai pas pris la peine d'installer Google Play Services sur l'émulateur pour l'obtenir depuis le Play Store, mais vous pouvez le faire).
J'ai sauvegardé les messages et copié le fichier .xml résultant sur mon appareil réel, où j'ai utilisé SMS Backup & Restore pour le restaurer. Voilà.