Warum wird die Android-App nach dem Herunterfahren des Geräts auf eine frühere Version zurückgesetzt?

11

Beobachtet dieses sehr seltsame Verhalten mit Android-Anwendung. Ungefähres Szenario:

  1. Version A auf dem Gerät installiert
  2. Anwendung funktioniert in Ordnung
  3. Auf dem Gerät installierte Version B (B> A)
  4. Anwendung funktioniert in Ordnung
  5. Gerät schaltet sich aufgrund von Batterieentladung aus
  6. Gerät eingeschaltet
  7. Version A der Anwendung wird erneut auf dem Gerät ausgeführt

Zusätzliche Information:

  • Die Anwendung wird nicht über Google Play vertrieben, sondern lokal über eine USB-Verbindung installiert (HINWEIS: Die Anwendung wird in der Produktion ausgeführt; sie wird nicht über AndroidStudio installiert).
  • Kiosk
  • Android 5.1 (API 22)

Ich habe wohl zwei Fragen:

  • Warum hat das Gerät die ältere Version des APK zwischengespeichert (und wo hat es sie zwischengespeichert)?
  • Unter welchen Umständen können Anwendungen auf solche früheren Versionen zurückgesetzt werden?

Bearbeiten (weitere Informationen):

  • Es sieht so aus, als ob die Anwendung nach dem Zurücksetzen der APK einige Berechtigungen verliert (möglicherweise sogar alle). Funktionen, die vor dem Rollback funktionierten, funktionieren nicht mehr, da SecurityException von den Android-APIs ausgelöst wurde. Dies geschieht, obwohl diese Version von Android noch keine Laufzeitberechtigungen hat!
  • Nach dem Surfen Dateisystem des Tablets, sehe ich in der Tat mehrere App APKs unter ähnlichen Pfaden mit Wohnsitz: /data/app/com.myapp-2/base.apk, /data/app/com.myapp-3/base.apkusw.

Meine aktuelle Hypothese lautet, dass der Akku dazu führt, dass das Tablet seinen Status "zurücksetzt" (z. B. wird auch die Uhr zurückgesetzt). Wenn es wieder eingeschaltet wird, verwechselt es zwischen den APKs der App und lädt das falsche.

Ich habe jedoch keine Ahnung, warum das so ist oder wie man dieses Verhalten verhindert.

Vasiliy
quelle
Ich habe mich auch diesem Verhalten gestellt. Möglicherweise tritt dies aufgrund einer sofortigen Ausführung auf, da die apk aufgeteilt wird und ein Neustart des Geräts den Prozess unterbricht und auf die vorherige Version zurückgesetzt wird.
touhid udoy
Verwenden Sie auf diesen Geräten unterschiedliche Benutzer? Vielleicht eine Gastsitzung zu einer?
tynn
Dies kann gerätespezifisch sein (Standard-Cache-Einstellungen). Haben Sie auf anderen Geräten getestet?
Taslim Oseni
Hast du es auf dem Android Emulator getestet?
Squti
@TaslimOseni, es gibt ein bestimmtes Tablet-Modell, das für die Bereitstellung vor Ort verwendet wird. Darüber hinaus ist es nicht etwas, das sich leicht reproduzieren lässt. Wir haben es nur einmal im Labor gesehen.
Vasiliy

Antworten:

2

Wenn Sie Android Studio 3.5+ verwenden, verwenden Sie anstelle der sofortigen Ausführung wahrscheinlich Änderungen übernehmen.

Dies hat eine andere Art, Änderungen an dem Gerät zu versenden, ohne die apk neu zu schreiben. Es ist also sehr sinnvoll, dass die apk, die Sie ausführen, wenn Sie Ihre App direkt auf dem Gerät ausführen, nach dem Neustart nichts mit der einen zu tun hat das lief vorher

Änderungen übernehmen

Sofortiges Ausführen und Neuarchitekturieren und Implementieren eines praktischeren Ansatzes in Android Studio 3.5 mit dem Namen "Änderungen übernehmen". Apply Changes verwendet plattformspezifische APIs von Android Oreo und höher, um ein zuverlässiges und konsistentes Verhalten sicherzustellen. Im Gegensatz zu Instant Run ändert Apply Changes Ihre APK nicht.

https://android-developers.googleblog.com/2019/08/android-studio-35-project-marble-goes.html

Carlos Robles
quelle
Dieses Problem tritt in der Produktion auf und die App wird nicht über AndroidStudio auf Geräten installiert. Was haben Instant Run oder Apply-Änderungen damit zu tun?
Vasiliy
Oh, tut mir leid, ich habe das angenommen, da Sie erwähnt haben, dass die Anwendung nicht über Google Play verbreitet, sondern vor Ort über eine USB-Verbindung installiert wird. Daher habe ich automatisch über Android Studio nachgedacht. Nach Ihrem Update ist es klar. Ich werde ein bisschen mehr darüber nachdenken ...
Carlos Robles
1

Hier werden vom Benutzer installierte Pakete aufgelistet:

adb shell cmd package help

pm list packages -f -U -3 --show-versioncode

Und dann vollständig deinstallieren, bevor Sie neu installieren:

adb uninstall com.myapp

Bei sofortiger Ausführung und ohne Anwendung des Patch-APK (siehe pmHilfeausgabe) wird möglicherweise das Basis-APK ausgeführt. Dies führt zu keinem Rollback, aber es ist wahrscheinlich, dass das eine APK ohne das andere APK überlastet ist (Android Studio automatisiert möglicherweise die Anwendung des Hot-Patch, dies ist jedoch beim Booten möglicherweise nicht der Fall). Wenn Sie Instant Run nicht verwenden, werden diese Patch-Update-APKs entfernt. und wenn es nur eine APK gibt, gibt es nichts anderes zu laufen.

Martin Zeitler
quelle
3
Entschuldigung, ich sehe nicht, wie dies eine meiner Fragen beantwortet. Ich kann diese Dateien auch manuell über ADB löschen, aber an dieser Stelle möchte ich verstehen, warum dies geschieht.
Vasiliy
@ Vasiliy wahrscheinlich, weil Dalvik VM Instant Run Patch APK anders behandelt. Die eigentliche Frage ist, warum es in verschiedenen Versionen sogar zwei verschiedene Fälle von angeblich demselben gibt.
Martin Zeitler
Ich bin mir nicht sicher, was Instant Run damit zu tun hat. Die APKs wurden nicht über AndroidStudio installiert. Wie Sie sagen, ist eine der Fragen "warum es mehrere Instanzen von APKs für dieselbe App gibt", aber ich sehe nicht, wie Ihre Antwort darauf antwortet ...
Vasiliy
@ Vasiliy sollte es zunächst nicht mehrere APK geben - und wenn, dann muss die Patch-APK angewendet werden. Es gibt einen Unterschied zwischen "Änderungen übernehmen" und der Startzeit.
Martin Zeitler
1

Warum hat das Gerät die ältere Version des APK zwischengespeichert (und wo hat es sie zwischengespeichert)?

Der Trick hier ist im Versionscode. Stellen Sie bei der Installation einer neuen Version sicher, dass die neue Version einen anderen Versionscode hat . Das Android-Betriebssystem verwendet Versionscodes, um zwischen verschiedenen Versionen derselben APK zu unterscheiden. Dies würde also funktionieren.

Es ist nicht wirklich klar, warum dieser Rollback passiert. Dies ist offensichtlich ein seltsames gerätespezifisches Problem, aber dennoch können eine Vielzahl von Faktoren verantwortlich sein, darunter das Standardinstallationsprogramm des Geräts, Speicher- / Cache-Einstellungen, Gerätespeicher, Viren usw.


Ich hoffe das hilft. Frohe Codierung!

Taslim Oseni
quelle
1
Wir haben das Problem immer noch nicht herausgefunden, aber da Ihre Antwort die einzige ist, die theoretisch verwandt sein könnte, liegt die Prämie bei Ihnen!
Vasiliy