Observé este comportamiento muy extraño con la aplicación de Android. Escenario aproximado:
- Versión A instalada en el dispositivo
- La aplicación funciona bien
- Versión B instalada en el dispositivo (B> A)
- La aplicación funciona bien
- El dispositivo se apaga debido al agotamiento de la batería
- Dispositivo encendido
- La versión A de la aplicación se ejecuta nuevamente en el dispositivo
Información adicional:
- La aplicación no se distribuye a través de Google Play, sino que se instala en las instalaciones a través de una conexión USB (NOTA: la aplicación se ejecuta en producción; no se instala a través de AndroidStudio).
- Quiosco
- Android 5.1 (API 22)
Creo que tengo dos preguntas:
- ¿Por qué el dispositivo almacenó en caché la versión anterior del APK (y dónde lo almacenó)?
- ¿En qué circunstancias pueden las aplicaciones volver a versiones anteriores como esa?
Editar (más información):
- Parece que después de que el APK se revierte, la aplicación pierde algunos permisos (tal vez incluso todos). Funcionalidad que funcionaba antes de que la reversión dejara de funcionar debido a que se lanzaba SecurityException desde las API de Android. Esto sucede a pesar de que esta versión de Android todavía no tiene permisos de tiempo de ejecución.
- Después de navegar por el sistema de archivos de la tableta, de hecho me veo APK varias de aplicaciones que residen en virtud de caminos similares:
/data/app/com.myapp-2/base.apk
,/data/app/com.myapp-3/base.apk
, etc.
Mi hipótesis actual es que el agotamiento de la batería hace que la tableta "restablezca" su estado (por ejemplo, el reloj también se restablece), y cuando se vuelve a encender se confunde entre los APK de la aplicación y carga el incorrecto.
Sin embargo, no tengo idea de por qué haría eso o cómo prevenir este comportamiento.
Respuestas:
Si está utilizando Android Studio 3.5+, entonces, en lugar de la ejecución instantánea, es probable que esté utilizando Aplicar cambios.
Esto tiene una forma diferente de enviar cambios al dispositivo, sin reescribir el apk, así que tenga mucho sentido que después de reiniciar, el apk que ejecutará si ejecuta su aplicación directamente en el dispositivo, no tiene nada que ver con el eso estaba funcionando antes
https://android-developers.googleblog.com/2019/08/android-studio-35-project-marble-goes.html
fuente
Esto enumera los paquetes instalados por el usuario:
Y luego desinstale completamente antes de reinstalar:
Con la ejecución instantánea y sin aplicar el parche APK (ver la
pm
salida de ayuda), esto podría ejecutar el APK base. Esto no revierte nada, pero es probable que un APK sin el otro APK esté sobrecargado (Android Studio podría automatizar la aplicación del parche en caliente, pero en el momento del arranque, este podría no ser el caso). No usar la ejecución instantánea elimina estas actualizaciones de parches APK; y cuando solo hay un APK, no hay nada más que ejecutar.fuente
El truco aquí está en el código de la versión. Cuando instale una nueva versión, asegúrese de que la nueva versión tenga un código de versión diferente . El sistema operativo Android utiliza códigos de versión para diferenciar entre diferentes versiones del mismo APK, por lo que esto funcionaría.
No está realmente claro por qué ocurre esta reversión. Obviamente, este es un extraño problema específico del dispositivo, pero, sin embargo, una gran cantidad de factores podrían ser responsables, incluidos el instalador predeterminado del dispositivo, la configuración de almacenamiento / caché, la memoria del dispositivo, los virus, etc.
Espero que esto ayude. Feliz codificación!
fuente