Leider ist es seit Android 4.2 auf den meisten Geräten nicht mehr möglich, einen Ordner zu mounten und ihn auch anderen Apps zur Verfügung zu stellen. Die Details dazu, wie dies funktioniert und warum dies geändert wurde, finden Sie hier: Korrektur für leere App-gemountete Verzeichnisse (CifsManager usw.) in Android 4.2 .
Die oben erwähnte Seite sagt dies:
Zitat von Zygote Patch Commit Nachricht
Zygote: Beschränken Sie den Slave-Mountspace, damit Dalvik-Apps systemweite Volumes bereitstellen können. Android 4.2 implementiert Mehrbenutzerspeicher mithilfe prozessbezogener Mount-Namespaces. Ursprünglich ist alles unter "/" (die gesamte Dateisystemhierarchie) als rekursiver Slave-Mountspace für alle Zygote-Instanzen markiert. Dies geschieht, damit Benutzerspeicher-Sandbox-Bereitstellungen unter / storage / emulated vor anderen Apps und Benutzern ausgeblendet werden. Leider bedeutet dies, dass jede Dalvik-App (tatsächlich jedes Programm, dessen Klon- / Gabel-Abstammung eine Dalvik-Zygote enthält, die alles außer Diensten ist, die direkt von init erzeugt wurden) keine systemweiten Volumes bereitstellen kann. Daher sind Apps wie CifsManager in Android 4.2 effektiv kaputt, da die Cifs-Mounts nur für die CifsManager-App selbst sichtbar sind. Alle anderen Apps sehen leere Mountpunkte anstelle des gemounteten Volumes. Außerdem,
Hier beschränken wir den Slave-Mountspace auf / storage (und aufgrund eines möglichen Kernel-Fehlers auf / mnt / shell / emulated), damit Dalvik-Apps systemweite Volumes an anderer Stelle bereitstellen können (mit entsprechender Berechtigung, wie in früheren Versionen von Android). unter Beibehaltung der vollständigen Speicherkompatibilität für mehrere Benutzer. Diese Änderung erfordert, dass ein tmpfs-Volume als / storage in init.rc bereitgestellt wird. Wenn dieses Volume nicht verfügbar ist, greift Zygote auf das vorherige Verhalten zurück, bei dem die gesamte Dateisystemhierarchie als Slave markiert wurde. Es erfordert auch implizit, dass EMULATED_STORAGE_TARGET dem Pfad (Teil der Unterhierarchie von) ANDROID_STORAGE vorangestellt wird, was der typische Fall ist.
Wenn Apps ein Verzeichnis mounten oder ein Gerät blockieren, sollte das gemountete Verzeichnis nur für die Apps sichtbar sein, die das Mounten durchgeführt haben, es sei denn, die App verfügt über spezielle Berechtigungen, die für Nicht-System-Apps im Allgemeinen nicht verfügbar sind. Und selbst wenn Sie es schaffen, das Verzeichnis global bereitzustellen, stehen Ihnen die Linux-Berechtigungen weiterhin im Weg.
Daher ist das Mounten wahrscheinlich nicht die einfachste Lösung für Ihr Problem. Wenn Sie jedoch wirklich Mounts verwenden möchten, sollten Sie in der Lage sein, die Befehle hinzuzufügen /system/bin/debuggerd
und dann (als root) einzugeben start debuggerd
, um Ihr eigenes Skript mit Systemberechtigungen auszuführen.
Es gibt jedoch eine einfachere Möglichkeit, die schreibgeschützten Probleme zu umgehen, indem Sie diese App installieren oder die media_rw
Gruppe manuell WRITE_EXTERNAL_STORAGE
zur Berechtigungsdatei hinzufügen . Auf diese Weise können Apps, die zum Schreiben auf die emulierte SD-Karte berechtigt sind, auch auf die 'externe' SD-Karte schreiben.
Nachdem Sie Ihren externen Speicher beschreibbar gemacht haben, sollten Sie symlinks ( ln -s /sdcard/MyPics /sdcard/DCIM/Camera
) verwenden können, um einen schnellen Zugriff auf diese Verzeichnisse zu ermöglichen.
ln -s
?ln -s /sdcard/MyPics /sdcard/DCIM/Camera
. Sie müssen zuerst den Kameraordner verschieben.