Investigué preguntas anteriores con este tema, pero desafortunadamente nada ha funcionado.
Estoy tratando de deshabilitar la barra de estado de los usuarios que se deslizan desde la parte superior del dispositivo al iniciar con este comando en la consola adb (que se volverá a habilitar si reinicia el teléfono, los cambios se descartan después del reinicio):
service call activity 42 s16 com.android.systemui
para que cuando se inicie mi aplicación, no puedan deslizarse desde la parte superior para ver la barra de estado. Puse esa línea en un script llamado init_remove.sh con líneas a continuación:
#!/system/bin/sh
service call activity 42 s16 com.android.systemui
cada vez que el usuario reinicia su teléfono, quiero que el archivo init.rc inicie un servicio para ejecutar ese script cada vez. Agregué estas líneas de código al final del archivo init.rc :
# service to remove status bar
service init_remove /system/etc/init_remove.sh
user root
oneshot
Luego volví a compilar el archivo uramdisk.img y lo empujé a mi dispositivo rooteado. El nuevo init.rc se puede ver con los cambios agregados, pero aún puedo deslizar el dedo desde la parte superior para ver la barra de estado.
Qué estoy haciendo mal
EDITAR: ahora incluso probé esto en el archivo init.rc para iniciar mi servicio a partir de la sugerencia a continuación:
on property:init.svc.zygote=running
start init_remove
on property:init.svc.servicemanager=running
start init_remove
.
.
.
pero aún no hay cambios ... ¿son incorrectos los activadores de mi propiedad?
Así que ahora sé que mi servicio se está notando cuando se está ejecutando init, pero no se puede ejecutar debido a los problemas de permisos que se ven a continuación:
init: cannot execve('/system/bin/myscript'): Permission denied
como se ve en la salida de la consola. Mi nuevo servicio actualizado en el init.rc:
on boot
start myscript
service myscript /system/bin/myscript
user system
disabled
oneshot
Ejecuto el servicio como sistema ya que supuestamente tiene rw y ejecuto permisos: pero aún no puede ejecutar. Lo que creo que podría ser el problema es que el punto de montaje para el sistema de archivos aparece como de solo lectura, visto por el comando de montaje:
/ $ mount
rootfs / rootfs rw,relatime 0 0
tmpfs /dev tmpfs rw,seclabel,nosuid,relatime,mode=755 0 0
devpts /dev/pts devpts rw,seclabel,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,seclabel,relatime 0 0
selinuxfs /sys/fs/selinux selinuxfs rw,relatime 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
none /sys/fs/cgroup tmpfs rw,seclabel,relatime,mode=750,gid=1000 0 0
tmpfs /mnt/secure tmpfs rw,seclabel,relatime,mode=700 0 0
tmpfs /mnt/asec tmpfs rw,seclabel,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,seclabel,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/shm tmpfs rw,seclabel,relatime,size=1024k,mode=775,uid=1013,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
pstore /sys/fs/pstore pstore rw,relatime 0 0
/dev/block/mmcblk3p1 /boot vfat rw,noatime,nodiratime,fmask=0000,dmask=0000,allow_utime=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 0
/dev/block/mmcblk3p2 /recovery vfat rw,noatime,nodiratime,fmask=0000,dmask=0000,allow_utime=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 0
/dev/block/mmcblk3p5 /system ext4 ro,seclabel,relatime,data=ordered 0 0
/dev/block/mmcblk3p4 /data ext4 rw,seclabel,nosuid,nodev,noatime,nodiratime,noauto_da_alloc,errors=panic,data=ordered 0 0
/dev/block/mmcblk3p6 /cache ext4 rw,seclabel,nosuid,nodev,relatime,data=ordered 0 0
/dev/block/mmcblk3p7 /device ext4 ro,seclabel,nosuid,nodev,relatime,data=ordered 0 0
adb /dev/usb-ffs/adb functionfs rw,relatime 0 0
none /sys/kernel/debug debugfs rw,relatime 0 0
/dev/fuse /mnt/shell/emulated fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
/dev/block/vold/179:1 /mnt/media_rw/extsd vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1023,gid=1023,fmask=0007,dmask=0007,allow_utime=0020,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/fuse /storage/extsd fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
Pero no puedo averiguar en qué parte del archivo init.rc puedo establecer la partición que /sistema de archivos del sistema en rw (y ejecutar) cuando se monta.
Ni siquiera necesita ingresar a su computadora Solo necesita usar chmod 755 myscript
Y listo, eso es todo
Esa es solo la declaración del servicio, debe haber algún medio para iniciar el servicio para que funcione. tienes que llamar
start init_remove
en el evento de activación deseado para que se inicie el servicio, hay diferentes activadores disponibles según la posición de inicio, para su caso, inicie su servicio "init_remove" después de que se hayan iniciado los servicios del sistema y zygote.
Alternativamente, también puede usar algunas clases de servicio que están en su secuencia de comandos de inicio y su secuencia de comandos se ejecutará automáticamente junto con los servicios en su clase especificada sin necesidad de un inicio explícito.
Compruebe el archivo Léame de sintaxis de inicio aquí
Como siempre, la respuesta fue más simple (aunque tomó horas de investigación) de lo que pensaba.
La respuesta fue que init no estaba viendo el archivo como ejecutable. execve
Descubrí que la llamada al sistema devuelve errores Permission denied
porque no puede determinar si es el tipo de archivo correcto para ejecutar, entre otros errores que podrían causarlo. Desde que @Agu.Thade mencionó si tenía permisos, investigué más al respecto. Después de aproximadamente 16 horas de tratar de solucionar la basura del sistema de archivos ro que pensé que estaba causando el problema, me di cuenta de que todos los ejecutables en la carpeta /system/bin eran verdes y mi script era blanco (archivo normal). Entonces, usando el consejo de chmod de @Agu.Thade, traté de chmod +x
adb que devolvió Bad mode
.
Tres horas más tarde, finalmente pensé que tal vez debería pasar el guión a mi computadora chmod +x myscript
y adb push myscript /system/bin/
. Así lo hice, ejecuté ls
, y SUFICIENTEMENTE, el archivo se volvió verde (reconocido como ejecutable). Reinicié y, por supuesto, mi script se ejecutó.
eric reyna
eric reyna
Agu Thadeus
eric reyna
init: cannot execve('/system/etc/init_remove.sh'): Permission denied
porque todo el sistema de archivos es de solo lectura. Tendría que hacer un remontaje manualmente.eric reyna
Agu Thadeus
eric reyna
Bad Mode
. ¿Creo que necesito ponerlo en una ubicación diferente?Agu Thadeus
eric reyna
sh myscript
pero no cuando lo hago./myscript
eric reyna