Por que o aplicativo Android reverte para uma versão anterior após o desligamento do dispositivo?

11

Observou esse comportamento muito estranho com o aplicativo Android. Cenário aproximado:

  1. Versão A instalada no dispositivo
  2. Aplicativo funciona bem
  3. Versão B instalada no dispositivo (B> A)
  4. Aplicativo funciona bem
  5. O dispositivo é desligado devido ao consumo de bateria
  6. Dispositivo ligado
  7. A versão A do aplicativo é executada no dispositivo novamente

Informação adicional:

  • O aplicativo não é distribuído pelo Google Play, mas instalado no local via conexão USB (NOTA: o aplicativo é executado em produção; não é instalado pelo AndroidStudio).
  • Quiosque
  • Android 5.1 (API 22)

Acho que tenho duas perguntas:

  • Por que o dispositivo armazenou em cache a versão mais antiga do APK (e onde o armazenou em cache)?
  • Sob quais circunstâncias os aplicativos podem reverter para versões anteriores assim?

Editar (mais informações):

  • Parece que depois que o APK é revertido, o aplicativo perde algumas permissões (talvez até todas). Funcionalidade que funcionou antes da reversão para de funcionar devido ao lançamento de SecurityException das APIs do Android. Isso acontece mesmo que essa versão do Android ainda não tenha permissões de tempo de execução!
  • Depois de navegar sistema de arquivos do tablet, eu de fato ver APKs vários de aplicativos residentes em caminhos semelhantes: /data/app/com.myapp-2/base.apk, /data/app/com.myapp-3/base.apk, etc.

Minha hipótese atual é que o consumo de bateria faz com que o tablet "redefina" seu estado (por exemplo, o relógio também é redefinido) e, quando é ligado novamente, confunde os APKs do aplicativo e carrega o errado.

No entanto, não tenho idéia por que isso seria feito ou como impedir esse comportamento.

Vasiliy
fonte
Eu também enfrentei esse comportamento. talvez isso ocorra devido à execução instantânea, pois divide o apk e o dispositivo de reinicialização interrompe o processo e reverte para a versão anterior.
touhid udoy
Você está usando usuários diferentes nesses dispositivos? Talvez uma sessão de convidado para um?
Tynn
Isso pode ser específico do dispositivo (configurações de cache padrão). Você já testou em outros dispositivos?
Taslim Oseni 27/10/19
Você testou no emulador Android?
Squti 28/10/19
@TlimlimOseni, existe um modelo específico de tablet usado para implantação em campo. Além disso, não é algo que se reproduz facilmente. Vimos isso apenas uma vez no laboratório.
28519 Vasiliy

Respostas:

2

Se você estiver usando o Android Studio 3.5 ou superior, em vez da execução instantânea, provavelmente está usando Aplicar alterações.

Isso tem uma maneira diferente de enviar alterações para o dispositivo, sem reescrever o apk. Portanto, faça muito sentido que, após a reinicialização, o apk que você executará se executar o aplicativo diretamente no dispositivo, não tem nada a ver com aquele que estava rodando antes

Aplicar mudanças

Execute instantaneamente e re-arquitetado e implementado desde o início uma abordagem mais prática no Android Studio 3.5 chamada Aplicar alterações. O Apply Changes usa APIs específicas da plataforma do Android Oreo e superior para garantir um comportamento confiável e consistente; ao contrário do Instant Run, o Apply Changes não modifica seu APK.

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

Carlos Robles
fonte
Esse problema ocorre na produção e o aplicativo não está instalado nos dispositivos pelo AndroidStudio. O que as alterações instantâneas ou executadas têm a ver com isso?
28519 Vasiliy
desculpe, presumi que sim, já que você mencionou "O aplicativo não é distribuído pelo Google Play, mas instalado no local via conexão USB", então pensei automaticamente no Android Studio. Após a atualização, fica claro. Vou pensar um pouco mais ...
Carlos Robles
1

Isso lista os pacotes instalados pelo usuário:

adb shell cmd package help

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

E, em seguida, desinstale completamente antes de reinstalar:

adb uninstall com.myapp

Com a execução instantânea e a não aplicação do APK do patch (consulte a pmsaída da ajuda), isso pode executar o APK base. Isso não reverte nada, mas é provavelmente o APK sem o outro APK sobrecarregado (o Android Studio pode automatizar o aplicativo do hot-patch, mas no momento da inicialização, pode não ser o caso). Não usar a execução instantânea remove esses APK de atualização de patch; e quando há apenas um APK, não há mais nada para executar.

Martin Zeitler
fonte
3
Desculpe, não veja como isso responde a qualquer uma das minhas perguntas. Também posso apagar manualmente esses arquivos pelo ADB, mas, neste momento, quero entender por que isso acontece.
Vasiliy
@ Vasiliy provavelmente porque o Dalvik VM está lidando com o APK de execução instantânea de maneira diferente. A questão real é: por que existem duas instâncias diferentes de supostamente a mesma coisa em versões diferentes?
Martin Zeitler
Não sei ao certo qual corrida instantânea tem a ver com tudo isso. Os APKs não foram instalados pelo AndroidStudio. Como você diz, uma das perguntas é "por isso que existem várias instâncias de APKs para o mesmo app", mas eu não vejo como a sua resposta respostas ele ...
Vasiliy
@ Vasiliy, para começar, não deve haver vários APK - e se, então, o APK do patch deve ser aplicado. Há uma diferença entre "aplicar alterações" e o tempo de inicialização.
Martin Zeitler
1

Por que o dispositivo armazenou em cache a versão mais antiga do APK (e onde o armazenou em cache)?

O truque aqui está no código da versão. Ao instalar uma nova versão, verifique se a nova versão possui um código de versão diferente . O sistema operacional Android usa códigos de versão para diferenciar versões diferentes do mesmo APK, portanto, isso funcionaria.

Não está muito claro por que essa reversão acontece. Obviamente, esse é um problema específico do dispositivo, mas, no entanto, vários fatores podem ser responsáveis, incluindo o instalador padrão do dispositivo, as configurações de armazenamento / cache, a memória do dispositivo, os vírus, etc.


Eu espero que isso ajude. Feliz codificação!

Taslim Oseni
fonte
11
Ainda não descobrimos o problema, mas como sua resposta é a única que poderia, teoricamente, ser relacionada, a recompensa é sua!
31519 Vasiliy