Puedo hacer una copia de seguridad de los datos de mi aplicación desde el root/data/data/you.package.name
Sin embargo, cuando invierto el proceso, es decir, pego los datos para simular una restauración, la aplicación se cierra a la fuerza, lo he probado con un montón de aplicaciones y he notado la misma reacción. ¿En qué me equivoco?
Respuesta
¿Demasiados anuncios?Como no hay más opiniones, resumiré a partir de los comentarios para aquellos que se encuentren con un problema similar:
Firelord señaló correctamente lo más probable es que se trate de un problema con los permisos de los archivos. El almacenamiento interno utiliza un sistema de archivos que soporta permisos granulares de archivos 1 - que no son compatibles con el sistema de archivos utilizado en las tarjetas SD 2 . Así que la copia de todos los contenidos en su tarjeta SD ha perdido esa información, y la propiedad se perdió 3 . Así que copiando esto de nuevo a su almacenamiento interno, todavía tiene la propiedad equivocada, por lo que la aplicación no puede acceder a ella correctamente. No esperaba esto 4 la aplicación, por supuesto, se comportará mal: un excepción se producirá sin ser manejado, por lo que la aplicación se bloquea (force-close).
Para los que lo comprobaron con el mount
y ahora argumentar ¡te equivocas, la tarjeta SD no utiliza FAT sino FUSE! - Es cierto que es FUSE, pero en este caso actúa como FAT. ¿Qué sistema de archivos es FUSE, por favor? :) No es un físico sistema de archivos por sí mismo, sino un virtual uno (FUSE significa Sistema de archivos en el espacio de usuario que se opone al "espacio del sistema", también conocido como "espacio del núcleo") que proporciona un "puente" a las interfaces reales del núcleo. Hay varios sistemas de archivos que utilizan FUSE: SSHFS, DAVFS y otros tienen implementaciones de FUSE. Una vez más, fue El Señor del Fuego trae un poco de apoyo a mi reclamación: _El programa sdcard hace el trabajo de montar FUSE y en config.jd se menciona que el programa sdcard es utilizado por algunos dispositivos para exponer el almacenamiento interno a través de FUSE._
Conclusión: Usted tomó un enfoque completamente equivocado para copia de seguridad y restaurar aquí. Si realmente querías lidiar con eso a nivel de sistema de archivos, deberías haber usado una herramienta como alquitrán (que está disponible y suele estar preinstalado en los dispositivos Android) para archivar los contenidos conservando los permisos (el "tarball" resultante puede copiarse a la tarjeta SD, y los contenidos seguir siendo extraídos a su ubicación original correctamente). Por otro lado, como nuestro copia de seguridad de la etiqueta-wiki te dirá, esto es exactamente lo que adb o aplicaciones como Helium - Sincronización y copia de seguridad de aplicaciones y Copia de seguridad en titanio son para.
1: en las versiones más antiguas de Android esto solía ser YAFFS , en el más nuevo es Extfs
2: normalmente FAT
3: o más bien "restablecer" los valores predeterminados utilizados para el contenido almacenado en la tarjeta SD
4: un usuario normal no puede hacer esas cosas, ya que /data/data/<package_name>
no es accesible a nadie más que a su propietario y a Root
1 votos
Supongo que los permisos se han estropeado. No copiar en la tarjeta SD directamente, sino hacer un archivo tar que conserve los permisos de los archivos de origen (datos de la aplicación). Restaura los datos de tal manera que se restauren los mismos permisos, restaura el contexto de SELinux (en caso de que SELinux esté en modo de aplicación). Por cierto, ¿qué dispositivo y versión de Android estás utilizando?
0 votos
Además, antes de restaurar, asegúrate de que la aplicación cuyos datos intentas restaurar está completamente detenida. Hazlo a través de la línea de comandos o de la aplicación Ajustes. Asegúrate también de borrar sus datos antes de restaurar los tuyos. Tal vez mi respuesta pueda ayudar aquí: Copia de seguridad de los datos completos de una aplicación cuando el teléfono está atascado en el bootloop
0 votos
los permisos sólo se requieren para las carpetas del sistema mi dawg no los datos del usuario mi homie me dijo
0 votos
Lo que te haya dicho tu colega, @Firelord tiene razón:
/data/data
utiliza un sistema de archivos EXTFS que permite permisos y propiedad granulares, mientras que SDCard utiliza FAT, que no no permitirlo. Al copiar a la SD, has "desautorizado" los archivos. Después de haberlos copiado de nuevo, tenían la propiedad equivocada, por lo que la aplicación se vuelve incapaz de acceder a ellos (o incluso sobrescribirlos). Al no poder leer/escribir sus datos, se bloquea (comportamiento esperable). // Ver nuestro copia de seguridad de la etiqueta-wiki para saber cómo hacer copias de seguridad. Helio oadb backup
están ahí para este tipo de trabajo.0 votos
@Izzy me siento bastante raro corrigiéndote, pero cualquier punto de montaje que aparezca en /storage es un FUSE, no un FAT.
1 votos
@DeathMaskSalesman Es cierto que es FUSE, pero AFAIK actúa como FAT (cosas de la compatibilidad). ¿Qué sistema de archivos es FUSE, por favor? :) No es un físico sistema de archivos por sí mismo, sino una implementación (FUSE significa File System in User Space, que se opone al "System Space", también conocido como "espacio del núcleo"). Hay varios sistemas de archivos que utilizan FUSE: SSHFS, DAVFS y otros tienen implementaciones de FUSE. Para más detalles, véase, por ejemplo Wikipedia es un "sistema de archivos virtual" que proporciona un "puente" a las interfaces reales del kernel.
0 votos
@Izzy Buen punto. Tienes razón.
1 votos
@DeathMaskSalesman Firelord sólo ofreció pruebas : _El programa sdcard hace el trabajo de montar FUSE y en config.jd se menciona que el programa sdcard es utilizado por algunos dispositivos para exponer el almacenamiento interno a través de FUSE._