Come eseguire uno script all'avvio in CM12.1?


9

La maggior parte delle domande che posso trovare relative a questo sono datate 2011 e successive, quindi forse non è troppo sorprendente che le cose siano cambiate da allora. Ho provato un sacco di cose, senza risultati.

Ci sono alcuni script in /system/etc/init.d(che appare anche sotto /etc/init.dsul mio dispositivo). In particolare, esiste uno 00bannerscript che dovrebbe registrare un messaggio di benvenuto. Il messaggio di benvenuto non viene mai visualizzato in logcat.

Ho inserito qui la mia sceneggiatura, che alla fine è stata ridotta a nient'altro che a questo:

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

Niente. Non appare mai in logcat se non eseguito manualmente tramite terminale. Quindi funziona.

C'è anche un 90userinitfile qui, che invoca /data/local/userinit.shse esiste. L'ho creato con gli stessi contenuti di cui sopra. Ancora una volta, nulla appare mai in logcat. Il che non è sorprendente, davvero, dal momento che se 00bannernon funzionasse, non lo sarebbe neanche.

Ho cercato qualsiasi cosa di nome "init.rc" ma nulla di simile esiste ovunque sul mio dispositivo.

Tutti i miei script hanno 755 autorizzazioni.

Cos'altro posso provare? (diverso dalle app che eseguono script per me)


Quale lo script non si desidera eseguire, e perché?
indimenticabileidSupportaMonica il

Purtroppo la piccola quantità di scavo che ho fatto ha portato a "Non funzionerà su rom personalizzate". Apparentemente CM ha il suo modo di fare le cose. Non sono sicuro di voler rovinare tutto. Ma a quanto pare puoi creare il tuo file boot.img e aggiungere gli script personalizzati a quello. Forse funzionerà per te.
jer3my,

@ jer3my Sono perfettamente felice di accettarlo come risposta effettiva e assegnare la generosità se hai collegamenti che troverò convincenti / autorevoli.
Roman,

Invierò la risposta in un secondo, ho anche trovato qualcos'altro che potrebbe aiutarti.
jer3my,

init.rc fa parte di initramfs non è incluso in boot.img puoi usare uno strumento come unmkbootimg per estrarlo, modificarlo e ricostruirlo usando mkbootimg, i due strumenti sono disponibili nel progetto cm dimmi cosa stai sto usando li compilerò per voi: D
lord-ralf-adolf,

Risposte:


5

c'è un metodo semplice per aggiungere il supporto init.d a qualsiasi Android rootato per le versioni 4.0 e successive, google ha creato uno script che viene eseguito all'avvio come superutente lo script install-recovery.shè utilizzato per eseguire il reflash del recupero dello stock ad ogni avvio che pensavano fosse un buon sicurezza per impedire ripristini personalizzati, ma ha aperto una nuova falla che può essere sfruttata dagli utenti per falsare la funzione init.d. Dipendenze : per far funzionare questo metodo è necessario quanto segue

  1. Scatola occupata installata con il run-partslink simbolico al tuo percorso come/system/xbin
  2. Ovviamente avrai bisogno di un telefono con root con la /systempossibilità di montare comerw
  3. la versione del kernel non ha importanza.

Metodo I: (Il modo più semplice!)

  1. Scarica questo APK (gratuito da usare, non eseguire il mirroring, grazie a @Ryuinferno di XDA).
  2. Installa l'apk come qualsiasi normale app.
  3. Avvia l'app.
  4. clicca su Attiva! tutto qui è supportato setinit.d ora puoi fare clic sul pulsante test o riavviare il telefono per vedere se gli script init.d sono usciti
  5. è possibile disinstallare l'applicazione senza influire sul supporto init.d

Metodo II: (difficoltà: media)

  1. Scarica questo zip decomprimilo e metti init.sh sulla tua sdcard (in questo esempio sarà /sdcardche può cambiare da dispositivo ad altro.

  2. ora apri un terminale o usa adb shelldal computer ed esegui lo script.
    su
    cp /sdcard/init.sh /data/tmp/init.sh
    chmod 777 /data/tmp/init.sh
    /data/tmp/init.sh

lo script verrà eseguito e ti chiederà di riavviare due volte, ecco perché hai ufficialmente il supporto init.d: ​​D

Riferimento: [MOD] [APK + SCRIPT + ZIP] Abilita Init.d per qualsiasi telefono senza necessità di kernel personalizzati !!!


Poiché il file zip è ospitato su XDA, ci deve essere un tutorial che hai seguito o che hai conosciuto in qualche modo. Potresti menzionarne il link? Ho bisogno di cercare qualcos'altro in esso. :)
Firelord

1
@Firelord sì, lo script non è mio, è stato utilizzato per altri scopi, da qui ho preso la visualizzazione del singolo post> forum.xda-developers.com/… , il tutorial completo riguarda xposed e nexus 6 >> forum.xda -developers.com/nexus-6/general/…
lord-ralf-adolf

@Firelord trova un nuovo link di riferimento incluso nella risposta :)
lord-ralf-adolf

Grazie, probabilmente ti darò la generosità a meno che non accada qualcosa di ancora più semplice. Ma onestamente ho pensato che l'aggiunta di uno script di shell da eseguire all'avvio sarebbe come la cosa più semplice che si possa fare su qualcosa come CM. Chiaramente non lo è; è più complicato che codificare un'app boot_completed che fa quello che voglio, quindi lo farò invece.
Roman,

@romkyns old cm supporta init.d per impostazione predefinita, ma da quando è diventata un'azienda i loro modi sono cambiati, anche se il problema init.d è nella nuova versione di lollipop con una rigorosa politica selinux / boot_completed è un modo per farlo anche e come te ha detto che sarà più semplice
lord-ralf-adolf,

2

Modifica: ho visto end off post, in un modo, cercherò di aggiungere senza app APPENA POSSIBILE (non a casa, la pubblicazione tramite dispositivo mobile), ma puoi usarlo, se non funziona diversamente.

Si può provare a utilizzare app chiamato Tasker .

Costa 3,29 $ e richiede l'accesso come root ma può eseguire script Shell. Inoltre, ha la versione di prova in modo da poter provare prima di acquistare.

Per prima cosa crea un'attività. Vai alla scheda Attività, tocca + segno, inserisci il nome dell'attività. Ora vai di nuovo + segno e digita shellfiltro. Troverai un'opzione Run Shell, selezionala e configurala in base alle tue esigenze.

Dopodiché torna alla prima scheda - Profili, tocca + segno per crearne di nuovi. Seleziona Evento come tipo, vai su Sistema e seleziona Avvio dispositivo. Torna indietro e ti verrà chiesto di selezionare l'attività. Ora seleziona l'attività creata in precedenza e sei pronto per iniziare!


1

Ciò richiede di eseguire il flashing di una zip ma è possibile inserire gli script in / system / etc / startup e quindi dovrebbero avviarsi automaticamente con il telefono.

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

Anche dal mio commento sotto la domanda. Ho provato a cercare nella mia storia, ma non sono riuscito a trovare il collegamento in cui le persone sostenevano che CM avesse il proprio modo di eseguire script all'avvio.

Modificare. Dopo qualche altro scavo non è CM, per dire, che fa la sua cosa per gli script. È il kernel. Non tutti i kernel supportano init.d per Android. Se pubblichi quale dispositivo stai utilizzando. Posso cercare un kernel che supporti script personalizzati all'avvio per te.


0

Ho anche lo stesso problema nell'esecuzione del file di script nel terminale in CM12.1. La soluzione consiste nel copiare lo script nella /datacartella ed eseguirlo. Quindi penso che CM 12 consenta l'esecuzione di script solo da determinate posizioni.


0

Modo semplice (funzionante):

  1. Prepara i tuoi comandi post boot in uno script, ad esempio / system / xbin / post-boot (imposta exec perm)

  2. Aggiungi il percorso di script personalizzato sopra alla fine di /system/etc/init.qcom.post_boot.sh

Per esempio:

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

Fatto!

(Se non riesci a trovare qcom post_boot (dispositivi Qualcomm), cerca eventuali script post_boot)


-1

Seguire i passaggi per eseguire gli script all'avvio. (Adb richiesto)

  1. radice adb
  2. rimontaggio dell'adb
  3. adb pull /init.rc
  4. edit init.rc aggiungi riga per eseguire script come sh test.sh
  5. adb push init.rc /
  6. shell adb
  7. chmod 755 init.rc
  8. riavvio adb

funziona per me. Spero che questo ti sia d'aiuto.


1
questo metodo non dovrebbe funzionare affatto. Il contenuto dei rootfs iniziali come init.rc fa parte del ramdisk che viene ripristinato dal tuo dispositivo flash ad ogni avvio. Devi modificare il ramdisk direttamente nella partizione corretta della memoria flash del tuo dispositivo
diviso per zero il

Di quanto puoi aggiungere in /system/etc/init.qcom.wifi.sh
DreamCoder

1
questo metodo non funzionerà, init.d non può essere spinto! fa parte di initramfs, devono essere modificati su boot.img rispetto a quando sono nuovamente flashizzati, e per init.qcom.wifi.sh è specifico del dispositivo non è possibile stabilire una regola generale da esso
lord-ralf-adolf
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.