¿Qué pasará con SharedPreferences al actualizar una aplicación de Android?

He almacenado la configuración del usuario en SharedPreferences en mi aplicación. ¿Qué sucederá con SharedPreferences cuando actualice la aplicación a través de Google Play Store a una nueva versión de la aplicación?

¿Los SharedPrefernces seguirán allí después de la actualización o se eliminarán?

Hasta el momento no he encontrado una respuesta en la web o Stackoverflow (¿puedo buscar con palabras clave incorrectas?).

¿Puede indicarme algunos enlaces que describen este proceso?

Editar: Mientras tanto, encontré otra respuesta también: Comportamiento de SharedPreferences en Actualizar / Desinstalar

Edición 2: Desde hace mucho tiempo cuando hice esta pregunta, recientemente descubrí que desde Android 6.0 (API 23) también es posible utilizar la función de copia de seguridad automática para asegurar sus preferencias compartidas tal como lo describe Google aquí . Simplemente agregue allowBackup="true" en su archivo AndroidManifest.xml .

Cristian dice aquí : los datos de su aplicación se mantendrán cuando las actualizaciones de instalación del usuario.

Pero debe ser con el mismo package name para detectar como una actualización de la aplicación anterior.

EboMike en Advertencia ¿El usuario de Android que la actualización de la aplicación podría llevar a perder datos de la versión de la aplicación anterior? dice:

Francamente, perder datos debido a una actualización es inaceptable.

Editar :

Normalmente , las Preferencias Compartidas (así como otros datos del usuario) se mantendrán durante el proceso de actualización, pero a veces, debido a algún problema ” desconocido “, los datos pueden perderse, y supongo que está fuera de tu control. Entonces, simplemente puede creer que las Preferencias Compartidas se mantendrán ( vea aquí ).

Por lo tanto, si desea evitar borrar los datos del usuario para actualizar el progreso, debe guardar los datos principales en el almacenamiento externo (puede ser un medio de almacenamiento extraíble, como una tarjeta SD o un almacenamiento interno, no extraíble) y no privado para su aplicación. O al menos guarde para que el usuario realice una copia de seguridad de los datos antes de la actualización. Luego, en la primera ejecución de su aplicación (actualizada), verifique si hay algún archivo de respaldo en el almacenamiento externo o no.

Si desea saber ¿Qué cosas deben / pueden suceder al actualizar una aplicación? , No hice ninguna buena descripción para esto. Es complicado y relativo con Android Security , Application signing , copy protection y otros temas. Quiero decir que si cambias el estado de tu aplicación en cualquiera de los campos anteriores, se obtienen resultados diferentes.
Por ejemplo, si CHANGED COPY PROTECTION FROM ON to OFF OR OFF to ON , su aplicación se actualizará pero hará que se pierdan todas sus preferencias compartidas, el acceso a archivos sea imposible y …
Aunque debe tener cuidado con las condiciones, su nueva aplicación being considered una actualización de la aplicación anterior (consulte Cosas que no pueden cambiar ).

También debe tener cuidado con el código, puede ser debido a la eliminación de datos de sus bases de datos (consulte la aplicación de actualización con SQLite precargado ).

Pero en última instancia, si tiene cuidado, puede decir:

El proceso de actualización solo reemplaza el archivo apk (y, por lo tanto, lo que hay en él, por ejemplo, drawables, …) y no altera bases de datos, preferencias compartidas ni ningún otro archivo generado en tiempo de ejecución (probablemente en este caso, se instala una nueva aplicación con el UID que es igual a UID de la aplicación anterior).

Puedes ver estas páginas para más detalles:

¿¡Ayuda!? La actualización de nuestra aplicación en el mercado elimina las SharedPreferences guardadas.
La protección de copia de mercado rompe por completo el acceso al archivo después de la actualización
¿Alguien puede explicar el proceso de actualización de la aplicación?

Creo que cuando actualicé mi aplicación la última vez a través de Google Play, las Preferencias compartidas no se vieron afectadas.
Los estaba usando para iniciar sesión automáticamente, y después de la actualización lo hizo.
Fue hace un mes, mi memoria podría ser borrosa, así que es mejor escuchar las opiniones de otras personas también.

Después de depurar durante más de 4 horas descubrí que estaba guardando un modelo como cadena serialándola. Una clase serializable tiene una identificación única por nombre serialVersionUID , que se establece de forma predeterminada en el tiempo de ejecución y la identificación se calcula por el nombre de la clase, las interfaces y los nombres de las variables también. Descubrí que cambié la clase de modelo, agregué una variable y luego actualicé la aplicación. Dado que la clase ahora se ha modificado, por lo que se configuró un nuevo serialVersionUID y, por lo tanto, en la actualización, no se pudo deserializar la cadena y crear el modelo, y se estaba dando java.io.InvalidClassException

Establecer explícitamente serialVersionUID para evitar este problema

 static final long serialVersionUID = 42L; 
    Intereting Posts