Wie führe ich ein Skript beim Booten in CM12.1 aus?

9

Die meisten Fragen, die ich dazu finden kann, stammen aus dem Jahr 2011 und ungefähr so. Vielleicht ist es nicht allzu überraschend, dass sich die Dinge seitdem geändert haben. Ich habe eine ganze Reihe von Dingen ausprobiert, ohne irgendwelche Ergebnisse.

Es gibt einige Skripte in /system/etc/init.d(die auch /etc/init.dauf meinem Gerät unter angezeigt werden). Insbesondere gibt es ein 00bannerSkript, das eine Willkommensnachricht protokollieren soll. Die Begrüßungsnachricht wird in logcat nie angezeigt.

Ich habe hier mein eigenes Skript platziert, das schließlich auf nichts anderes reduziert wurde:

#!/system/bin/sh
log -t mytest Testing

Nichts. Wird in logcat nur angezeigt, wenn es manuell über das Terminal ausgeführt wird. Dann funktioniert es.

Hier gibt es auch eine 90userinitDatei, die aufgerufen wird, /data/local/userinit.shfalls vorhanden. Ich habe es mit dem gleichen Inhalt wie oben erstellt. Auch hier wird in logcat nie etwas angezeigt. Was eigentlich nicht überraschend ist, denn wenn00banner es nicht läuft, dann auch nicht.

Ich habe nach etwas mit dem Namen "init.rc" gesucht, aber nichts dergleichen existiert irgendwo auf meinem Gerät.

Alle meine Skripte haben 755 Berechtigungen.

Was kann ich noch versuchen? (außer Apps, die Skripte für mich ausführen)

RomanSt
quelle
Welches Skript möchten Sie ausführen und warum?
unvergesslicheidSupportsMonica
Leider führte die geringe Menge an Graben, die ich durchgeführt habe, dazu, dass "bei benutzerdefinierten Roms nicht funktioniert". Anscheinend hat CM ihre eigene Art, Dinge zu tun. Ich bin mir nicht sicher, ob du dich damit anlegen willst. Aber anscheinend können Sie Ihre eigene boot.img-Datei erstellen und Ihre benutzerdefinierten Skripte hinzufügen. Vielleicht funktioniert das für dich.
jer3my
@ jer3my Ich bin vollkommen glücklich, dies als die eigentliche Antwort zu akzeptieren und das Kopfgeld zuzuweisen, wenn Sie Links haben, die ich überzeugend / maßgeblich finde.
RomanSt
Ich werde die Antwort in einer Sekunde posten und auch etwas anderes finden, das Ihnen helfen könnte.
jer3my
Die init.rc ist Teil der initramfs, die in der boot.img nicht enthalten sind. Sie können sie mit einem Tool wie unmkbootimg extrahieren, bearbeiten und dann mit mkbootimg neu erstellen. Die beiden Tools, die im cm-Projekt verfügbar sind, sagen mir, was Sie tun Ich werde sie für Sie zusammenstellen: D
Lord-Ralf-Adolf

Antworten:

5

Es gibt eine einfache Methode, um init.d-Unterstützung zu jedem gerooteten Android für Versionen 4.0 und höher hinzuzufügen. Google hat ein Skript erstellt, das beim Booten als Superuser ausgeführt wird. Das Skript install-recovery.shwird verwendet, um die Wiederherstellung des Bestands bei jedem Start neu zu starten, den sie für gut hielten Sicherheit, um benutzerdefinierte Wiederherstellungen zu verhindern, aber es wurde eine neue Lücke geöffnet, die von Benutzern ausgenutzt werden kann, um die Funktion init.d zu fälschen. Abhängigkeiten : Damit diese Methode funktioniert, benötigen Sie Folgendes

  1. Busy Box installiert mit dem run-partsSymlink zu Ihrem Pfad wie/system/xbin
  2. Offensichtlich benötigen Sie ein gerootetes Telefon, das /systemals montiert werden kannrw
  3. Kernel-Version spielt keine Rolle.

Methode I: (Der einfachste Weg!)

  1. Laden Sie diese APK herunter (kostenlos zu verwenden, nicht spiegeln, danke @Ryuinferno von XDA).
  2. Installiere die apk wie jede normale App.
  3. Starten Sie die App.
  4. Klicken Sie auf Aktivieren! Das ist alles, was Sie tun. setinit.d wird jetzt unterstützt. Sie können auf die Testschaltfläche klicken oder Ihr Telefon neu starten, um zu sehen, ob Ihre init.d-Skripte beendet werden
  5. Sie können die Anwendung deinstallieren, ohne dass dies Auswirkungen auf die Unterstützung von init.d hat

Methode II: (Schwierigkeitsgrad: mittel)

  1. Laden Sie diese Zip- Datei herunter, entpacken Sie sie und setzen Sie init.sh auf Ihre SD-Karte (in diesem Beispiel kann es sein, dass /sdcardsie von Gerät zu Gerät wechseln kann.

  2. Öffnen Sie jetzt ein Terminal oder verwenden Sie es adb shellvom Computer aus und führen Sie das Skript aus.
    su
    cp /sdcard/init.sh /data/tmp/init.sh
    chmod 777 /data/tmp/init.sh
    /data/tmp/init.sh

Das Skript wird ausgeführt und fordert Sie auf, zweimal neu zu starten. Sie haben offiziell die init.d-Unterstützung: D.

Referenz: [MOD] [APK + SCRIPT + ZIP] Aktivieren Sie Init.d für alle Telefone ohne benutzerdefinierte Kernel !!!

Lord-Ralf-Adolf
quelle
Da die Zip-Datei bei XDA gehostet wird, muss es ein Tutorial geben, dem Sie gefolgt sind oder das Sie irgendwie kennengelernt haben. Könnten Sie den Link dafür erwähnen? Ich muss etwas anderes darin suchen. :)
Feuerlord
1
@Firelord ja das Skript ist nicht meins, es wurde für andere Zwecke verwendet, ich habe es von hier aus der Einzelpostansicht> forum.xda-developers.com/… genommen , dem vollständigen Tutorial geht es um xposed und nexus 6 >> forum.xda -developers.com/nexus-6/general/…
Lord-Ralf-Adolf
@Firelord finden neuen Referenzlink in der Antwort enthalten :)
Lord-Ralf-Adolf
Danke, ich werde dir wahrscheinlich das Kopfgeld geben, es sei denn, es kommt etwas noch Einfacheres. Aber ich dachte ehrlich, das Hinzufügen eines Shell-Skripts zum Ausführen beim Booten wäre das einfachste, was man jemals auf so etwas wie CM machen könnte. Offensichtlich ist es nicht; Es ist komplizierter als das Codieren einer boot_completed-App, die das tut, was ich will, also mache ich das stattdessen einfach.
RomanSt
@romkyns altes cm unterstützt standardmäßig init.d, aber seit es ein Unternehmen wurde, haben sich ihre Methoden geändert, obwohl das init.d-Problem bei der neuen Lollipop-Version mit strengen Selinux-Richtlinien auftritt. / boot_completed ist auch eine Möglichkeit, dies zu tun sagte, es wird einfacher sein
Lord-Ralf-Adolf
2

Bearbeiten: Ich habe das Ende des Beitrags gesehen. Auf diese Weise werde ich versuchen, so schnell wie möglich ohne Apps hinzuzufügen (nicht zu Hause, Veröffentlichung mit dem Handy), aber Sie können dies verwenden, wenn etwas anderes nicht funktioniert.

Sie können versuchen, die App Tasker zu verwenden .

Es kostet 3,29 $ und erfordert Root-Zugriff, kann aber Shell-Skripte ausführen. Außerdem gibt es eine Testversion, die Sie vor dem Kauf ausprobieren können.

Erstellen Sie zuerst eine Aufgabe. Gehen Sie zur Registerkarte Aufgabe, tippen Sie auf + Zeichen und geben Sie den Namen der Aufgabe ein. Gehen Sie jetzt erneut + unterschreiben Sie und geben Sie den shellFilter ein. Sie finden die Option Run Shell, wählen sie aus und konfigurieren sie gemäß Ihren Anforderungen.

Gehen Sie danach zurück zur ersten Registerkarte - Profile, tippen Sie auf + Zeichen, um neue zu erstellen. Wählen Sie Ereignis als Typ, gehen Sie zu System und wählen Sie Gerätestart. Gehen Sie zurück und Sie werden aufgefordert, die Aufgabe auszuwählen. Wählen Sie nun die zuvor erstellte Aufgabe aus und Sie können loslegen!

AndroidNotSoPowerUser
quelle
1

Dazu müssen Sie eine Zip-Datei flashen, aber dann können Sie Ihre Skripte in / system / etc / startup ablegen und sie sollten dann automatisch mit dem Telefon gestartet werden.

http://forum.xda-developers.com/showthread.php?t=2664645

Auch aus meinem Kommentar unter der Frage. Ich habe versucht, in meiner Geschichte nachzuschauen, aber ich konnte den Link nicht finden, bei dem Leute behaupteten, CM habe ihre eigene Art, Skripte beim Booten auszuführen.

Bearbeiten. Nach einigem Graben ist es nicht CM, der seine eigene Sache für Skripte macht. Es ist der Kernel. Nicht alle Kernel unterstützen init.d für Android. Wenn Sie angeben, welches Gerät Sie verwenden. Ich kann mich nach einem Kernel umsehen, der beim Booten benutzerdefinierte Skripte unterstützt.

jer3my
quelle
0

Ich habe auch das gleiche Problem beim Ausführen der Skriptdatei im Terminal in CM12.1. Die Lösung besteht darin, das Skript in einen /dataOrdner zu kopieren und auszuführen. Daher denke ich, dass CM 12 nur ausführbare Skripts von einem bestimmten Speicherort aus zulässt.

Entaah Laah
quelle
0

Einfacher Weg (arbeiten):

  1. Bereiten Sie Ihre Post-Boot-Befehle in einem Skript vor, z. B. / system / xbin / post-boot (set exec perm)

  2. Fügen Sie den obigen benutzerdefinierten Skriptpfad am Ende von /system/etc/init.qcom.post_boot.sh hinzu

Z.B:

echo / system / xbin / post-boot >> /system/etc/init.qcom.post_boot.sh

Erledigt!

(Wenn Sie das qcom post_boot (Qualcomm-Geräte) nicht finden können, suchen Sie nach post_boot-Skripten.)

Seff
quelle
-1

Befolgen Sie die Schritte zum Ausführen von Skripten beim Booten. (Erforderliche adb)

  1. adb root
  2. adb remount
  3. adb pull /init.rc
  4. edit init.rc füge Zeile für das Ausführen eines Skripts wie sh test.sh hinzu
  5. adb push init.rc /
  6. ADB Shell
  7. chmod 755 init.rc
  8. ADB-Neustart

es funktioniert für mich. Ich hoffe das hilft dir.

DreamCoder
quelle
1
Diese Methode sollte überhaupt nicht funktionieren. Der Inhalt der anfänglichen rootfs wie init.rc ist Teil der Ramdisk, die bei jedem Start von Ihrem Geräte-Flash wiederhergestellt wird. Sie müssen die Ramdisk direkt in der richtigen Partition Ihres Geräte-Flash-Speichers ändern
geteilt durch Null
Dann können Sie in /system/etc/init.qcom.wifi.sh
DreamCoder
1
Diese Methode funktioniert nicht, init.d kann nicht gepusht werden! Es ist Teil der Initramfs, sie müssen auf der boot.img bearbeitet und dann erneut geflasht werden. Für init.qcom.wifi.sh ist es gerätespezifisch, dass Sie keine allgemeine Regel daraus erstellen können
lord-ralf-adolf