Zaobserwowałem to bardzo dziwne zachowanie w aplikacji na Androida. Przybliżony scenariusz:
- Wersja A zainstalowana na urządzeniu
- Aplikacja działa dobrze
- Wersja B zainstalowana na urządzeniu (B> A)
- Aplikacja działa dobrze
- Urządzenie wyłącza się z powodu rozładowania baterii
- Urządzenie włączone
- Wersja A aplikacji działa ponownie na urządzeniu
Dodatkowe informacje:
- Aplikacja nie jest dystrybuowana za pośrednictwem Google Play, ale jest instalowana lokalnie przez połączenie USB (UWAGA: aplikacja działa w trybie produkcyjnym; nie jest instalowana przez AndroidStudio).
- Kiosk
- Android 5.1 (API 22)
Chyba mam dwa pytania:
- Dlaczego urządzenie buforowało starszą wersję pliku APK (i gdzie go buforowało)?
- W jakich okolicznościach aplikacje mogą przywracać poprzednie wersje tego typu?
Edytuj (więcej informacji):
- Wygląda na to, że po wycofaniu APK aplikacja traci niektóre uprawnienia (może nawet wszystkie). Funkcjonalność, która działała, zanim wycofanie przestało działać z powodu wyłączenia SecurityException z interfejsów API Androida. Dzieje się tak, mimo że ta wersja Androida nie ma jeszcze uprawnień do wykonywania.
- Po przeglądania plików tabletu, ja rzeczywiście zobaczyć pliki APK kilku aplikacji zamieszkały pod podobnymi ścieżkami:
/data/app/com.myapp-2/base.apk
,/data/app/com.myapp-3/base.apk
, itd.
Moja obecna hipoteza jest taka, że rozładowanie baterii powoduje, że tablet „resetuje” swój stan (na przykład zegar jest również resetowany), a po ponownym włączeniu myli się między pakietami APK aplikacji i ładuje niewłaściwy.
Nie mam jednak pojęcia, dlaczego miałby to zrobić ani jak temu zapobiec.
Odpowiedzi:
Jeśli używasz Androida Studio 3.5+, zamiast natychmiastowego uruchomienia prawdopodobnie korzystasz z Zastosuj zmiany.
Ma to inny sposób wysyłania zmian do urządzenia, bez konieczności ponownego zapisywania pliku APK, więc miej sens, że po ponownym uruchomieniu aplikacja, którą uruchomisz, jeśli uruchomisz aplikację bezpośrednio na urządzeniu, nie ma nic wspólnego z tą aplikacją to działało wcześniej
https://android-developers.googleblog.com/2019/08/android-studio-35-project-marble-goes.html
źródło
Zawiera listę pakietów zainstalowanych przez użytkownika:
A następnie całkowicie odinstaluj przed ponowną instalacją:
W przypadku natychmiastowego uruchomienia i niestosowania poprawki APK (patrz dane
pm
wyjściowe pomocy) może to spowodować uruchomienie podstawowego APK. To nie przywraca niczego, ale prawdopodobnie jeden APK nie jest przeciążony drugim APK (Android Studio może zautomatyzować stosowanie poprawki, ale nie musi tak być podczas uruchamiania). Brak użycia natychmiastowego uruchomienia usuwa te APK aktualizacji aktualizacji; a gdy jest tylko jeden plik APK, nie trzeba nic więcej uruchamiać.źródło
Sztuką jest tutaj kod wersji. Podczas instalowania nowej wersji upewnij się, że nowa wersja ma inny kod wersji . System operacyjny Android używa kodów wersji do rozróżnienia różnych wersji tego samego pakietu APK, więc to zadziała.
Nie jest do końca jasne, dlaczego tak się dzieje. Jest to oczywiście dziwny problem specyficzny dla urządzenia, ale mimo to może być odpowiedzialnych za wiele czynników, w tym domyślny instalator urządzenia, ustawienia pamięci / pamięci podręcznej, pamięci urządzenia, wirusów itp.
Mam nadzieję, że to pomoże. Wesołego kodowania!
źródło