Malheureusement, depuis Android 4.2, il n'est plus possible sur la plupart des appareils de monter un dossier et de le rendre disponible pour d'autres applications également. Les détails sur le fonctionnement de cela et pourquoi cela a été modifié peuvent être trouvés ici : Correctif pour les répertoires montés vides (CifsManager, etc.) dans Android 4.2.
La page mentionnée ci-dessus dit ceci :
Initialement posté par le message de commit du correctif Zygote
Zygote : Restreindre l'espace de montage esclave afin que les applications Dalvik puissent monter des volumes à l'échelle du système Android 4.2 met en œuvre le stockage multi-utilisateur en utilisant des espaces de noms de montage par processus. Initialement, tout sous "/" (toute la hiérarchie du système de fichiers) est marqué comme un espace de montage esclave récursif pour toutes les instances de zygote. Cela est fait pour que les montages en bac à sable de stockage utilisateur sous /storage/emulated soient cachés des autres applications et utilisateurs. Malheureusement, cela signifie que toute application Dalvik (en fait, tout programme dont l'ascendance de clonage/bifurcation inclut une zygote Dalvik, c'est-à-dire tout sauf les services lancés directement depuis init) ne peut pas monter des volumes à l'échelle du système. Ainsi, des applications comme CifsManager sont effectivement inutilisables dans Android 4.2, car ses montages cifs ne sont visibles que pour l'application CifsManager elle-même. Toutes les autres applications voient des points de montage vides au lieu du volume monté. De plus, Linux ne prévoit aucune disposition pour qu'un processus "échappe" à un espace de montage esclave récursif dans des versions antérieures à Linux 3.8 (appel sys_setns).
Ici, nous restreignons l'espace de montage esclave à /storage (et, en raison d'un possible bogue du noyau, /mnt/shell/emulated) afin que les applications Dalvik puissent monter des volumes à l'échelle du système ailleurs (avec les autorisations appropriées, comme dans les versions précédentes d'Android), tout en conservant une compatibilité complète avec le stockage multi-utilisateur. Ce changement nécessite qu'un volume tmpfs soit monté en tant que /storage dans init.rc. Si ce volume n'est pas disponible, alors Zygote revient au comportement précédent de marquer toute la hiérarchie du système de fichiers comme esclave. Il nécessite également implicitement que EMULATED_STORAGE_TARGET soit préfixé par le chemin (partie de la sous-hiérarchie) ANDROID_STORAGE, ce qui est le cas typique.
En fin de compte, si les applications montent un répertoire ou un périphérique de blocs, le répertoire monté ne devrait être visible que pour les applications qui ont effectué le montage, sauf si l'application a des autorisations spéciales, qui ne sont généralement pas disponibles pour les applications non système. Et même si vous parvenez à monter le répertoire de manière globale, les autorisations Linux seront toujours un obstacle.
Par conséquent, le montage n'est probablement pas la solution la plus simple à votre problème, mais si vous souhaitez vraiment utiliser des montages, vous devriez pouvoir ajouter les commandes à /system/bin/debuggerd
et ensuite (en tant que superutilisateur) saisir start debuggerd
pour exécuter votre propre script avec des privilèges système.
Il y a cependant un moyen plus simple de contourner les problèmes de lecture seule, soit en installant cette application ou en ajoutant manuellement le groupe media_rw
à WRITE_EXTERNAL_STORAGE
dans le fichier de permissions. Cela permet aux applications ayant l'autorisation d'écrire sur la carte SD émulée d'écrire également sur la carte SD "externe".
Après avoir rendu votre stockage externe inscriptible, vous devriez pouvoir utiliser des liens symboliques (ln -s /sdcard/MyPics /sdcard/DCIM/Camera
) pour permettre un accès rapide à ces répertoires.
0 votes
Avez-vous essayé d'utiliser
ln -s
?ln -s /sdcard/MyPics /sdcard/DCIM/Camera
. Vous devrez d'abord déplacer le dossier Camera.0 votes
Comment monter un dossier à l'intérieur de /sdcard avec les autorisations correctes?