English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Introducción
Durante el desarrollo, podríamos necesitar modificar el archivo hosts de Android. La ruta del archivo hosts de Android es/system/etc/hosts, antes de modificar este archivo, primero necesitas obtener los permisos de root en tu teléfono Android. Respecto a cómo rootear tu teléfono, aquí no se detallará, puedes buscarlo por tu cuenta en línea, hay muchos y también muy simples.
Este artículo explica cómo acceder al teléfono rootado a través del programa adb en la línea de comandos, arrastrar hosts al ordenador para modificarlo, y luego copiarlo de vuelta al teléfono para realizar la modificación de hosts.
A continuación, comenzamos con los pasos específicos:
C:\tools>adb pull /system/etc/hosts hosts.mod [100%] /system/etc/hosts
El comando anterior es para arrastrar el archivo hosts del teléfono al ordenador, [100%] indica que el archivo se ha transferido completamente, por lo que se puede modificar el archivo hosts. Después de modificarlo, utilice el siguiente comando para subirlo al teléfono:
C:\tools>adb push hosts.mod /system/etc/hosts adb: error: falló la copia de 'hosts.mod' a '/system/etc/hosts': Lectura-solo sistema de archivos
Desde los mensajes de eco, podemos ver que el sistema de archivos es de solo lectura, por lo que no se puede subir directamente.
¡Pruebe los siguientes comandos para ver si tienen éxito!
C:\tools>adb root # La documentación de ayuda dice que este comando permite que el proceso de servicio adbd obtenga permisos de root C:\tools>adb push hosts.mod /system/etc/hosts adb: error: falló la copia de 'hosts.mod' a '/system/etc/hosts': Lectura-solo sistema de archivos
Aún no funciona, parece que debemos volver a montar/solo el directorio system.
C:\tools>adb remount remount falló: Operación no permitida
¿Sin permisos? ¡Es el momento de invocar la ley mágica de shell!
C:\tools>adb shell * daemon no está ejecutándose. Iniciándolo ahora en el puerto 5037 * * daemon iniciado con éxito * shell@maguro:/ $ ls -al /system/etc/hosts -rw-r--r-- root root 25 2013-08-14 07:00 hosts
Desde la última línea de arriba podemos ver que el archivo hosts solo lo puede escribir el propietario, para los demás es de solo lectura. Para que otros también puedan realizar cambios, debe usar el siguiente comando para elevación de privilegios y luego cambiar los atributos del archivo hosts.
shell@maguro:/ $ su
Si es la primera vez que ejecuta este comando, el teléfono se iluminará y la aplicación SuperSU le solicitará si acepta la asignación de permisos. ¡Claro, debe aceptar! A continuación, verá que el símbolo de interrogación en el terminal cambia de $ a #, y el carácter antes de @ cambia de shell a root. Luego podemos modificar los atributos de permisos del archivo hosts.
root@maguro:/ # chmod +666 /system/etc/hosts Mala modalidad root@maguro:/ # chmod 666 /system/etc/hosts Incapaz de chmod /system/etc/hosts: Read-solo sistema de archivos
Otra vez Read-¡sistema de archivos solo de lectura! Introduce el siguiente comando para ver:/detalles del sistema de archivos del directorio system.
root@maguro:/ # mount | grep system /dev/block/platform/omap/omap_hsmmc.0/by-name/system /system ext4 ro,seclabel,relatime...
ver ext4¿ro en la parte posterior? Es la abreviatura de read only, lo que significa solo lectura. Esto indica/El directorio system es de solo lectura. A continuación, debemos cambiarlo para que sea de lectura y escritura.
root@maguro:/ # mount -o rw,remount /system
arriba-o se utiliza para especificar las opciones al cargar el sistema de archivos. Estas opciones incluyen:
Vuelva a verificar y puede ver que el lugar original de ro ya se ha cambiado a rw.
root@maguro:/ # mount | grep system /dev/block/platform/omap/omap_hsmmc.0/by-name/system /system ext4 rw,seclabel,relatime...
Sin embargo, aún no podemos copiar el archivo hosts al teléfono, porque las propiedades de permisos del archivo hosts no se han cambiado. Si se carga forzadamente, se obtendrá el siguiente mensaje de error:
C:\tools>adb push hosts.mod /system/etc/hosts adb: error: falló la copia de 'hosts.mod' a '/system/etc/hosts': Denegación de permiso
Ejecute los siguientes comandos:
root@maguro:/ # chmod 666 /system/etc/hosts
Luego verifique las propiedades del archivo hosts.
root@maguro:/ # ls -al /system/etc/hosts -rw-rw-rw- root root 25 2013-08-14 07:00 hosts
Se puede ver que todos pueden leer y escribir el archivo hosts.
Ya que todo está listo, intentemos subir el archivo hosts modificado nuevamente.
C:\tools>adb push hosts.mod /system/etc/hosts adb: error: falló la copia de 'hosts.mod' a '/system/etc/hosts': Lectura-solo sistema de archivos
¿Qué pasa, por qué aún falla la copia? ¿No se cambió el sistema de archivos a solo lectura y de escritura?
Y durante el proceso de búsqueda de la causa, también descubrí algo extraño. En el modo root/El directorio system es de solo lectura y de escritura, pero en el modo shell/El sistema system es de solo lectura.
root@maguro:/ # mount | grep system /dev/block/platform/omap/omap_hsmmc.0/by-name/system /system ext4 rw,seclabel,relatime... root@maguro:/ # exit shell@maguro:/ # mount | grep system /dev/block/platform/omap/omap_hsmmc.0/by-name/system /system ext4 ro,seclabel,relatime...
Además, en el Terminal Emulator del teléfono/Después de montar el directorio system en modo de solo lectura y de escritura, verifíquelo en el modo root del adb shell/El estado del sistema aún se muestra como de solo lectura.
Busqué y busqué en línea, casi desesperado, hasta que encontré el posible problema. Este es el hilo:montar en shell como usuario o root con diferentes salidasUna respuesta mencionó esta cosa llamada espacio de nombres de montaje. Entonces supe:
Un espacio de nombres de montaje es el conjunto de montajes de sistema de archivos visibles para un proceso.
El punto de montaje de cada proceso es invisible para otros procesos. El punto de montaje montado en el Terminal Emulator pertenece a ese proceso, mientras que los puntos de montaje en el modo shell y root del adb shell pertenecen a sus propios procesos. Esto es lo que se modificó anteriormente en el modo root/La razón por la que el directorio system sigue mostrándose como de solo lectura en el modo shell después de que se convierte en de lectura y escritura.
Ahora que sabemos la causa del problema, ¿cómo lo solucionamos?
En la configuración de la aplicación SuperSu hay una opción de separación de namespace mount, como se muestra en la siguiente imagen:
Deshaga la selección de la casilla y el punto de montaje mount se vuelve global, ya no es exclusivo del proceso que los monta. Sin embargo, recuerde que estos cambios solo son efectivos después de reiniciar el teléfono.
A continuación, se muestra el resultado de la subida después de cancelar la separación del namespace mount:
C:\tools>adb push hosts.mod /system/etc/hosts [100%] /system/etc/hosts
Se puede ver que [100%] de eco, lo que indica que el archivo se ha subido completamente.
Ver las propiedades del archivo hosts:
root@maguro:/ # ls -al /system/etc/hosts -rw-rw-rw- root root 137679 2017-02-16 00:20 hosts
el tamaño del archivo ha pasado de25ha cambiado a137679lo que indica que el archivo se ha reemplazado correctamente.
A continuación, se muestra cómo restaurar el teléfono a su estado anterior:
root@maguro:/ # chmod 644 /system/etc/hosts root@maguro:/ # ls -al /system/etc/hosts -rw-r--r-- root root 137679 2017-02-16 00:20 hosts root@maguro:/ # mount -o ro,remount /system
Hasta aquí, la tarea de modificar el archivo hosts se considera completada.
Resumen
Eso es todo el contenido de este artículo. Esperamos que el contenido de este artículo pueda proporcionar cierta ayuda a su aprendizaje o trabajo. Si tienen alguna pregunta, pueden dejar comentarios.
Declaración: el contenido de este artículo se obtiene de Internet, pertenece a los propietarios originales, y el contenido se contribuye y sube por los usuarios de Internet. Este sitio no posee los derechos de propiedad, no ha sido editado por humanos y no asume responsabilidad alguna por él. Si encuentra contenido sospechoso de infracción de derechos de autor, le invitamos a enviar un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, reemplace # con @) para denunciar y proporcionar evidencia relevante. Una vez confirmada, este sitio eliminará inmediatamente el contenido sospechoso de infracción.