Por fin he conseguido restaurar el contenido de mi anterior base de datos en mi actual dispositivo y voy a explicar cómo.
La idea era copiar la copia de seguridad de /data/data/com.Android.providers.telephony de mi instalación anterior, a un dispositivo virtual Android, hacer una copia de seguridad allí usando SMS Backup & Restore en formato XML, y luego restaurar esa copia de seguridad XML en mi dispositivo. SMS Backup & Restore fusionó los mensajes de la copia de seguridad con los mensajes del dispositivo actual, por lo que no tuve que fusionar las dos bases de datos a mano.
En mi pregunta, el AVD que ejecutaba 6.0.0 no leía el contenido de mi base de datos porque fue creado en CM 13 que está basado en Android 6.0.1. Pero Google no parece proporcionar una imagen de emulador basada en Android 6.0.1, así que seguí utilizando un AVD que ejecutaba la versión 6.0.0. Por razones de rendimiento lo he configurado para emular un Intel Atom (x86) CPU e instalado el controlador Intel HAXM en mi PC (he seguido esta respuesta para hacerlo).
La base de datos mmssms.db contiene propiedades sobre sí misma, especialmente números de versión, así que los he editado para hacer creer a Android que trataba con una base de datos de una versión que podía tratar. He abierto mmssms.db en Experto en SQLite , hizo clic en la pestaña "Base de datos", y en la lista de propiedades, encontró las siguientes líneas:
- versión_del_esquema
- versión_de_usuario
Los he rebajado a 44 y 60, respectivamente.
Luego transferí mi copia de seguridad de /data/data/com.Android.providers.telephony al AVD mediante adb push , después de asegurarse de que esa ubicación ya estaba vacía allí. Utilizando adb shell He establecido el propietario y el grupo de todo en este directorio y sus subdirectorios a radio y en el base de datos subdirectorio el chmod a 660.
He reiniciado el dispositivo.
He instalado SMS Backup & Restore en el AVD a través de ADB. (El .apk de esa app se puede encontrar en un dispositivo existente en /data/app en un dispositivo donde ya esté instalada. No me he molestado en instalar Google Play Services en el emulador para obtenerla de la Play Store, pero puedes hacerlo).
He hecho una copia de seguridad de los mensajes y he copiado el .xml resultante a mi dispositivo real, donde he utilizado SMS Backup & Restore para restaurarlo. Ya está.
0 votos
Es posible que mmssms.db de CM 13 no sea totalmente compatible con stock 6.0.1. Es absolutamente necesario importar los mensajes en 5.1.1, o acceder a ellos en un PC será suficiente?
0 votos
Necesito absolutamente fusionar las dos bases de datos, no sólo acceder a la antigua en un PC. Editar: en base a su sugerencia de que mmssms.db de CM 13 no es compatible con Android 6.0.1 stock, voy a tratar de instalar CM 13 en el AVD.
0 votos
¿Ha habido suerte con CM13 en el AVD?
0 votos
El emulador de Google es realmente lento y se cuelga cuando uso adb para reiniciar a recovery/bootloader. Tal vez funcione mejor con un dispositivo virtual que tenga un procesador Intel Atom; lo intentaré más tarde hoy.