Desafortunadamente, desde Android 4.2 ya no es posible en la mayoría de los dispositivos montar una carpeta y hacerla disponible para otras aplicaciones también. Los detalles de cómo funciona esto y por qué se cambió se pueden encontrar aquí: Corrección de directorios vacíos montados en aplicaciones (CifsManager, etc.) en Android 4.2 .
La página mencionada anteriormente dice esto:
Publicado originalmente por Zygote patch commit message
Zygote: Restringir el espacio de montaje esclavo para que las aplicaciones Dalvik puedan montar volúmenes de todo el sistema Android 4.2 implementa el almacenamiento multiusuario utilizando espacios de nombres de montaje por proceso. Originalmente, todo lo que está bajo "/" (toda la jerarquía del sistema de archivos) se marca como espacio de montaje esclavo recursivo para todas las instancias de zygote. Esto se hace para que los montajes sandbox de usuario bajo /storage/emulated estén ocultos a otras aplicaciones y usuarios. Desafortunadamente, esto significa que cualquier aplicación Dalvik (en realidad, cualquier programa cuyo clon/fork incluya un cigoto Dalvik, que es todo excepto los servicios generados directamente desde init) no puede montar volúmenes a nivel de sistema. Por lo tanto, aplicaciones como CifsManager están efectivamente rotas en Android 4.2, ya que sus montajes cifs sólo son visibles para la propia aplicación CifsManager. Todas las demás aplicaciones ven puntos de montaje vacíos en lugar del volumen montado. Además, Linux no proporciona ninguna disposición para que un proceso "escape" de un espacio de montaje recursivo-esclavo en versiones anteriores a Linux 3.8 (setns syscall).
En este caso, restringimos el espacio de montaje esclavo a /storage (y, debido a un posible error del kernel, a /mnt/shell/emulated) para que las aplicaciones Dalvik puedan montar volúmenes de todo el sistema en cualquier otro lugar (con los permisos adecuados, como en versiones anteriores de Android), al tiempo que se mantiene la compatibilidad total con el almacenamiento multiusuario. Este cambio requiere que se monte un volumen tmpfs como /storage en init.rc. Si este volumen no está disponible, entonces Zygote vuelve al comportamiento anterior de marcar toda la jerarquía del sistema de archivos como esclavo. También requiere implícitamente que EMULATED_STORAGE_TARGET esté prefijado por (parte de la subjerarquía de) ANDROID_STORAGE, que es el caso típico.
Lo que viene a decir es que si las aplicaciones montan un directorio o un dispositivo de bloque, el directorio montado sólo debería ser visible para las aplicaciones que hicieron el montaje, a menos que la aplicación tenga permisos especiales, que generalmente no están disponibles para las aplicaciones no relacionadas con el sistema. E incluso si consigues montar el directorio de forma global, los permisos de Linux seguirán estorbando.
Por lo tanto, el montaje no es probablemente la solución más fácil a su problema, pero si usted realmente quiere usar montajes debe ser capaz de añadir los comandos a /system/bin/debuggerd
y luego (como Root) introduzca start debuggerd
para ejecutar su propio script con privilegios del sistema.
Sin embargo, hay una forma más fácil de evitar los problemas de sólo lectura, ya sea instalando esta aplicación o añadiendo manualmente el media_rw
grupo a la WRITE_EXTERNAL_STORAGE
en el archivo de permisos. Esto permite que las aplicaciones que tienen permiso para escribir en la tarjeta SD emulada también escriban en la tarjeta SD "externa".
Después de hacer que su almacenamiento externo sea escribible, debería poder utilizar enlaces simbólicos ( ln -s /sdcard/MyPics /sdcard/DCIM/Camera
) para permitir un acceso rápido a estos directorios.
0 votos
¿Has probado a utilizar
ln -s
?ln -s /sdcard/MyPics /sdcard/DCIM/Camera
. Primero tendrás que mover la carpeta de la Cámara.0 votos
¿Cómo se puede montar una carpeta dentro de /sdcard con los permisos correctos?