CYBERHOLIC /// BLOGGER SINCE 09/2000

Root ist nich gleich external root!

Published on Sep 16, 2019 09:38:00

Nach fast zwei Wochen habe ich endlich verstanden warum ich in meiner letzten App null schreiberechte auf die SD Karte bekam. Es ist - mal wieder - ein verständigungsproblem. Zwischen mir und der Cordova Dokumentation.

Das Problem ist folgendes: wenn man eine App programmiert der man erlaubt auf das Smartphone zu schreiben (Verzeichnisse anlgen, Files hin und her schieben, Files erstellen etc.) dann gibt es via dem Cordova File plugin mehrere Zielorte die man definieren kann. Unter Android wären diese folgende:

Speicherort Definition Ordner Schreiberechte Privat?
file:///android_asset/ applicationDirectory assets r Yes
/data/data// applicationStorageDirectory - r/w Yes
   cache cacheDirectory cache r/w Yes
   files dataDirectory files r/w Yes
      Documents
documents r/w Yes
/ externalRootDirectory sdcard r/w No
   Android/data// externalApplicationStorageDirectory - r/w No
      cache externalCacheDirectory cache-external r/w No
      files externalDataDirectory files-external r/w No


Die ersten fünf sind interne Speicherort auf dem Telefon. Viele Telefone halten diese Speicherorte niedrig, da sich hier hauptsächlich die Apps und Systemfiles befinden.  Bei einem Gerät mit 32GB und ein paar dutzend Apps ist der Speicher aber schnell voll. Daher gibt es nach wie vor die Möglichkeit den Speicher um eine externe Definition zu  erweiten. Und genau hier liegt die crux. Gerade bei älteren und asiatischen Geräten gibt es nach wie vor die Möglichkeit den Speicher über eine externe SD-Karte zu erweitern. Andere Geräte verbauen entweder einen zweiten internen Speicher oder partitionieren den Hauptspeicher.Nach der obigen Tabelle, ging ich davona us das die Defintionen mit external.... stets auf den externen Speicher hinwiesen. Falsch gedacht. Wenn ich in meiner app das erste external mit externalRootDirectory benutzte, ging die app davon aus, das sich in dem Telefon eine SD Karte befindet. Die anderen drei external* Definitionen beziehen sich ausschliesslich auf die emulierte variante und auch nur auf den Speicherort der App.

Dieser Speicherort lautet allerdings oft sowas wie /Android/Data/com.qroft.appname/files/ .... also viel zu kompliziert wenn man einem DAU sagen möchte das er dort bitte ein paar files ablegen kann.

Die Lösung ist jetzt also erstmal fest zu stellen ob überhaupt eine SD-Karte existiert. Grob genommen wie folgt:

CHECKE OF EINE SD KARTE EXISTIERT
WENN JA, nennt sich der externe Ordner externalRootDirectory

WENN NEIN nennt sich der externe Ordner /stoarge/emulate/0/ oder so ähnlich.

Related posts

Monday, 16.09.2019 23:57:00
Wednesday, 14.08.2019 22:57:00
Saturday, 04.05.2019 15:30:00
Monday, 08.04.2019 22:13:00
Sunday, 31.03.2019 23:16:00
Tuesday, 19.03.2019 22:57:00
Monday, 18.03.2019 23:42:00
Saturday, 23.02.2019 23:53:00
Monday, 18.02.2019 14:55:00