Ich habe frühere Fragen zu diesem Thema recherchiert, aber leider hat nichts funktioniert.
Ich versuche, die Statusleiste von Benutzern zu deaktivieren, die beim Booten mit diesem Befehl vom oberen Rand des Geräts zur adb-Konsole gleiten (die beim Neustart des Telefons wieder aktiviert wird, Änderungen werden nach dem Neustart verworfen):
service call activity 42 s16 com.android.systemui
so dass sie beim Hochfahren meiner Anwendung nicht von oben gleiten können, um die Statusleiste anzuzeigen. Ich habe diese Zeile in ein Skript namens init_remove.sh mit folgenden Zeilen eingefügt:
#!/system/bin/sh
service call activity 42 s16 com.android.systemui
Wenn der Benutzer sein Telefon neu startet, möchte ich, dass die Datei init.rc einen Dienst startet, um dieses Skript jedes Mal auszuführen. Ich habe diese Codezeilen am Ende der Datei init.rc hinzugefügt :
# service to remove status bar
service init_remove /system/etc/init_remove.sh
user root
oneshot
Ich habe dann die Datei uramdisk.img neu kompiliert und auf mein gerootetes Gerät geschoben. Die neue init.rc ist mit den hinzugefügten Änderungen zu sehen, aber ich kann immer noch von oben wischen, um die Statusleiste anzuzeigen.
Was mache ich falsch
BEARBEITEN: Ich habe dies jetzt sogar in der Datei init.rc versucht, um meinen Dienst aus dem folgenden Vorschlag zu starten:
on property:init.svc.zygote=running
start init_remove
on property:init.svc.servicemanager=running
start init_remove
.
.
.
aber immer noch keine Änderung ... sind meine Property-Trigger falsch?
Jetzt weiß ich also, dass mein Dienst bemerkt wird, wenn init ausgeführt wird, aber aufgrund von Berechtigungsproblemen, die unten zu sehen sind, nicht ausgeführt werden kann:
init: cannot execve('/system/bin/myscript'): Permission denied
wie aus der Ausgabe auf der Konsole ersichtlich. Mein aktualisierter neuer Dienst in der init.rc:
on boot
start myscript
service myscript /system/bin/myscript
user system
disabled
oneshot
Ich führe den Dienst als System aus, da er angeblich rw hat und Berechtigungen ausführt: aber er kann immer noch nicht ausführen. Was meiner Meinung nach das Problem sein könnte, ist, dass der Einhängepunkt für das Dateisystem als schreibgeschützt aufgeführt ist, was vom Befehl mount angezeigt wird:
/ $ 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
Aber ich kann nicht herausfinden, wo ich in der Datei init.rc die Partition dieses /system-Dateisystems auf rw setzen (und ausführen) kann, wenn es gemountet wird.
Sie müssen nicht einmal in Ihren Computer ziehen Sie müssen nur verwenden chmod 755 myscript
Und voila, das ist alles
Das ist nur die Dienstdeklaration, es muss eine Möglichkeit geben, den Dienst zu starten, damit er funktioniert. Du musst anrufen
start init_remove
in Ihrem gewünschten Trigger-Ereignis für den zu startenden Dienst stehen je nach Boot-Position unterschiedliche Trigger zur Verfügung, für Ihren Fall starten Sie Ihren "init_remove"-Dienst, nachdem Systemdienste und Zygote gestartet wurden.
Alternativ können Sie auch einige Dienstklassen verwenden, die sich in Ihrem Init-Skript befinden, und Ihr Skript wird automatisch zusammen mit den Diensten in Ihrer angegebenen Klasse ausgeführt, ohne dass ein expliziter Start erforderlich ist.
Lesen Sie hier die Readme-Datei zur Init-Syntax
Wie immer war die Antwort einfacher (obwohl es Stunden der Recherche erforderte), als ich dachte.
Die Antwort war, dass init die Datei nicht als ausführbar betrachtete. execve
Ich fand heraus, dass der Systemaufruf Fehler von zurückgibt Permission denied
, weil er nicht feststellen kann, dass es sich um den richtigen Dateityp handelt, der ausgeführt werden soll, inmitten anderer Fehler, die ihn verursachen könnten. Da @Agu.Thade erwähnte, ob ich Berechtigungen hätte, habe ich mehr darüber recherchiert. Nachdem ich ungefähr 16 Stunden lang versucht hatte, ro-Dateisystem-Mist zu umgehen, von dem ich dachte, dass er das Problem verursacht, stellte ich fest, dass alle ausführbaren Dateien im Ordner /system/bin grün waren und mein Skript weiß war (normale Datei). Also habe ich mit dem chmod-Rat von @Agu.Thade versucht, chmod +x
von adb zu kommen, was Bad mode
.
Drei Stunden später überlegte ich endlich , ob ich das Skript vielleicht auf meinen Computer holen sollte, chmod +x myscript
und adb push myscript /system/bin/
. Ich tat dies, lief ls
und SURE GENUG, die Datei wurde grün (als ausführbar erkannt). Habe einen Neustart durchgeführt und natürlich lief mein Skript.
Erich Reyna
Erich Reyna
AguThadeus
Erich Reyna
init: cannot execve('/system/etc/init_remove.sh'): Permission denied
weil das gesamte Dateisystem nur gelesen wird. Ich müsste manuell remountenErich Reyna
AguThadeus
Erich Reyna
Bad Mode
. Ich denke, ich muss es an einem anderen Ort platzieren?AguThadeus
Erich Reyna
sh myscript
aber nicht, wenn ich es tue./myscript
Erich Reyna