KitKatastrophe: Probleme mit MicroSD-Karten unter Android 4.4

KitKatastrophe: Probleme mit MicroSD-Karten unter Android 4.4

13507
6
Teilen

Für viele Android-Nutzer ist es der Android-Bug schlechthin: Seit dem Update auf Android 4.4 dürfen die meisten Apps nicht mehr auf die externe MicroSD-Karte schreiben. Doch stammt der Bug überhaupt von Android 4.4 und ist es überhaupt ein Fehler? Android User klärt auf.

Nachdem die ersten Galaxy-Note-Nutzer und Samsung-Galaxy-S4-Besitzer Anfang 2014 über (inoffizielle) Firmware-Updates aus Polen ihr Gerät auf Android 4.4 „KitKat“ gehievt hatten, mehrten sich hierzulande die Beschwerden über Probleme mit der MicroSD-Karte. Apps konnten auf einmal weder Dateien auf der MicroSD-Karte anlegen noch die vorhandenen verschieben oder löschen. Im März ging dann das große Samsung-Update los und inzwischen ist Android 4.4 auch auf einigen Sony-Smartphones und auf dem HTC One installiert. Alle Systeme sind vom „Bug“ betroffen.

Doch bei diesem Verhalten handelt es sich weder um einen Bug in Android noch um eine komplette Neuerung in Android 4.4 „KitKat“. Einzig die Tatsache, dass einige der großen Hersteller wie Samsung und HTC dieses geplante Verhalten von Android zum ersten Mal mit Android 4.4 umsetzten, führte dazu, dass viele Seiten im Netz über Probleme mit MicroSD-Karten und Android 4.4 berichteten. In Wirklichkeit verhält sich Android aber bereits seit Version 3.2 „Honeycomb“ offiziell so, dass nur vom Smartphone-Hersteller vorinstallierte Apps vollen Zugriff auf den externen Speicher erhalten.

Dieser Artikel erklärt, wo das eigentliche Problem liegt, wie es zur Änderung kam und wie Sie Abhilfe schaffen können. Dieser Artikel beschäftigt sich nicht mit der Frage, wie man Apps auf die SD-Karte auslagern kann. Lesen Sie unseren Artikel aus dem Android-User-Archiv, wenn Sie Apps auf die SD-Karte auslagern möchten.

Eigentlich seit Android 3.2…

Cody Toombs hat in einem Artikel bei androidpolice.com Mitte Februar die Neuerungen hervorragend unter dem Stichwort „External Blues“ zusammengefasst und dabei auch angemerkt, dass das aktuell bemängelte Verhalten laut Entwickler Chainfire eigentlich bereits seit Android 3.2 Standard ist. Damals änderte Google die Schreibzugriffe auf den externen Speicher, indem die bisherige Berechtigung WRITE_EXTERNAL_STORAGE um WRITE_MEDIA_STORAGE für den Zugriff auf externen Speicher erweitert wurde. Die neue Berechtigung setzte hingegen das Sicherheitslevel systemOrSignature voraus, das unter Android nur System-Apps oder von Google/vom Hersteller signierte Apps erhalten können.

Zeitgleich mit dieser Umstellung wechselte Android von USB Storage für den Zugriff auf MicroSD-Karten und den internen Flash-Speicher von Android (der auch als EXTERNAL gilt, dazu später mehr) auf das MTP-Protokoll, das die Dateien in einer Art Datenbank pflegt und so externen Tools mehr Möglichkeiten für den bequemen Zugriff bietet. Warum diese Umstellung notwendig war und welche Vor- und Nachteile sie für die meisten Android-Nutzer brachte, haben wir im Artikel „Mediaserver oder Medien sorgt fuer zu hohen Akkuverbrauch“ im Januar 2014 ausführlich beschrieben.

Die jetzt in Kraft getretenen Änderungen haben ihren Ursprung bei Android 3.2 "Honeycomb".
Die jetzt in Kraft getretenen Änderungen haben ihren Ursprung bei Android 3.2 „Honeycomb“.

Die im Artikel erwähnten Neuerungen hielten nicht wie erwähnt in Android 4.0 Einzug, sondern ebenfalls mit Honeycomb, allerdings erst mit Version 3.2. Da es Honeycomb 3.2 aber nie auf eine wirklich große Anzahl Tablets mit MicroSD-Kartenslot geschafft hat, und es den Quellcode erst mit dem Release von Android 4.0 öffentlich gab, hielten viele das Verhalten zunächst für einen Bug. Die meisten Hersteller wagten zudem den Switch zu MTP noch nicht gleich sofort (einige bieten auch unter Android 4 noch das traditionelle USB-Storage als Zugriffslösung an. Das einzige Tablet, das eigentlich die jetzt mit Android 4.4 „KitKat“ bekannt gewordenen Änderungen schon mit Android 3.2 implementierte, war das Xoom von Motorola. Das Xoom wurde bekannterweise zunächst ohne funktionierenden MicroSD-Kartentreiber ausgeliefert (Slot war vorhanden, funktionierte aber nicht) und erhielt erst mit Android 3.2 einen nutzbaren SD-Kartenleser. Die meisten Nutzer dürften die Neuerung somit als Bug abgetan haben. Ein kleines und wichtiges Detail hat sich aber tatsächlich erst mit Android 4.4 geändert, dazu mehr im übernächsten Abschnitt.

Alles externer Speicher, oder was?

Die ersten Geräte mit Android 4.4 waren das Nexus 5 und das neue Nexus 7 (2013). Beide verfügen über keinen MicroSD-Kartenslot, aber Android führt dennoch ein Verzeichnis namens /sdcard0 auf. Dabei handelt es sich um eine separate Partition, die den Apps als Datenspeicher zur Verfügung steht, nicht zu verwechseln mit der MicroSD-Karte (entfernbar), die üblicherweise unter dem Pfad bzw. der Bezeichnung ext_sd oder sdcard1 erreichbar ist. Last but not least gibt es viele Handys und Tablets mit USB-OTG-Support. Einen angeschlossenen USB-Stick bindet das Android-System unter usb0 ein.

Um in öffentliche Verzeichnisse im internen Speicher (sdcard0) schreiben zu können, muss eine App über die Berechtigung WRITE_EXTERNAL_STORAGE verfügen. Ohne diese Berechtigung darf sie nur in ihr eigenes App-Verzeichnis schreiben.

Um in öffentliche Verzeichnisse auf der MicroSD-Karte (ext_sd) schreiben zu können, muss seit Android 4.4 die Gruppe media_rw für die Berechtigung WRITE_EXTERNAL_STORAGE eingetragen sein. Standardmäßig ist das nicht der Fall, deshalb dürfen Apps seit Android 4.4 nicht mehr in ein beliebiges Verzeichnis auf der externen SD-Karte schreiben und auch keine Änderungen an bestehenden Dateien vornehmen. Es ist hingegen weiterhin möglich, in das App-eigene Verzeichnis zu schreiben, dazu ist nicht einmal die Berechtigung WRITE_EXTERNAL_STORAGE notwendig.

Für einen via USB angeschlossenen Speicher gelten noch einmal andere Rechte. Hier ist generell alles möglich und jeder Hersteller kocht sein eigenes Süppchen, was erlaubt ist und was nicht.

Privates Verzeichnis: Als eigenes Verzeichis einer App gilt der Ordner Android/data/App-Name, für die App mit dem Namen com.android.user als zum Beispiel Android/data/android.user. Befindet sich ein solches Verzeichnis auf der MicroSD-Karte kann eine App seit Android 4.4 ohne jegliche besonderen Berechtiungen darin schreiben. Neu werden diese Daten beim Löschen einer App auch mit entfernt. Achten Sie darauf, bevor Sie zum Beispiel eine Kamera-App oder eine Zeichnungs-App löschen! Google weist zudem in der Android-Dokumentation darauf hin, dass Daten in diesen Verzeichnissen vom Mediascanner nicht erfasst werden.

Das Problem mit dem externen Speicher

War es also eine App unter Android 4.3 noch möglich, in ein beliebiges Verzeichnis der MicroSD-Karte via WRITE_EXTERNAL_STORAGE zu schreiben, dürfen Apps ab Android 4.4 nur noch in das eigene Verzeichnis schreiben. Dass diese Neuerung von Android 4.4 (Dokumentation)  erst im Februar 2014 so richtig bekannt wurde, hängt damit zusammen, dass dann die ersten Geräte mit MicroSD-Kartenslot das Update auf Android 4.4 erhielten (Galaxy Note 3, Samsung Galaxy S4).

Unabhängig vom bisher Geschilderten kämpft Android seit eh und je mit einem (Sicherheits-) Problem: Einmal installierte Apps können im externen Speicher quasi beliebig viele und beliebige Verzeichnisse anlegen, die beim Löschen der Apps erhalten bleiben. Dadurch entsteht über die Monate recht viel Datenmüll. Denn in den wenigsten Fällen ist klar, welche Verzeichnissse von welcher App stammen. So konnten Sie sich zum Beispiel ein 5 MByte großes Spiel installieren, das anschließend 2 GByte an Gamedaten nachlud. Beim Löschen des Spiels blieben diese 2 GByte aber erhalten.

Mit den Apps zusammen auch den Datenmüll zu löschen, war noch nie eine besondere Stärke von Android. Je nach Entwickler wurden die Daten auf dem „internen“ externen Speicher zwar entfernt, aber was einmal auf der externen SD-Karte landete, blieb dort meistens für die Ewigkeit. Um sicher zu gehen, dass die entsprechenden Verzeichnisse auch gelöscht werden, musste Android zwei Voraussetzungen erfüllen: Apps müssen sich an Konventionen für die Datenverzeichnisse halten und: Apps dürfen nur in bestimmte Verzeichnisse schreiben. Mit Android 4.4 sah Google den Zeitpunkt endlich gekommen, um diese Neuerung umzusetzen. Schreibt also eine App auf die SD-Karte, dann werden diese Daten ab Android 4.4 beim Löschen der App entfernt.

Hier ist es recht einfach zu erraten, aber wissen Sie immer, zu welcher App welches Verzeichnis gehört?
Hier ist es recht einfach zu erraten, aber wissen Sie immer, zu welcher App welches Verzeichnis gehört?

Lässt sich dieses neue Verhalten abstellen?

Ja, aber nur mit Root-Rechten: Wenn Sie ihr Handy oder Tablet gerootet haben, können Sie diese Neuerung recht einfach über einen zusätzlichen Eintrag in der Datei /system/etc/permissions/platform.xml quasi rückgängig machen. Um eine Lösung des Problems können sich also auch die Gerätehersteller und natürlich auch die ROM-Köche bemühen. Dazu ergänzen Sie den Abschnitt für android.permission.WRITE_EXTERNAL_STORAGE um Zeile 70 herum um den Eintrag group gid=“media_rw“. Das Recht für WRITE_EXTERNAL_STORAGE verhält sich dann, wie wenn es das Recht für WRITE_MEDIA_STORAGE wäre (das von Haus aus nur System-Apps und vom Hersteller signierten Apps zusteht).

  <permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
        <group gid="sdcard_r" />
        <group gid="sdcard_rw" />
        <group gid="media_rw" />    
  </permission>

Achten Sie unbedingt darauf, dass die Datei die Unix-Rechte 644 (rw-/r–/r–) behält, da es sonst beim Neustart zu Problemen kommt. Diese Änderung ist aber lediglich ein Spiel auf Zeit. Wenn Sie ihr Handy eh schon gerootet haben, dann empfehlen wir Ihnen, mit symbolischen Verknüpfungen zu arbeiten. Also zum Beispiel einen Link von Musik-Verzeichnis auf der SD-Karte als /sdcard0/Music anzulegen.

Beachten Sie, dass beim Löschen einer App ab Android 4.4 die Home-Verzeichnisse der App auf dem internen und dem externen Speicher mit gelöscht werden. Benutzen Sie deshalb als App-Entwickler stets entsprechende öffentliche Verzeichnisse, um Fotos, Musik, Videos oder andere Daten abzulegen, die der Nutzer eventuell auch nach dem Löschen noch behalten möchte.

Mit einer kleinen Änderung an der Datei platform.xml lässt sich die Änderung wieder rückgängig machen.
Mit einer kleinen Änderung an der Datei platform.xml lässt sich die Änderung wieder rückgängig machen.

Workarounds

Viele App-Entwickler haben das Problem erkannt und bieten für Ihre Apps entsprechende Updates an. Bei XDA-Developers gibt es auch ein Stück-Code, das zum Beispiel einem Dateimanager über Umwegen das Anlegen von Dateien auf der externen SD-Karte auch ohne Root-Rechte möglich macht. Deshalb ist es zum Beispiel mit dem ES Datei Explorer und einigen weiteren Dateimanagern auch unter KitKat noch möglich, beliebige Verzeichnisse auf der SD-Karte anzulegen (das Löschen aber schon nicht mehr). Generell sollte man sich jedoch mit den neuen Spielregeln von Google abfinden, zudem lassen sich die meisten Aufgaben mit dem vorinstallierten Dateimanager von Samsung oder Sony lösen. Lediglich HTC-Benutzer stehen ohne kompletten File Manager da.

Ein Umweg, der in vielen Fällen funktioniert, ist das Umbenennen der entsprechenden Verzeichnisse via PC. Denn das Lesen der entsprechenden Dateien ist in jedem Fall weiterhin möglich, lediglich beim Schreiben fehlen die nötigen Rechte (schreiben bedeutet auch verschieben, löschen, umbenennen). Haben Sie Ihre Musik zum Beispiel bisher auf der MicroSD-Karte im Ordner Musik (im Verzeichnis /ext_sd/Musik aufbewahrt, dann können zwar sämtliche Player die dort vorhandenen Titel abspielen, aber eine App, die sich auf den Download von MP3-Dateien spezialisiert hat, darf dort keine Dateien mehr speichern und auch keine vorhandenen ändern. Kritisch wird das Problem dann, wenn Sie eine MP3-Datei vom Verzeichnis der Download-App ins Verzeichnis „Musik“ verschieben möchten. Das klappt nur mit einer System-App. Deshalb kann zum Beispiel die neueste Version von Google Play Music Daten auf die SD-Karte auslagern, andere Apps dürfen das hingegen nicht. Liefert der Hersteller wie zum Beispiel bei HTC keinen Dateimanager mit, dann gibt es tatsächlich keine Möglichkeit, auf dem Android-Gerät selbst Daten vom internen auf den externen Speicher zu verschieben.

Abb. 4:Als eine von Google signierte App darf Google Play Music Dateien auf der externen SD-Karte ablegen.
Abb. 4:Als eine von Google signierte App darf Google Play Music Dateien auf der externen SD-Karte ablegen.

Dateitypen statt Verzeichnisse

Das Android-Design-Team hat sich lange dagegen gesträubt, Android von Haus aus mit einem Dateimanager zu versehen. Lange war es nicht möglich, in der Gmail-App eine beliebige Datei als Anhang auszuwählen, lediglich Bilder zu verschicken, sah die App von Haus aus vor (über das Teilen-Menü gab es allerdings stets einen Workaround für andere Dateitypen). Seit einigen Versionen gibt es jedoch auch bei Gmail den Menüpunkt Datei anhängen. Die darauf startende App ist eine Art Mini-Dateimanager von Google, der der neuen Downloads-App nicht unähnlich sieht. Das Konzept dahinter ist nicht schwer zu verstehen: statt den Nutzer nach einem bestimmten Foto in einem bestimmten Verzeichnis browsen zu lassen, gibt es lediglich ein Verzeichnis Fotos zur Auswahl, das sämtliche Fotos auf dem Android-Gerät auflistet. Sie müssen nicht zuerst herausfinden, wo die MP3-Download-App die Musik speichert, der Mini-Dateimanager von Android zeigt Ihnen alle Musikstücke an, egal in welchem Verzeichnis sich diese befinden. Möglich macht dies das Media Transfer Protokoll: MTP. Somit schließt sich hier der Kreis zu Android 3.2 wieder, bei dem die Änderungen ihren Ursprung haben.

Seit Android 4.4 kann man über den Datei anhängen Dialog von Gmail eine beliebige Datei auswählen.
Seit Android 4.4 kann man über den Datei anhängen Dialog von Gmail eine beliebige Datei auswählen.

Das Media Transfer Protokoll bringt noch einen weiteren Vorteil mit sich: Während beim USB-Massenspeicher das Gast-Betriebssystem beim Anschließend des Smartphones über die entsprechenden Dateisystemtreiber verfügen muss, ist dies bei MTP irrelevant. Eine mit dem Linux-Dateisystem Ext4 formatierter Flash-Speicher lässt sich also unter Linux, Mac OS X und Windows ohne zusätzliche Dateisystemtreiber nutzen. Es genügt, wenn der MTP-Support gegeben ist. So ist es auch möglich, eine einheitliche Schnittstelle über Dateisystemgrenzen hinaus bereitzustellen.

Zusammenfassung

Mit Android 3.2 „Honeycomb“ hat Google begonnen, den Zugriff auf Verzeichnisse im internen und externen Speicher zu beschränken und die Daten auf dem Android-System in einer Datenbank-ähnlichen Struktur zu speichern (MTP). Beim Löschen von Apps hat das Android-System oft Verzeichnisse auf dem externen Speicher zurückgelassen. Seit Android 4.4 dürfen Apps ohne spezielle Berechtigung nur noch in ihre privaten Verzeichnisse (Home-Verzeichnisse) schreiben. Diese Verzeichnisse werden beim Deinstallieren einer App gelöscht. Außerhalb des privaten Verzeichnisses zu schreiben, ist seit Android 4.4 für gewöhnliche Apps nur noch mit der Berechtigung WRITE_EXTERNAL_STORAGE und nur auf dem „internen“ externen Speicher (sdcard0) möglich. Die Berechtigung für das Schreiben auf die MicroSD-Karte WRITE_MEDIA_STORAGE gibt es nur für System-/Hersteller-Apps. Nicht System-Apps können deshalb seit Android 4.4 keine Änderungen mehr an den Daten auf der SD-Karte vornehmen. Wie bisher gilt auch mit Android 4.4 weiterhin: Wer sein Gerät gerootet hat, kann damit machen, was er will!

  • franc

    Eine simple Einstellung in den Systemeinstellungen, die es dem mündigen Benutzer erlaubt hätte, diese SD-Karten-Schreibberechtigung wieder allen Apps zu geben, hätte völlig genügt.
    Es ging offenbar um etwas anderes, sonst hätte es diese Einstellung mit 4.4 gegeben.

    Ich vermute, das war eher ein Test, um zu sehen, wie weit man mit dem Android-Monopol schon ist, also ob man sich so eine Gängelung erlauben kann.

  • Andreas

    Ich denke, das ist nicht nur ein Test – dahinter steckt Planung und Methode. Die Absicht dahinter scheint mir völlig klar: Google ist und bleibt eine Datenkrake und alles zielt darauf ab, sämtliche Anwenderdaten in die Cloud zu bekommen. Interessanterweise sind mit Kitkat auch gefällige optische Aufhübschungen und Einstellungen zur Home- u. Lockscreengestaltung hinzugekommen und es läuft auch flüssiger, weniger Ruckler. Wäre auch schon früher möglich gewesen, aber mit ein paar Zückerlis kann man eben so manche User bestechen.

    Mit Sicherheit hat das nicht wirklich etwas zu tun. Apps zu zwingen, bei Deinstallation keine Mülldaten zu hinterlassen und nicht auf Daten anderer Apps zugreifen zu können, ginge auch, ohne das Schreiben auf ext. Datenträger zu unterbinden.

    Ich persönlich habe alle meine Geräte (natürlich gerooted) nicht auf Kitkat geupdatet oder zurückgesetzt, bleibe solange es geht bei 4.2 Jellybean. Mir geht Freiheit über Optik. Keine App greift bei mir auf irgendwelche Daten zu, ohne dass ich es bemerke und (mit Root) unterbinden kann. Ebenso dringt natürlich keinerlei Werbung durch, auch keine Inapp-Werbung. An diesem Mist tragen natürlich auch die zahllosen User mit „Alles kostenlos oder billig“-Mentalität erheblich bei. Wie sollen es Entwickler denn auf diese Weise anders finanzieren als mit Werbung, wenn die Leute wegen ein paar Cent für den Kauf schon in Tränen ausbrechen. Wenn mir eine Anwendung gefällt, zahle ich auch dafür, kein Problem.

  • Sinista

    Zu sagen das gab’s ja schon bei Android 3 is doch etwas weit hergeholt. Android 3 ist ein reines Tablet Betriebssystem das auf normalen Handys garnicht läuft. So ein Verhalten von Google pusht nur die Verkaufszahlen von Apple und Microsoft

  • Sinista

    Ich sehe das auch so dass Google nur versucht die persönlichen Daten auf die Cloud zu bekommen um diese besser durchsuchen zu können. Vernünftige andere Gründe gibt es nicht. Es gibt für mobile Geräte fast nur Volumenverträge. Wenn alles auf der Cloud ist bedeutet das mehr Internetverbrauch und höhere Kosten und ohne Internet wird das Handy bald nicht mehr nutzbar sein. Des weiteren ist es mir sehr unangenehm meine Daten auf andere Leute Rechnern zu speichern. Ich hoffe bei Android 5 wird’s wieder besser.

  • Herbert

    1.Ich habe Kamera Lumix DMC-TZ 5und möhte die Fotos(SDHC-Speicherkarte)auf meinTablet samsung galaxy tab 4 anddroid 4.4 übertragen.Gibt es ein Übertragungskabel von Kamera zum MicroSD CARD SLOT ? 2.Neuerdings benutze ich für die Kamera einen micro SDHC Chip (im Adapter).Diesen micro-chip kann ich in den micro sd card slot einsetzen.Mit welchem Programm oder app oder …………kann ich die Fotos runterladen , bearbeiten,entfernen und wiederholt in Kamera einsetzen,fotografieren,runterladen usw. usw!! Bin auf diesem Gebiet absoluter Neuling.

  • greenhoorn

    Das Vertrauen in dieses BS ist massiv gefallen. Ich bin noch mit JB 4.3 unterwegs, hab eine App geupdatet (Quickpic v3.7) und im Update war der SR-Entzug versteckt miteingebettet, unglaublich dreist die Kraaken-Politik !
    Es gibt viele, die sich der DATENKRAAKE nicht einfach ausliefern wollen, ja seit Edward Snowden ♡