La instalación de la aplicación Android sobrescribe /data/data/com.my.app

Antecedentes: como parte de una actualización a A6/MM, terminé teniendo que borrar mi teléfono. Sin embargo, hice una copia de seguridad de /data/app y /data/data antes de borrar. Después de la actualización, volví a sincronizar /data/data con el teléfono. Luego procedí a reinstalar algunas aplicaciones de google play.

Esperaba que se usaran los datos de la aplicación en /data/data, pero la instalación de la aplicación falló primero, pero en el segundo intento la instalación funcionó (finalizó), PERO sobrescribió todas mis configuraciones (etc.) que había restaurado en /data/ datos. Mi pregunta es, ¿cómo evito esto? ¿Falló la primera instalación porque el instalador de la aplicación vio los datos antiguos?

La aplicación en cuestión era Zoiper Lite, pero no creo que la aplicación específica sea terriblemente significativa. ¿Hay algo acerca de la limpieza (restablecimiento de fábrica) que hace que el proceso de instalación de apk no espere datos y, por lo tanto, falle, pero luego borre los datos si insiste con un segundo intento? Por supuesto, lo que realmente quiero es una solución alternativa para poder instalar la aplicación Y conservar los datos antiguos. Tengo muchas aplicaciones para las que me gustaría hacer esto, por lo que definitivamente es un problema...

¿Por qué no instalar la aplicación y luego sincronizar sus datos? Dicho esto, algunas aplicaciones generan datos específicos de instalación allí (como tokens de acceso API), por lo que no necesariamente se pueden reutilizar de una instalación a otra.

Respuestas (1)

NO cree las carpetas antes de que lo haga la propia aplicación, ya que a menudo no podrá obtener los permisos, la propiedad y los contextos correctos. En su lugar, después de una nueva instalación, ejecute la aplicación una vez para que pueda crear la estructura del archivo y luego proceda a sobrescribir. También es muy recomendable encontrar qué archivo(s) exacto(s) almacena(n) las preferencias/datos que desea restaurar (por lo general, solo algunos archivos XML en la subcarpeta shared_prefs) y restaurarlos únicamente.

La solución final a tales problemas en el futuro sería usar aplicaciones como Titanium Backup para automatizar el proceso de copia de seguridad/restauración.

EDITAR: descargué Zoiper yo mismo y probé: modifiqué algunas preferencias, hice una copia de seguridad /data/data/com.zoiper.android.app/shared_prefs/com.zoiper.android.app_preferences.xml, luego borré los datos y volví a ejecutar la aplicación para permitir que genere estructura. Restauré el archivo de preferencia después, y se restauraron después de que hice el primer truco. La cuestión es que no olvide forzar el cierre de la aplicación antes de intentar reemplazar cosas, o la aplicación en ejecución simplemente la ignorará.

Al reemplazar archivos, tenga mucho cuidado con la propiedad. A cada aplicación se le asigna un usuario/grupo de Unix en la instalación, y con una instalación nueva, rara vez es igual que antes. Tan completo en "TiBu hace el trabajo" :)
@Izzy ¡Maldita sea, propiedad! Sabía que me perdí algo, pero no pude captarlo al escribir... Editado
@Izzy Extrañamente, en mi experiencia, aunque poner una estructura completa sin tomar posesión, etc. no funcionará, sobrescribir un solo archivo sí, y después de abrir la aplicación la próxima vez, el permiso y la propiedad se corrigen a sus valores previstos. .. Android seguro funciona de una manera que no puedo comprender en este momento.
Nada inusual, Andy. Si la aplicación es propietaria del directorio, puede eliminar/reemplazar todos los archivos que contiene. Si no posee el directorio, no puede hacer nada con los contenidos. Entonces, si reemplazó toda la estructura, el directorio de nivel superior (y todo dentro) pertenecía a "otro usuario", y la aplicación no podía manejarlo, mientras que cuando colocaba un solo archivo, sí podía. Lo mismo en Linux/Unix; Lo recuerdo de mis días en la universidad, donde compartíamos carpetas en el grupo de nuestros estudiantes: el dueño de la carpeta tenía el poder :)
@Izzy Guau. Entonces es *nix trabajando en formas en las que necesito aprender mucho. Ahora poco a poco sé por qué los mayores me decían "nunca se es demasiado viejo para aprender Linux"...
Muy recomendable, como puede ver, no solo para comprender Linux/Unix, sino también Android :) Después de todo, Android se basa en esos mismos conceptos, aunque a veces los aplica de manera diferente (por ejemplo, contar cada "aplicación " como "usuario").
Ahora he intentado dejar que la aplicación genere los archivos de datos, salir/eliminar la aplicación y luego reemplazar los archivos de datos con la copia de seguridad, Y ejecutar chown -R app_168.app168 /data/data/com.zoiper.android.app. Después de eso, me sigue apareciendo "Error. Se ha enviado el informe de bloqueo". cuando vuelvo a iniciar la aplicación. Usé rsync -rltDv, la configuración de permisos no debería haber cambiado.
no sé sobre rsync; deberías hablar de eso con @DanHulme arriba. En cuanto a mí, sigo insistiendo en encontrar el archivo exacto para evitar problemas de permisos.
Andy, me he entretenido con la restauración de solo algunos archivos en la carpeta /data/data/com.zoiper.android.appshared_prefs, pero hasta ahora no tuve suerte. Esto está resultando ser MUCHO más difícil de lo que esperaba.
No tengo palabras... Probablemente probaré la aplicación y probaré el truco de restauración de datos más tarde.
@reikred Hizo algunos experimentos y resultó exitoso; vea la edición.