Ich frage mich nur, ob es eine Möglichkeit gibt, einen internen /sdcard
Ordner an einen anderen internen /sdcard
Ordner zu binden, in den normale Apps für Android-Versionen seit 4.4 schreiben können.
Ich habe einen Ordner mit dem Namen ./MyPics
in der internen /sdcard
. Ich möchte es an ./DCIM/Camera
, ./Pictures/Screenshots
, binden ./Movies/Screencasts
. Die SD-Karte ist /mnt/shell/emulated/0
als gemountet sdcardfs
und mit symbolisch verknüpft /storage/emulated/legacy
. Außerdem gibt es ein Verzeichnis /storage/emulated/0
, das weder ein Einhängepunkt noch ein Symlink ist. Es ist ein sehr seltsames Verzeichnis.
Folgendes habe ich versucht:
mount -o bind,dmask=0000,fmask=0000 /mnt/shell/emulated/0/MyPics /mnt/shell/emulated/0/DCIM/Camera
mount -o bind,dmask=0000,fmask=0000 /mnt/shell/emulated/0/MyPics /mnt/shell/emulated/0/Pictures/Screenshots
mount -o bind,dmask=0000,fmask=0000 /mnt/shell/emulated/0/MyPics /mnt/shell/emulated/0/Movies/Screencasts
aber es hat keinen Zweck: Apps wie die Kamera konnten nicht hineinschreiben/DCIM/Camera
Folgendes habe ich versucht:
mount -o bind,dmask=0000,fmask=0000 /storage/emulated/legacy/MyPics /mnt/shell/emulated/0/...
....
aber es nützt auch nichts
Folgendes habe ich versucht:
mount -o bind,dmask=0000,fmask=0000 /data/media/0/MyPics /data/media/0/...
....
Wenn es eine Datei mit dem Namen a.jpg
in /MyPics
gibt, erscheint sie in /data/media/0/DCIM/Camera
, aber nicht in/storage/emulated/legacy/DCIM/Camera
Ich habe versucht, Apps wie LuckPatcher zu verwenden, um die Arbeit zu erledigen, aber es ist wieder fehlgeschlagen
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: Fix für leere App-gemountete Verzeichnisse (CifsManager usw.) in Android 4.2 .
Auf der oben genannten Seite steht folgendes:
Ursprünglich geschrieben von Zygote-Patch-Commit-Nachricht
Zygote: Beschränken Sie den Slave-Mountspace, damit Dalvik-Apps systemweite Volumes mounten können. Android 4.2 implementiert Multi-User-Speicher mit Mount-Namespaces pro Prozess. Ursprünglich ist alles unter „/“ (die gesamte Dateisystemhierarchie) als rekursiver Slave-Mountspace für alle Zygote-Instanzen markiert. Dies geschieht, damit Benutzerspeicher-Sandbox-Mounts unter /storage/emulated vor anderen Apps und Benutzern verborgen werden. Leider bedeutet dies, dass jede Dalvik-App (eigentlich jedes Programm, dessen Klon-/Fork-Vorfahren eine Dalvik-Zygote enthalten, was alles ist, außer Dienste, die direkt von init hervorgebracht werden) keine systemweiten Volumes mounten kann. Daher werden Apps wie CifsManager in Android 4.2 effektiv beschädigt, da seine cifs-Mounts nur für die CifsManager-App selbst sichtbar sind. Alle anderen Apps sehen leere Mountpoints 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 einhängen können (mit entsprechender Erlaubnis, wie in früheren Versionen von Android). , während die volle Speicherkompatibilität für mehrere Benutzer erhalten bleibt. Diese Änderung erfordert, dass ein tmpfs-Volume als /storage in init.rc gemountet wird. Wenn dieses Volume nicht verfügbar ist, fällt Zygote auf das vorherige Verhalten zurück und markiert die gesamte Dateisystemhierarchie als Slave. Es erfordert auch implizit, dass EMULATED_STORAGE_TARGET ein Pfad-Präfix von (Teil der Unterhierarchie von) ANDROID_STORAGE ist, was der typische Fall ist.
Es kommt darauf an, dass, wenn Apps ein Verzeichnis mounten oder ein Gerät blockieren, das gemountete Verzeichnis nur für die Apps sichtbar sein sollte, die das Mounten durchgeführt haben, es sei denn, die App verfügt über spezielle Berechtigungen, die Nicht-System-Apps im Allgemeinen nicht zur Verfügung stehen. Und selbst wenn Sie es schaffen, das Verzeichnis global zu mounten, werden Ihnen die Linux-Berechtigungen immer noch im Weg stehen.
Daher ist das Mounten wahrscheinlich nicht die einfachste Lösung für Ihr Problem, aber wenn Sie 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 Systemrechten auszuführen.
Es gibt jedoch eine einfachere Möglichkeit, die Nur-Lese-Probleme zu umgehen, entweder durch Installieren dieser App oder durch manuelles Hinzufügen der media_rw
Gruppe zur WRITE_EXTERNAL_STORAGE
in der Berechtigungsdatei. Dadurch können Apps, die die Berechtigung haben, auf die emulierte SD-Karte zu schreiben, 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.
ruhig halten
ln -s
?ln -s /sdcard/MyPics /sdcard/DCIM/Camera
. Sie müssen zuerst den Kameraordner verschieben.Irfan Latif