Podczas opracowywania aplikacji na Androida kierowanej na wszystkie wersje powyżej 4.1 zauważyłem, że odinstalowanie i ponowne zainstalowanie mojej aplikacji nie usuwa danych.
Aplikacja została zaprojektowana do przechowywania szczegółów, o które prosi na pierwszym ekranie. Po odinstalowaniu i ponownej instalacji w OS 4.4.4 aplikacja monituje użytkownika o podanie danych, co jest normalne. Jednak w wersji 6.0 ta sama sekwencja instalowania / odinstalowywania przywraca pierwotnie wprowadzone dane.
Próbowałem się upewnić, odwiedzając, /data/data/my package folder
aby zobaczyć, że baza danych zniknęła po odinstalowaniu i rzeczywiście ten folder jest usuwany podczas odinstalowywania.
Próbowałem usunąć aplikację, odwiedzając stronę ustawień, za pomocą Titanium Backup, a wyniki są takie same. Urządzenie jest zrootowane Nexusem 5 z wersją 6.0.
Co może być przyczyną tego dziwnego zachowania?
źródło
Odpowiedź greywolf82 jest poprawna, ale chcę dodać do tego trochę informacji.
Podczas opracowywania mojej aplikacji na Androida (za pomocą Xamarin) zauważyłem, że za każdym razem, gdy ponownie uruchamiam aplikację z Visual Studio, moje dane wracają do danych sprzed kilku miesięcy. Nie miało znaczenia, czy po prostu zatrzymałem się i uruchomiłem ponownie z VS, czy całkowicie odinstalowałem aplikację i ponownie ją zainstalowałem.
Warto również zauważyć, że nigdy nie mówiliśmy wyraźnie aplikacji, aby przechowała kopię zapasową.
Wydaje się, że kopia zapasowa również zastępuje nowsze dane podczas uruchamiania z Visual Studio, a my mamy raporty użytkowników korzystających z kompilacji wersji naszej aplikacji, a także nowsze dane zastępowane przez kopie zapasowe.
Ponieważ nie wiem dokładnie, kiedy mają miejsce kopie zapasowe i przywracanie, ta funkcja wydaje się powodować tylko problemy.
Zmodyfikowaliśmy nasz AndroidManifest, jak pokazano w poniższym pliku XML:
Gdy jawnie ustawimy wartość na false, wszystko wydaje się działać. Spodziewałbym się, że będzie to funkcja opcjonalna, ale ... wygląda na to, że może być domyślnie włączona dla aplikacji, które nie określają wartości w żaden sposób.
źródło
Powinieneś sprawdzić ustawienia kopii zapasowej i zerowania urządzenia oraz wyłączyć automatyczne przywracanie (podczas ponownej instalacji aplikacji ustawienia kopii zapasowej i dane zostaną przywrócone).
Wyłączenie automatycznej kopii zapasowej różni się od automatycznego przywracania. Jeśli uważasz, że pomocne będzie włączenie automatycznego tworzenia kopii zapasowej dla swojej aplikacji, zrób to. Ale jeśli uważasz, że spowoduje to, że użytkownicy końcowi, którzy nie będą świadomi, że funkcja automatycznego przywracania ich urządzenia jest włączona, możesz ją wyłączyć.
W moim przypadku wyłączyłem funkcję allowBackup, ale ponieważ miałem już kopię zapasową poprzedniej wersji w chmurze, nadal trwa przywracanie.
Zobacz obraz jako odniesienie dla urządzenia Samsung na Androidzie 6.0. Inne urządzenia i wersje mogą mieć inny ekran. Zobacz zdjęcie poniżej.
Ustawienie automatycznego przywracania w obszarze Kopia zapasowa i reset
źródło
Niedawno potrzebowałem skorzystać z tych funkcji, udało mi się odkryć dokumentację i po obszernych testach udało mi się wydedukować:
Android: allowbackup - tworzy kopię zapasową danych aplikacji lokalnej na urządzeniu, na którym się znajduje.
Android: fullBackupContent - jest używany w połączeniu z interfejsem API przywracania kopii zapasowych Google i MOŻE być kontrolowany za pomocą pliku xml, aby określić, co dokładnie ma być archiwizowane, a także klasę BackupManager, którą możesz wdrożyć w celu dalszej kontroli nad procesem.
Jednak dokumentacja stwierdza i potwierdziłem podczas testów, że przywracanie nastąpi tylko wtedy, gdy urządzenie zostanie przywrócone i proces przywracania danych aplikacji zostanie uruchomiony. LUB przywróci również, gdy aplikacja zostanie załadowana bocznie przez adb, co robimy, gdy uruchamiamy aplikację do testowania lub debugowania na naszych urządzeniach za pośrednictwem Android Studio. Pamiętaj, że jeśli ustawisz Androida: allowbackup, ale nie konfigurujesz Androida: fullBackupContent za pomocą kodu Google API, dane aplikacji są zapisywane tylko lokalnie, a jeśli odpowiednio skonfigurowałeś, to jeśli twoja kopia zapasowa została utworzona, a otrzymasz nowe urządzenie, aplikacje dane były przechowywane w chmurze, dzięki czemu można je przywrócić na nowym urządzeniu.
źródło
Dodanie Androida: allowBackup = "false" pod tagiem aplikacji w pliku manifestu rozwiązało mój problem.
Oto dokumentacja Androida dotycząca tworzenia kopii zapasowych danych użytkownika za pomocą funkcji Automatyczna kopia zapasowa
źródło
Po prostu zmień androida: allowBackup = „true” na Androida: allowBackup = „false” w pliku manifiest.xml. To będzie działać.
źródło
Po prostu dodając do tego, stwierdziliśmy, że w Androidzie 9 (na urządzeniu Nokia HMD), że zasoby były przechowywane, nawet po usunięciu aplikacji przez interfejs i przez adb.
Odpowiedź dodania:
android:allowBackup="false" android:fullBackupOnly="false"
Oczywiście nie jest to nowa odpowiedź - ale spostrzeżenie dla osób, które były w tej samej pozycji co my.
źródło
Jeśli celujesz w Androida 10, musisz wstawić
android:hasFragileUserData="true"
tag aplikacjiAndroidManifest.xml
Zobacz https://commonsware.com/blog/2019/06/06/random-musings-q-beta-4.html
źródło