2 votos

Moviendo archivos con el emulador de terminal en un Android sin root

Estoy usando la aplicación de Emulador de Terminales en un teléfono Android 5.0.2 sin root.

Cuando mover archivos de una carpeta de la tarjeta SD externa a otra con:

mv /storage/extSdCard/DCIM/Camera/* /storage/extSdCard/phone/

Lo entiendo:

mv: rename /storage/extSdCard/DCIM/Camera/20170519_161315.jpg to 
     /storage/extSdCard/phone/20170519_161315.jpg: Permission denied

¿Hay alguna solución para esto (sin arrancar el teléfono)?


Nota: ls -la en /storage/extSdCard da:

drwxrwx--x root     sdcard_r          2016-08-10 02:18 Android
drwxrwx--- root     sdcard_r          2016-11-20 09:45 DCIM
...
drwxrwx--- root     sdcard_r          2017-05-19 15:46 phone

4voto

Jack Wade Puntos 231

El acceso de escritura a nivel de sistema de archivos a la tarjeta SD externa físicamente sin rootear el teléfono es no es posible desde los días previos al KK. Sin embargo, las aplicaciones siempre pueden (con o sin permiso del Almacenamiento) leer y escribir en su directorios privados en los almacenamientos compartidos. Así que puedes mover archivos a /storage/extSdCard/Android/data/ .


En Android 6+ la tarjeta SD externa es visible en /storage/[UUID] donde UUID es el del sistema de archivos. Esta ruta del sistema de archivos sólo está disponible para la lectura (para las aplicaciones con READ|WRITE_EXTERNAL_STORAGE permiso concedido) y de travesía (para todas las aplicaciones). El último caso es dejar que las aplicaciones lean/escriban en sus directorios privados. Al igual que el sistema de archivos interno emulado, el control de permisos se implementa a través del espacio de nombres de montaje y everybody (9997) GID. La tarjeta SD se monta con tres VER de diferentes permisos:

enter image description here

vold crea un espacio de nombres de montaje aislado para cada aplicación y dependiendo del estado del permiso de almacenamiento de la aplicación, bind-mounts a VER a /storage/[UUID] . Para más detalles, véase ¿Qué es /storage/emulated/0/? y ¿Qué es el UID "u#_everybody"?


Dado que ninguno de los tres VER tiene permiso de escritura Las aplicaciones no tienen acceso de escritura a nivel de sistema de archivos a los directorios públicos de las tarjetas SD externas. Sin embargo, las aplicaciones - como la mayoría de los exploradores de archivos - que hacen uso de Storage Access Framework ( SAF ) (o Acceso al directorio con alcance en Android 7+ o Acceso al almacenamiento externo con alcance en Android 10+) son capaces de crear y eliminar archivos en toda la tarjeta SD.


El USB OTG se trata de forma casi similar, pero con una característica destacada diferencia :

"MOUNT_FLAG_VISIBLE" significa que el volumen es visible para las aplicaciones de terceros para el acceso directo al sistema de archivos.
...
volúmenes transitorios como los dispositivos USB OTG no debe ser marcados como visibles; su contenido debe ser mostrado a las aplicaciones a través de la Estructura de Acceso al Almacenamiento".

Así que los USBs no están expuestos como VER , en lugar de aplicaciones ver /storage/[UUID] (que no es real) del sistema de archivos a través de SAF tanto para la lectura como para la escritura. Por eso el contenido de los medios extraíbles no está disponible a través de MediaStore también. Tampoco está disponible para las aplicaciones a través de APIs :

"Las rutas devueltas no incluyen los dispositivos transitorios, como las memorias USB conectadas a dispositivos portátiles".

Múltiples dispositivos de almacenamiento externo :

"Los dispositivos de almacenamiento externo que aparecen a través de estas API deben ser una parte semipermanente del dispositivo (como una ranura para tarjetas SD en el compartimento de la batería). Los desarrolladores esperan que los datos almacenados en estas ubicaciones estén disponibles durante largos periodos de tiempo. Por este motivo, los dispositivos de almacenamiento transitorios (como las unidades de almacenamiento masivo USB) no deben aparecer a través de estas API".

Sin embargo, El almacenamiento adoptable es siempre visible para las aplicaciones , ya sea tarjeta SD o USB.


RELACIONADO:

0voto

Ben Kraft Puntos 287

Parece que no puedes. Phone no está en la lista de carpetas a las que se puede acceder sin Root.

Por último, pero no menos importante, puedes intentar acceder a él con run-as comando, en nombre de alguna aplicación.

run-as com.some.package ls -l /data/data/com.user.app
run-as com.some.package rm /data/data/com.user.app/databases/db.db

La única trampa aquí es que ningún paquete es apropiado para esto. El paquete en cuyo nombre se puede ejecutar debe ser liberado con la bandera de depuración.

De lo contrario, sólo conseguirás

shell@android:/ $ run-as com.android.backupconfirm
run-as: Package 'com.android.UserDict' is not debuggable

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X