Observou esse comportamento muito estranho com o aplicativo Android. Cenário aproximado:
- Versão A instalada no dispositivo
- Aplicativo funciona bem
- Versão B instalada no dispositivo (B> A)
- Aplicativo funciona bem
- O dispositivo é desligado devido ao consumo de bateria
- Dispositivo ligado
- 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.
Respostas:
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
https://android-developers.googleblog.com/2019/08/android-studio-35-project-marble-goes.html
fonte
Isso lista os pacotes instalados pelo usuário:
E, em seguida, desinstale completamente antes de reinstalar:
Com a execução instantânea e a não aplicação do APK do patch (consulte a
pm
saí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.fonte
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!
fonte