Mi copia de seguridad perdió todas las fotos

Creé un botón de copia de seguridad para un rastreador de estado de ánimo fuera de línea.

Exportaba los datos a un archivo JSON. Los usuarios podían guardarlo y moverlo a un teléfono nuevo. Parecía perfecto.

Luego cambié el ID del paquete de la aplicación. Probé una instalación limpia en un dispositivo nuevo y restauré la copia de seguridad.

Las entradas de texto volvieron. Todas las fotos habían desaparecido.

Me di cuenta de mi error. La copia de seguridad no era una copia de seguridad real. Era solo una lista de punteros a archivos que ya no existían.

La aplicación guardaba las fotos en el disco. La base de datos contenía la ruta del archivo.

La ruta se veía así: file:///data/user/0/com.example.app/files/entry_media/image.jpg

Cuando exporté el JSON, solo guardé esa ruta. En el mismo dispositivo, la importación funciona porque los archivos todavía están allí.

En un dispositivo nuevo, esas rutas no apuntan a nada. El usuario ve miniaturas rotas y piensa que la aplicación borró sus recuerdos.

Si tu exportación solo contiene rutas de archivos, no tienes una copia de seguridad portátil. Tienes una copia de seguridad que solo funciona en la máquina que no la necesita.

Una copia de seguridad real debe contener los datos reales.

Cambié el proceso. Ahora, la exportación lee cada foto y la convierte en una cadena Base64 dentro del JSON.

Este enfoque tiene sus inconvenientes: • El tamaño del archivo aumenta aproximadamente un 33 por ciento. • Las bibliotecas grandes requieren más memoria durante la exportación.

Elegí la integridad de los datos sobre el tamaño del archivo. Una copia de seguridad grande es útil. Una copia de seguridad diminuta que pierde todas las imágenes no sirve para nada.

También cambié la forma en que gestiono las importaciones para garantizar la velocidad y la seguridad:

  1. Escribir primero todas las fotos en el disco del nuevo dispositivo. Esto ocurre fuera de la transacción de la base de datos para mantener la rapidez.
  2. Ejecutar una única transacción de base de datos para vincular las nuevas rutas locales con las entradas.

También diseñé el sistema para que falle de forma controlada (fail soft). Si falta una foto o no se puede leer, la aplicación la omite y pasa a la siguiente. Una imagen dañada no debería interrumpir toda la restauración.

Lecciones aprendidas:

  • Prueba de la manera correcta. Exporta en un dispositivo, bórralo e importa en una instalación limpia. Volver a importar en el mismo dispositivo oculta errores.
  • Lleva los bytes. Si los datos deben sobrevivir a un cambio de dispositivo, mueve los datos reales, no la dirección.

Fuente: https://dev.to/diven_rastdus_c5af27d68f3/my-offline-apps-backup-lost-every-photo-on-a-new-phone-3d36