Permettre l'accès en ériture sur la carte SD sous Android 4.4 KitKat

 

Il s'agit ici d'expliquer comment autoriser les applications sous Android 4.4 à accéder à la carte SD.

Si votre problème est lié à un problème d'accès à la carte SD pour transférer une application de la mémoire interne à la carte SD, il s'agit d'un tout autre sujet !

Comme déjà indiqué pour le développement sous Android , Google n'a jamais vraiment aimé la présence de micro SD dans les smartphones. Ceci est certainement lié (comme chez Apple) à une préférence pour un usage de son cloud, permettant de récupérer vos données perso. en passant.

Avant KitKat, les applications pouvaient accéder à la carte SD en lecture comme en écriture même si celle-ci n'était pas l'unité de stockage primaire (comme peuvent le faire certains appareils).

Ce qui était d'ailleurs un très gros avantage par rapport aux modèles d'un certain fruit que je ne nommerais pas.

Depuis Kitkat, Google considère cette possibilité comme une faille de sécurité. Il n'est donc plus possible à une application d'accéder à n'importe quel répertoire en écriture si cette application n'en est pas propriétaire (seul le répertoire correspondant au package de l'application sous Android/data sera accessible).

NoteLes fichiers présents dans le répertoire orrespondant au package de l'application sous android/data sera effacé si vous désinstallez cette application, pensez à sauver vos fichiers de sauvegarde qui si trouverez avant de supprimer cette application !

Avant KitKat, cela fonctionnait, alors qu'y a-t-il de changé depuis ?

Pour le savoir, et surtout pour pouvoir rétablir cette autorisation d'écriture, il faut impérativement rooter votre appareil. Car il s'agit de rétablir ce droit dans un fichier de configuration du système:

Le fichier se trouve sous /system/etc/permissions, et il se nomme platform.xml.

 

En comparant le contenu de ce fichier avec une version 4.3, vous constaterez qu'une ligne a disparu dans la section "permission" pour "android.permission.WRITE_EXTERNAL_STORAGE", il s'agit de la ligne suivante:

<group gid="media_rw" />

Il suffit donc de l'ajouter dans le fichier puis de relancer votre appareil pour que cela remarche. Cependant, le fichier étant un fichier du système, il faudra avoir rooté votre appareil pour pouvoir apporter cette modification !

 

Trois solutions pour apporter la modification:

- Vous pouvez trouver une petite application qui fera le nécessaire sur le forum xda developers. Faîtes un double du fichier avant d'utiliser ce programme et contrôlez que la modification est correcte avant de rebooter. Si elle n'est pas bonne, faîtes les manipulations à la main (expliqué ci-après) en repartant du double du fichier ! Ne surtout pas rebooter l'appareil si le fichier est altéré !

- Utilisez BuildPro qui permet la modification de fichiers xml dans un répertoire monté en lecture seule. Cliquez sur le stylo et insérez la ligne <group gid=”media_rw” /> dans la section "permission" pour "android.permission.WRITE_EXTERNAL_STORAGE" puis sauvez à l'aide de la disquette.

- Ou le faire vous même à la main ! Un utilitaire comme es explorer sera indispensable mais ne sera pas suffisant ! Il permettra d'ajouter la ligne manquante. Sinon, vous pouvez toujours passer par votre PC pour modifier le contenu d'un double de ce fichier que vous aurez recopié sur votre unité de stockage (sdcard0, sdcard1, ...)

AttentionAttention au format de fichier, choisir un format Unix sous PC (LF). Puis sous Android au correcteur d'orthographe qui va remplacer media par média !

NoteEvidemment, il existe d'autres solutions similaires, par exemple root explorer mais version payante, vous pourrez monter le répertoire en r/w puis modifier le fichier avec l'éditeur de texte de root explorer.

 

Pour ceux qui voudraient faire la manip.:

- Recopiez le fichier platform.xml sur votre unité de stockage (via es explorer, sous sdcard0 ou sdcard1, ce sera plus facile).

- Modifiez le contenu de ce nouveau fichier (toujours facile à faire via es explorer qui possède un éditeur de fichiers textes).

- Le plus délicat, c'est maintenant. Il faut recopier ce nouveau fichier sur l'ancien. Pour cela, il faudra utiliser Terminal Emulator pour lancer des commandes Unix.

Il faut en effet remonter le répertoire /system en lecture/ecriture.

Maintenant, recopiez votre fichier sous /system/etc/permissions, éventuellement, faîtes un double avant !

cd /system/etc/permissions

cp platform.xml platform.xml.old

cp /storage/--- unité de stockage utilisée ---/platform.xml .

ou --- unité de stockage utilisée --- est à priori sdcard0 ou sdcard1...

 

Pour ceux qui ne connaissent pas:

cd pour change directory, permet de se psitionner sous /system/etc/permissions

cp permet de copier un fichier. Le premier cp va permettre de faire une copie de platform.xml en platform.xml.old (sauvegarde). Il sera ainsi possible de le restaurer en tapant cp platform.xml.old platform.xml au cas où !

Le second va copier votre fichier modifié sur celui d'origine.

 

Contrôlez que le fichier est bien en rw r r et le propriétaire est bien root pour le groupe root.

ll platform.xml

(ll c'est LL mais en minuscule !)

Sinon

Pour remettre les droits d'accès:

chmod 644 platform.xml

Pour le propiétaire:

chown root:root platform.xml

 

Voilà, c'est terminé, vous n'avez plus qu'à rebooter votre appareil !