2010-07-15 11 views
15

Para la próxima versión de nuestra aplicación, quiero cambiar sharedUserId ya que ahora usamos una aplicación de control interno que debe escribir en los archivos de configuración de la otra aplicación.sharedUserId: ¿es seguro cambiar cuando la aplicación ya está en el mercado?

Pero dado que la aplicación ya está instalada en muchos teléfonos, ¿esto será un problema? Ejecuté una pequeña prueba en el emulador y veo excepciones en los registros del dispositivo que las versiones * .bak de los archivos de preferencias no se pueden escribir. No estoy seguro de cuán crítico es eso. Curiosamente, la configuración segura aún parece funcionar, aunque la carpeta shared_prefs se haya creado utilizando otra ID de usuario de Linux.

¿Alguien ha intentado esto antes?

+0

bien, parece que esto no será posible, Dang. Se bloquea al intentar acceder a un archivo de base de datos que se creó con una versión de la aplicación que no tenía un conjunto de ID de usuario personalizado. ¿Cuál es la identificación de usuario predeterminada de todos modos? ¿Podría la segunda aplicación establecer su ID de usuario con la ID de usuario predeterminada de la primera aplicación? – Matthias

Respuesta

24

Y para responder a mi propia pregunta de nuevo :

No, no es seguro. Como la actualización de una aplicación a través de Android Market no eliminará la base de datos y los archivos de preferencias, la nueva versión no podrá leer ni escribir estos archivos (ya que se crearon con un ID de usuario de Linux diferente) y la aplicación se bloqueará después del actualizar. Debería pedirles a sus usuarios que desinstalen y reinstalen completamente la aplicación, lo cual no es recomendable.

Como regla general, concluyo de esto: ¡Siempre que comience a desarrollar una nueva aplicación, asegúrese de establecer un atributo android:process y android:sharedUserId manual! No duele en caso de que no lo necesite, pero le da control total sobre qué aplicaciones tienen acceso a los recursos privados de esta aplicación.

+2

Gracias por publicar eso, casi estaba publicando una actualización de sharedUserId. Lamentablemente nunca aprendemos eso cuando estamos creando la aplicación:/ –

+0

Para aquellos de nosotros que no planificamos el futuro, ¿hay alguna solución a este problema? –

+1

@BarryFruitman Si no es un problema perder los datos del usuario, podría usar nuevos archivos con diferentes nombres. Tuvimos que hacer esto una vez debido a un error de Android que hacía que nuestros archivos fueran inaccesibles en algunos dispositivos. – Oderik

2

No hay solución a partir de ahora, pero protagonizada por cuestiones registrados podría hacer que Google solucionar este problema:

http://code.google.com/p/android/issues/detail?id=1227

http://code.google.com/p/android/issues/detail?id=14074

+0

El problema es que esto no es un error, es una característica. Sin especificar un ID de usuario compartido, Android (o el Linux subyacente) le asignará uno. Tan pronto como establezcas uno, será diferente por definición. Dado que en cualquier sistema Linux, un usuario no tiene permitido acceder a los archivos de otro usuario a menos que tenga permiso para hacerlo, este es más o menos el comportamiento esperado. – Matthias

+0

Es cierto, pero el error mencionado es el hecho de que el sistema operativo Android no reconoce que se ha asignado/cambiado un ID compartido y actualiza los derechos de los datos de la aplicación ya instalados en consecuencia. –

Cuestiones relacionadas