Observé ce comportement très étrange avec l'application Android. Scénario approximatif:
- Version A installée sur l'appareil
- L'application fonctionne bien
- Version B installée sur l'appareil (B> A)
- L'application fonctionne bien
- L'appareil s'arrête en raison de la décharge de la batterie
- Appareil allumé
- La version A de l'application s'exécute à nouveau sur l'appareil
Information additionnelle:
- L'application n'est pas distribuée via Google Play, mais installée sur site via une connexion USB (REMARQUE: l'application s'exécute en production; elle n'est pas installée via AndroidStudio).
- Kiosque
- Android 5.1 (API 22)
Je suppose que j'ai deux questions:
- Pourquoi l'appareil a mis en cache l'ancienne version de l'APK (et où l'a-t-il mis en cache)?
- Dans quelles circonstances les applications peuvent-elles revenir à des versions précédentes comme ça?
Modifier (plus d'informations):
- Il semble qu'après la restauration de l'APK, l'application perd certaines autorisations (peut-être même toutes). Fonctionnalité qui fonctionnait avant que la restauration cesse de fonctionner en raison de la suppression de SecurityException à partir des API d'Android. Cela se produit même si cette version d'Android n'a pas encore d'autorisations d'exécution!
- Après avoir parcouru le système de fichiers de la tablette, je vois bien les APK de plusieurs applications résidant dans des chemins similaires:
/data/app/com.myapp-2/base.apk
,/data/app/com.myapp-3/base.apk
, etc.
Mon hypothèse actuelle est que la décharge de la batterie amène la tablette à "réinitialiser" son état (par exemple, l'horloge est également réinitialisée), et lorsqu'elle est à nouveau alimentée, elle confond entre les fichiers APK de l'application et charge le mauvais.
Cependant, je n'ai aucune idée pourquoi ferait-il cela, ou comment empêcher ce comportement.
Réponses:
Si vous utilisez Android Studio 3.5+, au lieu d'une exécution instantanée, vous utilisez probablement Appliquer les modifications.
Cela a une façon différente d'envoyer les modifications à l'appareil, sans réécrire l'apk, donc il est très logique qu'après le redémarrage, l'apk que vous exécuterez si vous exécutez votre application directement sur l'appareil, n'a rien à voir avec celui qui courait avant
https://android-developers.googleblog.com/2019/08/android-studio-35-project-marble-goes.html
la source
Cela répertorie les packages installés par l'utilisateur:
Et puis désinstallez complètement avant de réinstaller:
Avec une exécution instantanée et sans appliquer le correctif APK (voir la
pm
sortie d'aide), cela peut exécuter le fichier APK de base. Cela ne supprime rien, mais il est probable que l'un APK sans l'autre APK soit surchargé (Android Studio peut automatiser l'application du hot-patch, mais au démarrage, cela peut ne pas être le cas). Ne pas utiliser l'exécution instantanée supprime ces APK de mise à jour de correctifs et lorsqu'il n'y a qu'un seul APK, il n'y a rien d'autre à exécuter.la source
L'astuce est ici dans le code de version. Lorsque vous installez une nouvelle version, assurez-vous que la nouvelle version a un code de version différent . Le système d'exploitation Android utilise des codes de version pour différencier les différentes versions du même APK, donc cela fonctionnerait.
On ne sait pas vraiment pourquoi ce retour en arrière se produit. C'est évidemment un étrange problème spécifique à l'appareil, mais néanmoins, une tonne de facteurs pourraient être responsables, notamment l'installateur par défaut de l'appareil, les paramètres de stockage / cache, la mémoire de l'appareil, les virus, etc.
J'espère que ça aide. Joyeux codage!
la source