Warum werden Anwendungsdaten derselben Anwendung an unterschiedlichen Orten gespeichert?

Ich habe die gleiche Anwendung auf installiert

  • ein Gerät mit Android 7.0 ( nicht gerootet ) und

  • auf einem Tablet mit Android 4.4 ( root ),

Trotzdem ist mir aufgefallen, dass die Anwendungsdaten (Datenbanken / Dateien usw.) auf jedem Gerät an verschiedenen Orten gespeichert sind:

Auf dem Tablet-Gerät befinden sich die Dateien unter: /storage/sdcard0/Android/data/com.packagenameund können leicht manipuliert werden (dh kopieren, sichern usw.), aber nicht auf dem Smartphone, wodurch wahrscheinlich der Speicherort: bleibt, auf /data/data/com.packagenameden ich keinen Zugriff habe.


Ich verstehe, dass es normalerweise auf /data/data( geschützter interner App-Speicher ) oder /storage/sdcard0/Android/data( Speicher auf der internen Speicherpartition des Benutzers ) gespeichert wird, ansonsten auf einer SD-Karte, falls vorhanden. Außerdem wurde hier eine verwandte Frage gestellt: Wo speichern Android-Apps Daten?

Meine größte Überraschung ist, warum dies in derselben Anwendung geschieht (gleiche Version - seitlich geladen)?

Auf dieser Referenzseite wird auch erläutert, wie ein Entwickler den Standardspeicherort von Anwendungsdaten konfigurieren kann. Es wäre verständlich gewesen, wenn es unterschiedliche Versionen der Anwendung gegeben hätte, aber hier habe ich es nur mit derselben Anwendung (dh .apkDatei) zu tun. Gibt es etwas, das ich hier vermisse, oder haben sich die Dinge in den letzten Versionen von Android geändert?

Meine Sorge ist, dass ich ohne Root nicht auf diese Dateien zugreifen kann /data/dataund da dies große Dateien sind und ich sie sichern muss, falls die App-Daten versehentlich gelöscht werden (und das habe ich bereits aus Versehen getan :(.

Am wichtigsten ist, dass ich sie nicht ständig neu herunterladen möchte .

Hinweis: An beide Geräte ist kein externer Speicher angeschlossen.

So wie es aussieht, besteht das größte Hindernis darin, dass auf /data/data(Gerät 1) nicht auf Dateien zugegriffen werden kann, daher keine Sicherung möglich ... (Ich würde es begrüßen, wenn es eine andere zuverlässige Problemumgehung gibt, um dies zu erreichen .)

War es nicht schon immer so /data/data? Können Sie feststellen, an welchem ​​Standort App-Daten gespeichert werden? Wissen Sie, ob die Dateien Datendateien sind? Und woher weiß man das wirklich ohne Root?
Ich bin mir sicher, dass klare Daten auch Daten bei löschen /sdcard/Android/data, tatsächlich habe ich es gerade in einer bestimmten App versucht und es hat funktioniert. Außerdem denke ich /Android/dataund /data/datahabe unterschiedliche Zwecke. Ich habe festgestellt, dass dies /Android/dataeher für Caches/Dateien im Zusammenhang mit Anzeigen verwendet wird, während /data/dataes eher für private Dinge (z. B. zum Speichern von Anmeldeinformationen) verwendet wird.
@SSS Ich verstehe deinen Standpunkt, aber zumindest auf dem Tablet kann ich seine Daten leicht sichern, selbst wenn ich sie versehentlich lösche, wird es nicht zu viel Schaden anrichten :)

Antworten (2)

Alle Apps haben einen privaten Speicher im verlängerten /data-Ordner. Einige Apps entscheiden sich dafür, Daten vorübergehend an öffentlichen Orten zu speichern. Leider kann ich nicht mit Sicherheit sagen, was die genauen Ergebnisse davon waren, aber ich weiß, dass sich die Art und Weise, wie geteilte Daten behandelt werden, in Android 7 aus Sicherheitsgründen geändert hat.

/dataSo kann ich möglicherweise die im Ordner auf diesem nicht gerooteten Gerät gespeicherten App-Daten sichern

So seltsam es klingt, ich hatte eine erfolgreiche Problemumgehung für dieses Problem:

  • Ich musste die erforderlichen Anwendungsdaten (Dateien) manuell von /data/datanach verschieben /Android/data(mit Ausnahme von shared_preferencesOrdner und Datenbankordner, dh der normalen Konfiguration).

  • Zweitens musste ich die App so konfigurieren, dass sie ein privates Verzeichnis verwendet, indem ich die Datei modifizierte userDefault.xml(möglicherweise je nach Anwendung unterschiedlich) und diese erforderliche Codezeile hinzufügte:

    <int name="app_private_dir"value_"1"/>

Ich habe vorübergehend magisk'd, um dies vollständig zu erreichen :)