solo - permisos de lectura y escritura android
Solo lectura del sistema de archivos en Android (19)
Copiar archivos a la tarjeta SD?
Bueno, supongo que te gusta copiar los datos a la tarjeta Sd desde la computadora del desarrollador. ¿Es posible que haya rooteado el dispositivo e implementado el área de su dirección disponible?) Tuve el mismo problema para cargar archivos de datos para mi aplicación (Android Studio 1.3.2 en Win7), pero.
- En primer lugar, el comando-shell adb debe encontrarse en la ruta: PATH =% PATH%; C: / Users / XXXXX / AppData / Local / Android / sdk / platform-tools (la carpeta AppData está oculta, por lo que debe establecer la configuración de la carpeta no oculta los archivos ocultos y la carpeta para encontrarla, Path funciona independientemente)
- Tienes que deletrear correctamente la ruta de la carpeta o si recibes un mensaje de error de solo lectura, lo más probable es que deba comenzar con / sdcard o sea un área de solo lectura. Tan pronto como no tuve problemas empujando el archivo al emulador.
Entonces, por ejemplo, el comando adb puede verse así:
adb push C: / testdata / t.txt /sdcard/download/t.txt
Recientemente rooteé mi Droid X y todo parece funcionar perfectamente. Hice algunos cambios en build.prop
y cuando hago adb push build.prop /system/
obtengo el siguiente error: failed to copy ''c:/build.prop'' to ''/system//build.prop'': Read-only file system
.
¿Cómo puedo arreglar esto?
A veces obtienes el error porque la ubicación de destino en el teléfono no existe. Por ejemplo, alguna ubicación de almacenamiento externo de un teléfono Android es /storage/emulated/legacy
lugar de /storage/emulated/0
.
Añadiendo un poco más a la respuesta de Jan Bergström: como Android es un sistema basado en Linux, y la ruta en Linux contiene barras diagonales (../), al usar el comando push, use "/" para definir la ruta de destino en el dispositivo Android.
Por ejemplo, el comando va: adb push C: / Users / admin / Desktop / 1.JPG sdcard / pictures /
Tenga en cuenta que aquí, las barras invertidas se usan para definir la ruta de origen del archivo que se va a enviar desde la PC de Windows y las barras diagonales se usan para definir la ruta de destino porque Android es un sistema basado en Linux. No es necesario que actúe como raíz para usar este comando y, además, funciona perfectamente bien en los dispositivos de producción.
Abra el emulador de terminal en el teléfono: luego
adb shell
después de que se inicie el daemon
su
mount -o rw,remount /mnt/sdcard
luego, la lectura solo se convierte en lectura-escritura.
Aunque sé que la pregunta es sobre el dispositivo real, en caso de que alguien llegue aquí con un problema similar en el emulador, con las herramientas más recientes desde febrero de 2017, el emulador debe iniciarse desde la línea de comando con:
-writable-system
Para cualquier cosa que se pueda escribir en el /system
. Sin esta bandera, ninguna combinación de remount
o mount
permitirá escribir en /system
.
Después de que el emulador se inicie con esa bandera, basta con un solo adb remount
adb root
después de la adb root
para obtener permisos para enviar a /system
.
Aquí hay un ejemplo de la línea de comando que uso para ejecutar mi emulador:
./emulator -writable-system -avd Nexus_5_API_25 -no-snapshot-load -qemu
El valor para las banderas -avd
proviene de:
./emulator -list-avds
Creo que la forma más segura es volver a montar el / system como de lectura-escritura, usando:
mount -o remount,rw /system
y cuando termine, vuelva a montarlo como de solo lectura:
mount -o remount,ro /system
En mi Samsung galaxy mini S5570 (después de obtener la raíz en el teléfono celular):
Puño, como root, ejecuté:
systemctl start adb
como un usuario normal:
adb shell
su
Otorgar permisos de raíz en la pantalla táctil
mount
enumere todos los puntos de montaje que tenemos y podemos ver, en mi caso, que / dev / stl12 fue montado en / system como ro (solo listo), así que solo necesitamos hacer:
mount -o rw,remount /dev/stl12 /system
Encontré este artículo de Google y pensé que agregaría los pasos necesarios en un Sony Xperia Z (4.2.2).
Sony tiene un proceso de vigilancia que detecta cuándo ha cambiado ro a rw on / y / system (estos son los únicos que estaba tratando de modificar) y posiblemente otros.
Lo siguiente fue lo que corrí para realizar los cambios que estaba tratando de lograr. Pegué estos en una ventana, porque la eliminación del bit de ejecución de / sbin / ric debe hacerse rápidamente para evitar que se reinicie. (Intenté stop ric
; esto no funciona, aunque funcionó en una versión anterior de android en el teléfono).
pkill -9 ric; mount -o rw,remount -t rootfs /
chmod 640 /sbin/ric
mount -o rw,remount /system
Modifiqué el archivo de hosts aquí, así que este es el lugar donde realizas los cambios que necesitas para el sistema de archivos. Para dejar las cosas como las encontramos, haz esto:
mount -o ro,remount /system
chmod 750 /sbin/ric
mount -o ro,remount -t rootfs /
En ese punto, ric debería reiniciarse automáticamente. (Se reinició automáticamente).
Esto es lo que funcionó para mí. Estaba ejecutando un dispositivo emulado Android 7.1.1 (Nougat).
En una terminal, presiono el siguiente comando. Una cosa que debe notarse es la bandera del sistema escribible
./emulator -writable-system -avd Nexus_6_API_25 -partition-size 280
En otra pestaña
./adb shell
su
mount -o rw,remount -t ext4 /dev/block/vda /system
Todos los cambios que haga en los contenidos de / system sobrevivirán a un reinicio.
Gracias, Sérgio , por el comando "mount" sin la idea de parámetros. Tendría que hacer una adb push
en /data/data/com.my.app/lib
para algún problema de prueba, y obtener el mensaje " /data/data/com.my.app/lib
de archivos de solo lectura".
El comando me muestra:
root@android:/ # ls -l /data/data/com.my.app/
drwxrwx--x u0_a98 u0_a98 2016-05-06 09:16 cache drwxrwx--x u0_a98 u0_a98 2016-05-06 09:04 files lrwxrwxrwx system system 2016-05-06 11:43 lib -> /mnt/asec/com.my.app-1/lib
Entonces, se entiende que el directorio "lib" está separado de otros directorios de aplicaciones.
El comando mount -o rw,remount /mnt/asec
no resolvió el problema "r / o fs", quiere el parámetro del dispositivo antes del parámetro del directorio.
El comando "df" tampoco ayudó, pero muestra que mi directorio /mnt/asec/com.my.app-1
está en el punto de montaje independiente.
Luego miro por el mount
y ¡voilá!
root@android:/ # mount ......... /dev/block/dm-4 /mnt/asec/com.my.app-1 ext4 ro,dirsync,relatime 0 0
Los siguientes pasos ya se describen al alza: vuelva a montar en RW, empuje y vuelva a montar en RO.
Lo saqué de un foro de Android donde hice la misma pregunta. Espero que esto ayude a alguien más.
En un emulador de terminal en el teléfono:
mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
Luego, en el indicador de cmd, haz el adb push
No todos los teléfonos y versiones de Android tienen cosas montadas de la misma.
Limitar las opciones al remontar sería lo mejor.
Simplemente vuelva a montar como rw (lectura / escritura):
# mount -o rw,remount /system
Una vez que haya terminado de hacer cambios, vuelva a montar en ro (solo lectura):
# mount -o ro,remount /system
Pruebe esto en un emulador de terminal como root:
restorecon -v -R /data/media
Pruebe lo siguiente en el símbolo del sistema:
>adb remount
>adb push framework-res_old.apk /system/framework-res.apk
Si se produce un error al copiar el archivo de solo lectura, puede intentar ubicar el archivo original en el directorio raíz y modificarlo con un editor de texto raíz (preferiblemente) editor de texto RB, que viene con la aplicación ROM Toolbox.
es necesario extraer y volver a empaquetar initrc.img y editar el archivo init
con el código de mount / system
This worked for me
#Mount as ReadOnly
su -c "mount -o rw,remount /system"
# Change Permission for file
su -c "chmod 777 /system/build.prop"
#Edit the file to add the property
su -c "busybox vi /system/build.prop"
# Add now
service.adb.tcp.port=5678
# Reset old permissions
su -c "chmod 644 /system/build.prop"
# Mount as readonly again once done
su -c "mount -o ro,remount /system"
adb remount
funciona para mí y parece ser la solución más simple.
mount -o rw,remount /dev/stl12 /system
funciona para mi