Helge01 schrieb:
Genau das stimmt nicht, wenn es so einfach wäre hätte man als Entwickler nicht diese Probleme. Ein Datei Explorer, der nicht als System App installiert ist, wird nie mehr richtig unter KitKat funktionieren. Er benötigt Vollzugriff auf die SD-Karte, dies geht ohne root nicht mehr.
Nein, er braucht keine Root-Rechte. Er braucht nur dann Root-Rechte, wenn er private App-Daten von Apps lesen möchte, die auf der SD-Karte installiert sind. Private App-Daten sind aber eben nur für die App bestimmt, im internen Speicher kam da noch nie eine andere App ohne Root-Rechte ran. Wenn auf die privaten Daten anderer Apps ohne Root-Rechte zugegriffen werden kann, wenn die App auf die SD-Karte verschoben wurde, ist das eine Sicherheitslücke.
Noch größer wird dieser Blödsinn wenn man z.B. eine App zur Bildbearbeitung und eine andere für das Anzeigen von Bilder hat. Jede dieser Apps bringt nach Anpassung der Berechtigung einen Bereich mit, worauf es schreibend zugreifen darf. Es ist aber nicht möglich, einen Ordner für beide Apps schon der Übersicht wegen zu verwenden. Das ist Schwachsinn²!
Den Blödsinn gibt es nicht. Tatsächlich ist es so:
- Vor Kitkat mussten Apps die Permissions WRITE_EXTERNAL_STORAGE/READ_EXTERNAL_STOREGE auch dann setzen, wenn sie auf das Verzeichnis mit den eigenen privaten Daten zugreifen wollten, sobald die App auf die SD-Karte verschoben wurde.
- Ab KitKat ist das nicht mehr nötig, hier wird es sogar einfacher und auch transparenter. Beim Zugriff auf ihre privaten Daten braucht eine App keine speziellen Permissions mehr, nur damit sie auf die SD-Karte verschoben werden kann ohne dabei Funktionalität zu verlieren.
- Vor Kitkat konnten andere Apps auch ohne Root auf die privaten Daten anderer Apps zugreifen, wenn diese sich auf der SD-Karte befanden
- Ab Kitkat sind die privaten Daten anderer Apps auch mit den obigen Permissions für andere Apps (z.B. File-Explorer) tabu, ganz egal ob sie sich im internen Speicher oder auf der SD-Karte befinden und das ist auch gut so
- Um von mehreren Apps auf gemeinsam benutzte Datenbereiche auf der SD-Karte zuzugreifen bemühe man die Methode Environment.getExternalStoragePublicDirectory bzw. AppCompat.getExtenalFilesDir
- Vor KitKat gab es an der Klasse Context nur eine Methode getExternalFilesDir, die genau einen Filedescriptor zurücklieferte. Auf einigen Geräten mit SD-Karte kam man damit auch vorher schon nicht zum Ziel, weil auch der interne Speicher in zwei Partitionen unterteilt war und bei deren Mount-Points und dem Mount-Point der SD-Karte Sony, Samsung und Konsorten immer gerne ihr eigenes Süppchen kochten.
- Ab Kitkat kommt man damit auch nicht weiter, dafür gibt es eine neue Methode getExternalFilesDir, die ein Array von Filedescriptoren zurückliefert, mit denen man in jedem Fall Zugriff auf die SD-Karte erlangt (natürlich nicht auf die privaten Daten anderer Apps)
Den Entwicklern, deren Apps auf 4.4 nicht mehr funktionieren, empfehle ich die Developer Doku als Lektüre, da steht nämlich alles drin und das funktioniert tatsächlich auch genauso, wie es da steht (bis auf einen kleinen Fehler: Der 2. Caution-Remark gilt für Kitkat eben nicht, sondern nur für ältere Versionen)
http://developer.android.com/guide/topics/data/data-storage.html
Wenn eine neue OS Version erscheint, sollte es für einen Entwickler nun nicht das Ding sein, mal zu schauen, welche Änderungen/Neuerungen denn gemacht wurden und ob in seiner App ein paar Anpassungen oder Erweiterungen nötig sind.
Es ist tatsächlich so, dass Android mit Kitkat endlich eine transparente Möglichkeit bietet auf die SD-Karte zuzugreifen ohne noch Hacks mit hardgecodeten Pfaden oder Heuristiken zur Feststellung der Mountpoints machen zu müssen und ohne Sicherheitslücken. Wenn man z.B. gleich die AppCompat Klasse aus der Support Library verwendet, hat man oft gar kein Problem, da muss man dann nur die App einmal mit der neuen statischen Support-Library aus dem aktuellen SDK bauen ohne auch nur eine Zeile Code anzufassen.