4 votos

¿Cómo migrar contacts2.db entre dispositivos Android (con SELinux activado)?

He exportado un contacts2.db desde un samsung s6 y tratar de importarlo a un Samsung S2 tab. ambos teléfonos funcionan con Android 6 y están rooteados. Lo que he logrado hasta ahora:

  • He conseguido copiar el archivo desde el dispositivo de origen con:

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

  • He conseguido restaurar la base de datos copiando el archivo a la sdcard del dispositivo de destino y luego mediante 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 }')

  • Luego vuelvo a iniciar los contactos vía gui, reinicio, pero los contactos no aparecen. No parece ser un error de permiso de archivo, sino un problema de base de datos? Los dispositivos corren el mismo firmware de stock de Samsung.

¿Qué me he perdido aquí?

1 votos

Nunca he tenido cualquier de éxito moviendo ese archivo por los dispositivos con Algo así como diferentes ROMs, pero cuando se flashean con la misma ROM, basta con soltar el archivo en esa ubicación (sin tocar los permisos, etc.). Supongo que el formato del archivo es ligeramente diferente en los 2 dispositivos.

0 votos

@AndyYan hacer esto una respuesta. Parece ser la respuesta correcta. Parece que la versión de la base de datos es parte de la base de datos, lo que evita que los contactos usen un diseño de base de datos incorrecto (demasiado nuevo/antiguo).

0 votos

Tu comentario contiene en realidad más de lo que quería decir. Lo integraré y publicaré en breve.

1voto

Dok Puntos 373

Los contactos se almacenan en data/data/com.android.providers.contacts/databases .

Si simplemente quieres sincronizar los contactos en el nuevo teléfono, añade la misma cuenta de Google en el nuevo teléfono. Se sincronizará automáticamente en segundo plano.

También puedes probar Samsung SmartSwitch.

0voto

Andy Yan Puntos 501

Es probable que el formato de la base de datos sea ligeramente diferente en los 2 dispositivos. Como se cita en su propio comentario...

...una versión de la base de datos es parte de la base de datos, lo que evita que los contactos utilicen un diseño de base de datos incorrecto (demasiado nuevo/antiguo).

Personalmente nunca he tenido ningún tipo de éxito moviendo ese archivo entre dispositivos con ROMs algo diferentes, pero cuando se flashean con la misma ROM, basta con soltar el archivo en esa ubicación (sin tocar los permisos, etc.).

0voto

Gro-Tsen Puntos 111

Esta es una información parcial que he podido averiguar. El contacts2.db como todas las bases de datos SQLite3, tiene un pragma (metadatos) llamado user_version (que se puede leer con PRAGMA user_version en sqlite3), que es un número entero que suele utilizarse para almacenar el número de versión del esquema de la base de datos. Esto es utilizado, en particular, por muchas bases de datos de Android y contacts2.db en particular, al ejecutar el código de migración automática que intentará realizar las conversiones de esquema necesarias cuando la versión de la base de datos no coincida con la esperada por el código (aquí, el com.android.providers.contacts ): el código de migración está en ContactsDatabaseHelper.java en el código de Android. Lamentablemente, hay muchas cosas que pueden fallar en esta migración (y cuando falla, suele fallar de forma catastrófica, lo que significa que se pierde todo el contenido). A veces ayuda comprobar el user_version en la base de datos antes de la migración, y posiblemente realizar o reparar las migraciones "a mano" (usando sqlite3) siguiendo lo que el código Java intenta hacer. He podido salvar mi base de datos de contactos una vez de esta manera (pero, por supuesto, requiere algunos conocimientos de SQL).

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X