Perché l'app Android esegue il rollback a una versione precedente dopo l'arresto del dispositivo?


11

Ho osservato questo comportamento molto strano con l'applicazione Android. Scenario approssimativo:

  1. Versione A installata sul dispositivo
  2. L'applicazione funziona bene
  3. Versione B installata sul dispositivo (B> A)
  4. L'applicazione funziona bene
  5. Il dispositivo si spegne a causa del consumo della batteria
  6. Dispositivo acceso
  7. La versione A dell'applicazione viene eseguita nuovamente sul dispositivo

Informazioni addizionali:

  • L'applicazione non è distribuita tramite Google Play, ma installata on-premise tramite connessione USB (NOTA: l'applicazione viene eseguita in produzione; non è installata tramite AndroidStudio).
  • Chiosco
  • Android 5.1 (API 22)

Immagino di avere due domande:

  • Perché il dispositivo ha memorizzato nella cache la versione precedente dell'APK (e dove l'ha memorizzata nella cache)?
  • In quali circostanze le applicazioni possono tornare alle versioni precedenti del genere?

Modifica (ulteriori informazioni):

  • Sembra che dopo il rollback dell'APK, l'applicazione perda alcune autorizzazioni (forse anche tutte). Funzionalità che ha funzionato prima del rollback smette di funzionare a causa del lancio di SecurityException dalle API di Android. Questo succede anche se questa versione di Android non ha ancora i permessi di runtime!
  • Dopo la navigazione del file system del tablet, che in effetti vedo APK diversi di app che risiedono in percorsi simili: /data/app/com.myapp-2/base.apk, /data/app/com.myapp-3/base.apk, etc.

La mia attuale ipotesi è che il consumo della batteria induca il tablet a "ripristinare" il suo stato (ad esempio, anche l'orologio viene ripristinato) e quando viene alimentato di nuovo confonde tra gli APK dell'app e carica quello sbagliato.

Tuttavia, non ho idea del perché dovrebbe farlo o come prevenire questo comportamento.


Ho affrontato anche questo comportamento. forse questo si verifica a causa della corsa istantanea in quanto divide l'apk e il riavvio del dispositivo interrompe il processo e ripristina la versione precedente.
touhid udoy

Stai utilizzando utenti diversi su questi dispositivi? Forse una sessione ospite a uno?
tynn,

Potrebbe essere specifico del dispositivo (impostazioni cache predefinite). Hai provato su altri dispositivi?
Taslim Oseni,

L'hai provato sull'emulatore Android?
Squti,

@TaslimOseni, esiste un modello specifico di tablet utilizzato per l'implementazione sul campo. Inoltre, non è qualcosa che si riproduce facilmente. L'abbiamo visto solo una volta in laboratorio.
Vasiliy,

Risposte:


2

Se stai usando Android Studio 3.5+, invece di eseguire istantaneamente, probabilmente stai usando Applica modifiche.

Questo ha un modo diverso di inviare le modifiche al dispositivo, senza riscrivere l'apk, quindi ha molto senso che dopo il riavvio, l'apk che eseguirai se esegui l'app direttamente sul dispositivo, non ha nulla a che fare con quello che stava funzionando prima

Applica i cambiamenti

Instant Run e riprogettato e implementato da zero un approccio più pratico in Android Studio 3.5 chiamato Applica modifiche. Applica modifiche utilizza API specifiche della piattaforma da Android Oreo e versioni successive per garantire un comportamento affidabile e coerente; a differenza di Instant Run, Applica modifiche non modifica l'APK.

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


Questo problema si verifica in produzione e l'app non è installata sui dispositivi tramite AndroidStudio. Che cosa hanno a che fare con l'esecuzione immediata o applicare le modifiche?
Vasiliy,

oh, scusami, l'ho assunto dal momento in cui hai menzionato "L'applicazione non è distribuita tramite Google Play, ma installata on-premise tramite connessione USB", quindi ho pensato automaticamente ad Android Studio. Dopo l'aggiornamento è chiaro. Ci penserò un po 'di più ...
Carlos Robles,

1

Questo elenca i pacchetti installati dall'utente:

adb shell cmd package help

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

E quindi disinstallare completamente prima di reinstallare:

adb uninstall com.myapp

Con l'esecuzione immediata e non applicando l'APK di patch (consultare l' pmoutput della guida), questo potrebbe eseguire l'APK di base. Questo non ripristina nulla, ma è probabile che un APK senza l'altro APK sovraccaricato (Android Studio potrebbe automatizzare l'applicazione dell'hot-patch, ma al momento dell'avvio potrebbe non essere il caso). Non usare la corsa istantanea rimuove questi APK di aggiornamento patch; e quando c'è un solo APK, non c'è nient'altro da eseguire.


3
Siamo spiacenti, non vedo come questo risponde a nessuna delle mie domande. Posso anche andare e cancellare manualmente questi file tramite ADB, ma, a questo punto, voglio capire perché questo accade.
Vasiliy,

@Vasiliy probabilmente perché Dalvik VM gestisce l'APK della patch di esecuzione immediata in modo diverso. La vera domanda è: perché ci sono anche due casi diversi di presumibilmente la stessa cosa in versioni diverse?
Martin Zeitler,

Non sono sicuro di cosa abbia a che fare la corsa istantanea con tutto questo. Gli APK non sono stati installati tramite AndroidStudio. Come dici tu, una delle domande è "perché ci sono più istanze di APK per la stessa app", ma non vedo come la tua risposta risponda ...
Vasiliy,

@Vasiliy non dovrebbe esserci più APK per cominciare - e se, allora l'APK della patch deve essere applicato. Esiste una differenza tra "applica modifiche" e tempo di avvio.
Martin Zeitler,

1

Perché il dispositivo ha memorizzato nella cache la versione precedente dell'APK (e dove l'ha memorizzata nella cache)?

Il trucco qui è nel codice della versione. Quando si installa una nuova versione, assicurarsi che la nuova versione abbia un codice di versione diverso . Il sistema operativo Android utilizza i codici di versione per differenziare le diverse versioni dello stesso APK, quindi funzionerebbe.

Non è davvero chiaro il motivo per cui si verifica questo rollback. Questo è ovviamente uno strano problema specifico del dispositivo ma, tuttavia, potrebbero essere responsabili una tonnellata di fattori tra cui l'installer predefinito del dispositivo, le impostazioni di archiviazione / cache, la memoria del dispositivo, i virus, ecc.


Spero che questo possa essere d'aiuto. Codifica allegra!


1
Non abbiamo ancora capito il problema, ma poiché la tua risposta è l'unica che teoricamente potrebbe essere correlata, la generosità è tua!
Vasiliy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.