Es importante tener en cuenta que las aplicaciones de Android no se instalan de la misma manera que en Windows o en los sistemas GNU/Linux. La aplicación se ejecuta completamente desde el archivo APK. La instalación de una aplicación por primera vez incluye los siguientes pasos:
-
Descargue el APK en el almacenamiento. Todos los archivos APK de las aplicaciones se descargan en la misma ubicación.
-
Cree un ID de usuario para la nueva aplicación. Cada aplicación en Android se ejecuta en su propio ID de usuario de Linux. Esto es por seguridad, y es como funciona el sistema de permisos.
-
Crea un directorio de datos para la nueva aplicación. Inicialmente está vacío.
-
Añade la aplicación a la base de datos de aplicaciones instaladas del teléfono. Esta base de datos incluye el nombre (ID del paquete) de la app, la ruta del archivo APK y el ID del usuario, entre otras cosas.
Eso es todo lo que se necesita. Así que después de eso, es bastante fácil ver cómo actualizarlo:
-
Descarga el nuevo archivo APK. Se trata de un nuevo archivo en la misma ubicación que los demás archivos APK.
-
Comprueba que el antiguo APK se puede actualizar al nuevo APK. Comprueba que ambos fueron firmados por la misma clave, para evitar el robo de datos, y que el nuevo APK no es una versión anterior, y algunos otros ajustes del manifiesto de la aplicación. Si alguna de las comprobaciones falla y el APK antiguo no puede actualizarse al nuevo APK, la actualización se detiene con un error en este punto.
-
Detener la versión antigua de la aplicación limpiamente.
-
Comprueba si hay cambios en la aplicación (como nuevos permisos) y actualiza el ID de usuario de la aplicación en consecuencia. Actualiza la base de datos de aplicaciones instaladas para que apunte al nuevo archivo APK (y con otros datos sobre la nueva aplicación).
-
Borra el archivo APK antiguo.
El proceso de actualización ni siquiera tiene que mirar el directorio de datos. Depende de la aplicación cambiar sus datos si la nueva versión utiliza un formato diferente o lo que sea. (Esto también significa que depende de la app qué versiones antiguas pueden actualizarse limpiamente sin perder datos).
El proceso funciona de la misma manera tanto si se actualiza la aplicación a través de Google Play, o alguna otra tienda de aplicaciones, como si se hace clic en el archivo APK, o se utiliza adb install
. Sea cual sea el front-end que utilices, pasa por el mismo gestor de paquetes. La única diferencia es que, si utilizas una tienda de aplicaciones, probablemente también mantenga su propio registro de las versiones instaladas, tanto para ayudar al desarrollador de la aplicación a entender su base de usuarios, como para poder comprobar futuras actualizaciones.
0 votos
No creo que esta última afirmación esté bien adherida. Muchas apps que se distribuyen a través de Google Play tienen otras vías de distribución. Sólo hay que pensar en 'Monument Valley', que sus propios desarrolladores dicen que es altamente pirateada en un 90%. Si lo buscas en Google, encontrarás decenas de puntos de distribución. Consulta en Google
0 votos
Era sólo un ejemplo, pero no quiero que mencionarlo atasque las respuestas, así que he editado esa parte. Mi pregunta no se refiere a google u otras vías de distribución, se limita al proceso de actualización propiamente dicho. El comentario de Wbogacz se refiere a que mencioné que " las aplicaciones distribuidas a través de GooglePlay no pueden actualizarse de otra forma que no sea a través de GooglePlay, de acuerdo con las políticas para desarrolladores " en la pregunta antes de editarla
2 votos
pm install -r FILE
. Lo que haría ese comando es lo que técnicamente ocurre en segundo plano durante una actualización de la aplicación.0 votos
¿Puede proporcionar el enlace a las políticas de los desarrolladores? Creo que es el caso del desarrollador para no actualizar sus aplicaciones fuera de Play Store (por ejemplo, la actualización push/forzada de otros sitios probablemente por razones de seguridad), porque AFAIK, podría actualizar cualquier aplicación usando su APK (siempre y cuando esté usando el mismo certificado)
0 votos
@AndrewT. Es por razones de seguridad, no tengo un enlace directo a ella, pero se refiere a esta línea en las políticas "Una aplicación descargada de Google Play no puede modificar, reemplazar o actualizar su propio código binario APK utilizando cualquier método que no sea el mecanismo de actualización de Google Play". De nuevo, eso salió por un escenario hipotético y lo edité porque atrae comentarios que no están relacionados con mi pregunta.
3 votos
Encontré el artículo al buscar esa afirmación pero no importa si no está relacionado. No estoy seguro de cómo limitar el alcance de la respuesta a esta pregunta: sí, una actualización sobrescribirá el "binario" de la aplicación (archivo APK), conservando los datos/caché. Sin embargo, hay requisitos antes de que se pueda actualizar, como "la versión de la aplicación debe ser superior/igual a la actual instalada", "debe utilizar el mismo certificado", etc. Más que eso, no puedo explicar el detalle.
0 votos
@Izzy, por desgracia, al no saber cómo funcionaba, no tenía ni idea de lo larga que hubiera sido una respuesta diciéndome lo que necesitaba. Ahora que por fin he dado con la información correcta me doy cuenta de que me va a costar bastante aprenderla. En este punto estoy considerando borrar la pregunta y si fuera a preguntar en programación las respuestas estarían muy por encima de lo que puedo entender en este momento.
0 votos
En realidad, creo que siempre que se dé una buena respuesta, esta "página" sería muy útil. Si no estuviera tan ocupado actualmente, empezaría una respuesta, pero de momento sería una respuesta muy incompleta, y necesitaría investigar un poco para respaldar mi redacción (por ejemplo, enlazar con recursos autorizados que confirmen lo que escribo). No creo que deba borrarlo. Una "reformulación" podría ser una buena idea (su adición suena un poco acusadora ;) - pero per se es una buena pregunta.
0 votos
Creo que el núcleo está en las líneas entre 10260 a 10350 . También hay preparaciones preliminares que se hacen al principio, pero la vinculada es la principal, creo.
0 votos
Por cierto, al cargar lateralmente una aplicación ya existente en uno de mis dispositivos me ha aparecido un mensaje preguntando si quería aplicarla como actualización, nunca había visto ese mensaje ni había encontrado este comportamiento descrito en ningún artículo que describiera cómo cargar lateralmente una aplicación
0 votos
@Firelord, gracias, creo que necesitaré un tiempo para digerirlo.