Shell-Scripting Android mediu
Android este bazat pe kernel-ul Linux, acesta include un set de standard, UNIX-comenzi și un simplu sh shell. Toate acestea înseamnă că nu putem folosi doar linia de comandă pentru a efectua operațiuni de nivel scăzut, dar, de asemenea, pentru a scrie script-uri shell, care va îndeplini funcțiile care nu sunt disponibile de la GUI. În acest articol vom vorbi despre asta cu ajutorul lor este posibil să se facă, și de ce toate acestea sunt necesare.
Pentru problemele din trecut ale revistei, am scris un articol despre Tasker - un sistem care vă permite să automatizeze activitatea de Android și să înlocuiască sute de aplicații terțe părți. Din păcate, Tasker Android limitat funcții la nivel înalt și nu permite operațiuni de nivel scăzut, cum ar fi montarea de sisteme de fișiere schimba parametrii de kernel, variabile de sistem sau de a lansa daemon. Dar toate acestea se poate face cu script-uri.
Imediat vă spun, că în acest articol ne vom concentra pe scripturi shell în înțelegerea tradițională a Linux, fără utilizarea de instrumente, cum ar fi SL4A, QPython sau Roboto. Scopul principal al acestor scripturi - modificarea parametrilor comportamentul sistemului kernel, lucrul cu daemons (ADB, de exemplu) și altele asemenea. Script-uri pot începe în etapa de pornirea sistemului de operare, noua instalare a firmware-ului, după tapas pe butonul sau prin tradiție - de la terminal.
In acest articol voi explica cum să scrie un astfel de scenariu, cum să-i facă pentru a porni automat lega la evenimente de sistem specifice. Ca un bonus, acesta va explica, de asemenea, modul de a face Consola de recuperare (recuperare) efectua acțiunile necesare pentru a vă înainte de instalarea sau imediat după instalarea noului firmware. Începem.
Caracteristici Android-mediu
Chiar baza sa, în cazul în care nu există Java și Dalvik, Android este un Linux-minimalistic de distribuție, cu toate atributele sale inerente: inițializarea sistemului kernel, un set de biblioteci, daemon, comenzi de consolă, și, desigur, Shelley. Ultimul - nu este altceva decât un mksh de MirBSD, sh redenumit; un simplu coajă cu suport pentru limba caracteristici shell clasic Bourne din UNIX și autocompletare, apăsând Tab.
Ca un set de bază UNIX-comenzi sunt folosite set de instrumente, un fel de alternativa dezbracata la BusyBox, care vă permite să apelați un număr de echipe diferite din aceeași binarele (folosind link-uri simbolice). Setul de instrumente include un set foarte limitat de comenzi, care nu este nu numai grep sau Fel, dar chiar și cp. Prin urmare, pentru a finaliza lucrările cu script-uri este recomandat pentru a instala BusyBox, beneficiul la magazin plin de instalatori gratuite.
Scopul principal al Scripting în Android - lucra cu kernel-ul și sistemul de utilitati. Nucleul standardului aici și exporturile toate interfețele aceeași / proc și / sys, prin care se poate orienta fierul și starea sistemului. În plus, există o serie de instrumente specifice pentru Android, care vor fi foarte utile în dezvoltarea scenariului:
- pm - managerul de pachete vă permite să instalați, să șteargă și să mutați software-ul;
- Sunt - manager de activitate (Activity), pot fi folosite pentru a rula aplicația;
- adb - benă pentru masele de console de diferite informații despre starea sistemului;
- ScreenCap - utilitar pentru capturi;
- screenrecord - instrument de înregistrare screencast;
- getprop / setprop - comenzi pentru a citi și a variabilelor de sistem de schimbare;
- pornire / oprire - pornire si oprire servicii de sistem;
- intrare - vă permite să trimiteți în fereastra curentă cheie coduri (emulare tastatura);
- Service - utilitar pentru gestionarea Java-servicii, are o mulțime de posibilități;
- SVC - vă permite să gestionați Wi-Fi și alimentat conectat prin USB.

Primul exemplu
Acum are nevoie pentru a rula. Cel mai simplu mod de a face acest lucru cu toate de aceeași ADB:
Desigur, această metodă nu este foarte convenabil. Deci, avem nevoie de o modalitate rapidă de a rula script-ul. Cea mai convenabilă a soluțiilor ma găsit - aceasta aplicatie QuickTerminal. Instalați, executați, mergeți la fila Comandă rapidă, faceți clic pe butonul „+“, pentru a conduce nume (arbitrar) și comanda (/sdcard/apk_backup.sh sh), în Tipul de ieșire sau selectați Ieșire Dialog, sau nimic. În primul caz, în timpul executării de script-ul de pe ecran va apărea cu rezultatul, în al doilea toate vor avea loc în fundal. Acest lucru este mai convenabil. Apoi, stoca și recupera cheia prin care un script poate fi rulat rapid și ușor.
Acum să scrie un script care va restabili copie de rezervă nostru:
În ea, am folosit PM comandă cu opțiunea de a instala și steaguri -r -t și, ceea ce face ca sistemul pentru a instala aplicația, chiar dacă acestea sunt semnate sau cheie de testare deja instalat. Puteți utiliza, de asemenea, -s pavilion, care forțează aplicația să fie instalat pe cartela de memorie (dacă există o astfel de posibilitate), sau -F - setarea în memoria internă.

Cu Ruth, puteți face chiar și o copie de siguranță a setărilor pentru toate aplicațiile care folosesc / date / date / backup si arhiva director, dar a restabili ar fi foarte problematică, la fel ca în Android, fiecare aplicație executat în numele special creat pentru el setările Linux-utilizator și stochează în directorul deținute de acel utilizator. Problema aici este că identificatorul Linux-utilizator pentru fiecare aplicație este generat în mod dinamic, astfel încât după restaurarea unei copii de rezervă în identificatorii de sistem nou instalate nu se potrivesc, iar aplicația nu poate citi setările. Trebuie să dau manual pe ID-ul de utilizator pentru fiecare aplicație și să schimbe permisiunile pe directorul de date.
Pe de altă parte, putem folosi built-in Manager de backup Android, care permite aplicații de la terțe părți utilizarea capacitățile sistemului pentru aplicații de backup și recuperare și datele lor. Puteți să-l gestionați din consola (și, prin urmare, cu script-uri), dar în sine nu produce nici o rezervă, și atribuie lucrarea la aplicații de la terți. Heliu - una dintre aceste cereri. Dacă instalați și setați-l în sus, de backup și restaurare pot fi scriptate. De exemplu, următorul script simplu pentru a face o copie de rezervă a tuturor aplicațiilor de la terțe părți:
Este nevoie de un design $ pentru a reduce cuvântul «pachete:», care se adaugă pm la începutul fiecărui pachet. Pentru a restaura o copie de rezervă, puteți utiliza fie aceeași heliu, o echipa bmgr:
Autoplay
„E cool, dar script-uri ar trebui să se ruleze,“ - spui si vei fi absolut corect. Fără scripturile de pornire de mic ajutor, dar este ușor de a stabili, dacă folosim toate același Tasker. El știe cum să executați orice comandă shell ca răspuns la orice eveniment. Pentru a utiliza această opțiune, pur și simplu a crea un profil nou, selectați evenimentul (pentru cel mai bun eveniment de rezervă va fi un timp), apoi adăugați efecte, selectați Script -> Run Shell, încercarea de a conduce comanda (sh /sdcard/script.sh), pentru a alege, dacă este necesar, fișierul pentru a înregistra rezultate și includ profilul.
Un alt mod popular la pornire - este utilizarea de executarea automată a script-uri pentru încărcarea firmware-ului terță parte. Astăzi, aproape toate mai mult sau mai puțin bine-cunoscut firmware personalizat posibilitatea de a porni script-uri de la /system/etc/init.d/ director, și de scurgere această funcționalitate pot fi accesate folosind aplicații universale init.d de pe piață. Cu acesta din urmă, cu toate acestea, trebuie să fie atent, deoarece rulează script-urile nu se încarcă într-un stadiu incipient, așa cum se întâmplă în tot asa CyanogenMod, și numai după o pornire completă a sistemului.
Așa că putem pune într-un startup? De exemplu, ADB daemon începe script-ul în modul de rețea:
Pentru a conecta cu PC-ul tastat următoarea comandă:
Putem aplica, de asemenea, unele optimizarea subsistemului de memorie virtuală:
Sau regla mecanismul lowmemorykiller (ucidere automată a aplicațiilor care rulează în fundal de memorie) la nevoile noastre:
Și, desigur, procesul de selecție automată planificator:
Toate acestea se poate face cu ajutorul unui software specializat, dar de ce pornirea software suplimentar, care, de asemenea va atârna în fundal, atunci când poți să faci câteva scripturi simple?

Rularea script-uri înainte și după EEPROM
Aproape toți cei care instalează pe gadget terță parte firmware-ul, de asemenea, pune deasupra un pachet cu aplicații de marcă Google (gapps), care include Market, YouTube, Gmail și alte software-uri. De fiecare dată când există o secțiune de firmware de actualizare / sistem, care conține acesta și gapps, șterse complet, dar aplicațiile Google sunt întotdeauna la fața locului. Acest lucru se datorează faptului că, printre altele, gapps conține în componența sa un script special, care se află în directorul /system/addon.d/ și executați Consola de recuperare înainte și după instalarea firmware-ului. Acest script face backup și restaurare a aplicațiilor Google.
Putem folosi această ocazie pentru a efectua propriile noastre acțiuni înainte și după instalarea firmware-ului. Aici, de exemplu, se pare ca script-ul meu de recuperare, care nu de rezervă, dar curăță resturile de firmware-ul imediat după ce este instalat:
Script-ul elimină tonuri de apel, notificări, motor de sinteză de vorbire și aplicații multiple. Toate aceste acțiuni sunt declanșate ca răspuns la transferul de script-ul de restaurare opțiuni de linie de comandă (acest lucru face Consola de recuperare după instalarea firmware-ului), dar sunt de asemenea furnizate, și opțiunile de tratament sunt opțiuni, cum ar fi de backup, de pre-backup, post de backup, pre-restaura și post-restore . Aici este doar un ciot, dar dacă vrem să salvați unele fișiere și aplicații înainte de instalarea firmware-ului, am putea să le adăugați la blocul de rezervă, așa cum se face în /system/addon.d/70-gapps.sh script-ul:
Această bucată de script ilustrează perfect modul de a face o copie de rezervă a fișierelor. Elementele cheie aici: funcția listfiles, care afișează fișierele de pornire listate, și funcția de fișier copie de rezervă, care face parte din Consola de recuperare (definită în fișierul /tmp/backuptool.functions). Se face o copie de rezervă a fișierelor într-o buclă.
/system/addon.d/ Conținut în CyanogenMod 11 pe Motorola Defy

Versiunea Android 2.3 și mai jos mksh folosit în loc de cenușă coajă minimalistă, care face parte din baza de BSD-sistemelor.
Pentru a obține aceleași scripturi pe toate dispozitivele, puteți utiliza aplicația sau DropSync FolderSync (sincronizarea automată prin intermediul Dropbox).
Utilizarea script-uri în Android, puteți face mult mai mult decât backup-uri și configurați sistemul. De exemplu, un script care se trezește la fiecare zece minute, iar dacă nivelul bateriei a devenit mai puțin de 30%, dezactivați Wi-Fi și Bluetooth:
Script-ul pentru a lucra în fundal, o simplu, după cum urmează:
Și acest lucru este un script care vă permite să completați rapid în forme care necesită e-mail de intrare și parola (în aplicații și site-uri web):
Acesta poate fi rulat în diferite moduri. Fie înainte de lansarea aplicației, setați întârziere:
Nu este atât de fierbinte ca este convenabil, dar funcționează. Cum putem folosi această opțiune? De exemplu, pentru a face un simplu script clip.sh:
Sau pur și simplu deschide fereastra dialer cu numărul dorit:
În jurul același mod, puteți trimite SMS-uri:
Alte comenzi utile atunci când scripting:
în loc de concluzii
Pentru cineva tot în acest articol poate părea un pic exagerată. Spune, toate acestea se poate face cu ajutorul software-ului standard si Tasker. Dar de ce folosesc un grele Java software-ul în cazul în care acțiunea dorită poate fi realizată folosind un script simplu care nu ia prea multă memorie, și poate fi ușor transferat la un alt dispozitiv? Script-uri sunt convenabile, ușor, rapid locul de muncă afară și a da posibilitatea de a regla fin pentru ei înșiși.
Arată acest articol unui prieten: