Cum să compilați firmware-ul pe un smartphone Android. Cum să-ți faci propriul firmware pe Android: instrucțiuni detaliate

Unul dintre cele mai populare, dacă nu cel mai popular sistem de operare pentru dispozitive mobile, fie că este vorba de smartphone-uri, tablete sau alte dispozitive, este fără îndoială Android. Gadget-uri mobile lucrând pe baza acesteia software există o mulțime și chiar mai multe versiuni de firmware, atât oficiale de la producător, cât și neoficiale, colectate de iubitorii sau fanii unui anumit dispozitiv. Dar se întâmplă, se întâmplă ca acest sau altul firmware să nu ți se potrivească. Motivele pot fi foarte diferite, de la performanță la interfață și multe alte mici nuanțe. Ce să faci în acest caz? Creați singur firmware!

Puteți remodela firmware-ul propriului dispozitiv după cum doriți, puteți modifica multe elemente, animații, pictograme, setări de viteză și de economisire a energiei și așa mai departe. Spațiul de imaginație este incontestabil mare și este imposibil de prezis ceea ce va părea o alegere ideală pentru o anumită persoană. La urma urmei, toată lumea vrea să personalizeze totul pentru ei înșiși.

Creați firmware Android

Vom analiza o modalitate de a vă crea propriul firmware, care este grozav pentru utilizatorii nu cei mai experimentați, dar care sunt entuziasmați de program complet. Nu este întotdeauna necesar să intri în programarea la nivel scăzut pentru a realiza modificările dorite, de foarte multe ori funcțiile dorite sau aspect poate fi schimbat mult mai usor. Este suficient să vizitați site-ul specializat Android Kitchen. În această „bucătărie” va avea loc procesul de „gătire”. versiune noua software. Singura avertizare este baza firmware nou va trebui să luați o versiune deja existentă creată de altcineva, dar condimentați-o cu tot felul de îmbunătățiri, modificări și alte „condimente” nu va fi dificil.

După ce vizitați Android Kitchen, puteți alege ce trebuie să schimbați - indicatorul bateriei, pictogramele sistemului, bara de stare, diverse animații, caseta de dialog pentru modificarea volumului, separatoare și bara de progres, ecran de blocare, fonturi. Alegând anumite funcții în „bucătărie”, puteți imediat, în timp real, previzualizare modificări aduse pentru evaluarea acestora. După ce au fost făcute toate modificările necesare, accesați fila Încărcare fișier. Există câteva setări disponibile aici, dar valorile implicite sunt optime - nu le modifica decât dacă ești sigur ce faci. În secțiunea „Selectează-ți ROM-ul din lista de bucătărie sau încarcă-ți propriile fișiere”, selectează opțiunea „Lista de bucătărie”. Din lista derulantă, selectați firmware-ul utilizat. Fiți atenți - dacă specificați versiunea greșită a software-ului, există o probabilitate mare de eroare, după care, în cel mai bun caz, patch-ul nu va fi aplicat deloc și, în cel mai rău caz, sistemul se va opri încărcarea și veți avea pentru a refa complet dispozitivul.

Orice utilizator de Android are propria idee despre cum ar trebui să arate sistemul de operare, ce funcții ar trebui să îndeplinească și ce set de software ar trebui să fie instalat în el în mod implicit. Cu toate acestea, nu toată lumea știe că crearea propriului firmware nu este atât de dificilă. Pentru a face acest lucru, nu este deloc necesar să înțelegeți nucleul Linux, să puteți compila surse Android sau să înțelegeți cum funcționează un smartphone.

Introducere

Există trei moduri de a vă crea propriul firmware pentru comunicatorul Android: 1. Finisare și compilare sistem de operare din surse publicate de Google sau de echipa CyanogenMod. 2. Modificare firmware de stoc comunicator. 3. Modificarea firmware-ului terț creat folosind prima sau a doua metodă.

Prima metodă este cea mai corectă și mai flexibilă, dar necesită adesea o cunoaștere destul de profundă a caracteristicilor Android și posibilitatea de a edita codul sursă al sistemului, astfel încât acestea să funcționeze apoi pe dispozitiv. Acest subiect depășește sfera articolului nostru, așa că nu vom lua în considerare construirea surselor Android, ci ne vom concentra pe alte două metode, mai precis pe a treia.

Firmware-ul de la terți (așa-numitele mod-uri) există pentru aproape orice dispozitiv Android, a trecut cel puțin o săptămână de la lansarea sa pe piață. De obicei, acestea includ deja toate modificările necesare pentru funcționarea corectă a firmware-ului pe comunicator și, prin urmare, sunt o platformă excelentă pentru experimentarea sistemului. Acestea pot fi modificate aproape dincolo de recunoaștere, pot include orice software în sistemul de operare, pot modifica aspectul acestuia, pot crea multe setări de nivel scăzut folosind un editor de text simplu și manager de fișiere. Aceste acțiuni nu necesită cunoaștere profundă a sistemului de operare și pot fi efectuate de orice cititor al revistei.

Alegerea unui experiment

Deci, să presupunem că comunicatorul nostru este deja înrădăcinat și consola de recuperare ClockworkMod este scrisă în zona de pornire, ceea ce vă permite să instalați orice firmware pe dispozitiv fără nicio restricție (am scris despre cum să faceți acest lucru în articolul „Prezentare totală”, publicat în numărul din octombrie ][ ). Acum vrem să instalăm un alt firmware pe dispozitiv, dar nu oricum, ci cu propriile noastre modificări, setări și un set de software. Prin urmare, avem nevoie de un cadru, și anume firmware-ul altcuiva care să funcționeze stabil pe dispozitivul nostru. De unde o pot lua?

Habitatul principal al tuturor romodelelor este, desigur, forumurile xda-developers.com. Acolo puteți găsi orice pentru comunicatorii care lucrează Control iOS, Windows Mobile, Windows Phoneși Android. Deschideți site-ul într-un browser, faceți clic pe secțiunea Forumuri și căutați-vă comunicatorul în listele de forumuri. Apoi, mergeți la corespunzătoare secțiunea Android Dezvoltați și examinați cu atenție lista de subiecte care conțin cuvântul „” în titlu. Este mai bine să găsești niște firmware curat cu un nume precum „Pure Android 2.3 Rom” sau un port CyanogenMod, deși, de fapt, orice altul va face (deși poate fi necesar să anulezi modificările autorului). Deschidem subiectul, derulăm prin prima postare, găsim linkul de descărcare undeva la sfârșit și descărcam ROM-ul pe computer.

Acum trebuie să deschideți fișierul firmware. Acest lucru se face folosind cel mai comun dezarhivare:

$ mkdir ~/rom; cd ~/rom $ unzip ../path/to/firmware.zip

Structura generală a directoarelor și fișierele importante

Setul de fișiere și directoare rezultate în urma execuției comenzii anterioare este, în esență, sistemul de operare Android, și exact în forma în care va fi plasat în memoria NAND a dispozitivului. Depinzând de versiuni Androidși imaginația autorului, poate conține diferite seturi de directoare și fișiere, dar conține întotdeauna trei obiecte obligatorii: META-INF, fișierul boot.img și directorul de sistem.

Primul director conține metainformații despre firmware, inclusiv fișierele certificate ale autorului, un manifest cu o listă de fișiere și sumele de verificare ale acestora, precum și un script de actualizare care poate crea fișiere noi în memoria NAND, poate modifica drepturile de acces și poate afișa un bara de progres pe care o văd utilizatorii în timpul instalării firmware-ului.

Fișierul boot.img conține imaginea de boot, care include nucleul Linux și imaginea initrd. Poate fi despachetat, dar pentru noi nu este de mare folos, deoarece aproape orice setări de sistem pot fi modificate folosind fișierele de setări și Sistemul de fișiere/proc. Dacă aveți nevoie de un nucleu construit cu parametri speciali, de exemplu, cu un programator BFS activat sau suport NFS, atunci aproape sigur îl puteți găsi pe aceiași dezvoltatori xda și îl puteți flash folosind ClockworkMod.



În cele din urmă, directorul de sistem este despre ce era vorba. Conținutul acestui director este cel de operare sistem Android fără nucleu Linux. Conține tot ceea ce este necesar pentru funcționarea sistemului de operare și, prin urmare, este pur și simplu necesar să-i cunoști structura. Arata cam asa:

  • aplicația - aplicații preinstalate: telefon, calculator, calendar etc.
  • cos- similar cu directoarele /bin și /usr/bin din Linux. Conține diverse componente de sistem utilizate de componentele de sistem de nivel superior. De exemplu, aici este locul mașină virtuală dalvikvm.
  • etc- fisiere de setari. Un analog complet al /etc în Linux, folosit, totuși, numai componentele sistemului. Aplicații Android stocați setările în directorul /data/data.
  • fonturi- fonturi. În mod implicit, conține doar fonturi marca Droid (sau Roboto în Android 4.0).
  • cadru- seturi de clase Java utilizate de sistem și software Android. Există, de asemenea, un fișier framework-res.apk care conține Descriere completa interfața sistemului de operare, inclusiv toate fișierele grafice.
  • lib- Biblioteci Linux utilizate de componentele sistemului de nivel scăzut. Similar cu directoarele /lib și /usr/lib de pe Linux, include biblioteci standard precum libc (deși Android folosește propriul Bionic în loc de Glibc), libz (criptare gzip), libssl și altele.
  • mass-media- fișiere media: tonuri de apel, sunete de notificare, sunete de interfață și fișiere de animație de pornire a sistemului de operare.
  • tts- fisiere necesare functionarii sintetizatorului de vorbire.
  • usr- un director opțional care conține de obicei fișierele necesare pentru ca software-ul să funcționeze din directorul bin. De fapt, un analog al lui /usr/share.
  • vânzător- fișiere furnizate de producătorul dispozitivului. De obicei, conține firmware binar pentru diferite componente hardware, cum ar fi un modul Wi-Fi.
  • xbin- un director opțional care conține tot ce nu este inclus în bin. Folosit de obicei pentru depozitare utilitati utile, cu toate acestea, opțional pentru ca sistemul să funcționeze (sus, editor de text). CyanogenMod îl folosește pentru a stoca instrumente de administrare: bash, ssh, powertop, busybox etc.
  • construi.prop- un fișier care conține informații despre ansamblu, precum și diverse setări de nivel scăzut.

comanda setprop

Setările build.prop prezentate în articol pot fi aplicate și unui sistem care rulează deja folosind comanda setprop:

# setprop debug.sf.nobootanimation 1

Set propriu de software

Directorul /system/app conține tot software-ul preinstalat în firmware. Înlăturând și adăugând pachete în acest director, putem schimba setul de aplicații disponibile imediat. De exemplu, nu este un secret că lansatorul Android standard (și ADWLauncher în CyanogenMod) încetinește și are numeroase dezavantaje. OK, să-l înlocuim cu LauncherPro:

$ rm system/app/Launcher.apk $ wget goo.gl/U9c54 -o system/app/LauncherPro.apk

Și e tot. Nu este nevoie să instalați nimic, nu este nevoie să căutați nicăieri, doar aruncați aplicația dorită în director - și ați terminat. Chiar și numele nu contează, Android însuși va găsi aplicația potrivită și o va seta ca ecran de pornire. În același mod, puteți introduce orice alt program în firmware sau îl puteți elimina de acolo.

Este util să puneți una dintre aplicațiile pentru găsirea unui smartphone pierdut (de exemplu, pradă) în firmware, apoi chiar dacă este resetat la setările din fabrică, va rămâne în sistemul de operare și va funcționa. De asemenea, puteți înlocui unele programe de sistem, de exemplu, adăugați Dialer One în loc de Phone.apk standard sau Go SMS în loc de sms.apk.

Dar aplicațiile de sistem Linux, cum ar fi serverul ssh sau mc? Și aici totul este simplu. Puteți crea software pentru Android și un procesor ARM folosind NDK de la Google, dar majoritatea aplicațiile dorite deja adunate înaintea noastră. De exemplu, dorim să preinstalăm mc în firmware-ul nostru. Accesați xda-developers și căutați Midnight Commander. Pe prima pagină găsim pachetul apk cu programul de instalare și îl despachetăm folosind același dezarhivare:

$ cd /tmp; dezarhivați ~/NativnuxInstaller_1.1.apk

Vedem assets/kits/mc-4.7.5.4-arm.tar.jet în lista de fișiere despachetate. Aceasta este o arhivă tar.gz care este dezambalată la rădăcina sistemului după instalator apk-pachet (sau mai bine zis, după instalarea apk-ului, lansarea aplicației și apăsarea butonului Instalare). Îl putem despacheta imediat în firmware-ul nostru și obținem mc-ul preinstalat:

$ cd ~/rom $ tar -xzf /tmp/assets/kits/mc-4.7.5.4-arm.tar.jet

Acum, pentru a lansa managerul de fișiere pe dispozitiv, trebuie doar să deschideți terminalul și să tastați mc. Alte aplicații pot fi distribuite în arhive zip pentru flashing cu ClockworkMod Recovery. Introducerea lor în mod este și mai ușoară, trebuie doar să mergeți la rădăcina firmware-ului (în acest caz ~ / rom) și să dezarhivați arhiva folosind unzip.



Aspect

Firmware-ul propriu este cel mai adesea creat pentru a schimba aspectul Android după bunul plac. Pentru a face această operațiune în Android, din nou, este foarte simplu. Toate setările GUI Android sunt stocate în fișierul framework/framework-res.apk. Poate fi despachetat folosind utilitarul apktool:

$cd~; wget goo.gl/hxz5l $ tar -xjf apktool1.4.1.tar.bz2 $ cd ~/rom/system/framework $ java-jar~/apktool.jar d framework-res.apk

Ca rezultat, directorul framework-res ar trebui să apară în directorul curent, care conține toate fișierele pachetului. Cele mai interesante subdirectoare din el sunt res/drawable-* și res/layout-*. Primul conține toate elementele grafice ca fișiere png pentru diferite rezoluții și poziții ale ecranului. De exemplu, drawable-land-mdpi este un director cu resurse grafice pentru ecranele cu rezoluție medie care se află în poziție orizontală (în timpul rotației ecranului, sistemul de operare comută pentru a utiliza alte fișiere). Desigur, orice fișier poate fi editat sau înlocuit cu altul.



directoarele de aspect conțin descrieri elemente graficeîn format XML (de fapt sunt stocate în format binar AXML, dar apktool le-a convertit în XML simplu). Formatul descrierii este destul de simplu și clar, dar este dificil să-l rezolvi deodată, mai ales dacă nu știi unde este totul. Prin urmare, ne vom adresa din nou la serviciile locuitorilor forumului xda-developers, care au reușit deja să vină cu o mulțime de modificări diferite pentru GUI Android. Sunt ușor de găsit cu ele interogare de căutare„nume_dispozitiv mod cu rezoluție cadru”.

De obicei, astfel de moduri sunt distribuite ca un fișier framework-res.apk gata făcut, pe care îl puteți pune pur și simplu în firmware-ul dumneavoastră. Dacă doriți să găsiți diferențe specifice în conținut, atunci modul poate fi dezambalat și comparat cu rezoluția dvs. de cadru folosind diff:

$ diff -R ~/framework-res \ ~/rom/system/framework/framework-res

Din păcate, în cadrul unui articol, nu putem considera măcar o parte dispozitiv intern framework-res, deci pentru mai mult informatii detaliate consultați subiectul corespunzător al forumului w3bsit3-dns.com.

După ce ați făcut modificări, puteți construi framework-res.apk folosind același apktool. Totuși, această operațiune necesită utilitatea aapt din kit. Android SDK, pe care apktool îl folosește pentru a finaliza ambalarea fișierului apk. Se poate obține și separat:

$ cd ~/bin; wget goo.gl/tC7k8

Acum putem construi fișierul:

$ cd ~/rom/system/framework $ java -jar ~/apktool.jar b framework-res $ cp framwork-res/dist/framework-res.apk . $ rm -rf framework-res

Următorul pas este schimbarea animației de încărcare. Este stocat ca fișiere png obișnuite, ambalate în arhiva system/media/bootanimation.zip. Să-l despachetăm:

$ cd /tmp $ mkdir bootanimation; cd bootanimation $ unzip ~/rom/system/media/bootanimation.zip

În interior se află un fișier desc.txt care descrie animația în următorul format:

Lățime Înălțime FPS p Director Pauză comandă...

Vizualizarea implicită a acestui fișier este:

480 800 30 p 1 0 part0 p 0 0 part1

Aceasta înseamnă că imaginea este de 480 x 800 și rata cadrelor (FPS) este de 30 fps. Mai jos este o descriere a primei părți a animației, ale cărei fișiere se află în directorul part0. Se joacă o dată (numărul 1 după p). Următoarea parte (part1) este redată de un număr infinit de ori până când mașina pornește. De obicei, directorul part0 conține imaginile corespunzătoare primei părți a animației, iar part0 conține toate celelalte imagini care sunt redate în buclă. Imaginile în sine trebuie să aibă aceeași dimensiune, iar numele lor trebuie să conțină numere în ordine crescătoare, cum ar fi 0001.png, 0002.png etc.

Deoarece animația de încărcare are un format foarte simplu, este destul de ușor de realizat. Este suficient să convertiți videoclipul în imagini png folosind mencoder (în desc.txt, trebuie să setați valoarea FPS la 24):

$ mplayer -nosound -vo png:z=9 video.avi

Dar chiar și asta ar fi redundant. Membrii forumului xda-developers au făcut atât de multe animații încât nu este deloc nevoie de lucru manual. Link-uri către animații interesante sunt oferite la sfârșitul articolului.

Setări de nivel scăzut

Ultimul lucru despre care aș dori să vorbesc în articol este editarea setărilor de nivel scăzut. În Android, există un fișier system/build.prop pentru aceasta, care stochează informații despre ansamblul firmware-ului și setările pentru dispozitive specifice. Adăugând anumite linii la acest fișier, puteți modifica funcționarea Android, îl puteți accelera sau reduce consumul bateriei. Mai jos sunt cele mai interesante setări.



  1. Interzicerea descarcarii desktopului din memorie: ro.HOME_APP_ADJ=1

    Opțiunea vă permite să faceți lucrul cu dispozitivul mai convenabil datorită accesului instantaneu la desktop în orice moment. Nu este recomandat pentru dispozitivele cu memorie redusă.

  2. Îmbunătățiți calitatea fișierelor JPG salvate: ro.media.enc.jpeg.quality=100

    Vă permite să faceți fotografiile camerei mai clare, dar crește semnificativ sarcina procesorului.

  3. Dezactivați animația de pornire pentru a accelera pornirea sistemului de operare: debug.sf.nobootanimation=1
  4. Atribuirea unei părți din munca de redare a interfeței la GPU: debug.sf.hw=1

    Vă permite să faceți interfața mai rapidă și mai fluidă.

  5. Blocarea notificării modului de depanare activ (atunci când este conectat la un computer cu prin USB): persist.adb.notify=0
  6. Remediați problema ecranului negru după încheierea apelului: ro.lge.proximity.delay=25 mot.proximity.delay=25
  7. Porniți lumina de fundal a tastelor de control imediat după pornirea ecranului: ro.mot.buttonlight.timeout=0

Pe lângă toate acestea, mulți utilizatori recomandă și utilizarea următoarelor combinații de steaguri:

  1. Reducerea timpului de răspuns touch screen: debug.performance.tuning=1 video.accelerate.hw=1 windowsmgr.max_events_per_sec=150
  2. Creșteți durata de viață a bateriei: wifi.supplicant_scan_interval=180 pm.sleep_mode=1 ro.ril.disable.power.collapse=0
  3. Modificari modul 3G: ro.ril.hsxpa=2 ro.ril.gprsclass=10 ro.ril.hep=1 ro.ril.enable.dtm=1 ro.ril.hsdpa.category=10 ro.ril.enable.a53 =1 ro.ril.enable.3g.prefix=1 ro.ril.htcmaskw1.bitmask=4294967295 ro.ril.htcmaskw1=14449 ro.ril.hsupa.category=5
  4. Îmbunătățiri ale performanței rețelei: net.tcp.buffersize.default=4096,87380,256960,4096,16384,256960 net.tcp.buffersize.wifi=4096,87380,256960,4096,1639860,25tcp.buffersize. net.tcp.buffersize.gprs=4096,87380,256960,4096,16384,256960 net.tcp.buffersize.edge=4096,87380,256960,4096,56384,2

Toate aceste linii trebuie doar să fie plasate în fișierul system/build.prop și salvate.

Asamblare

OK, am făcut modificările necesare, am implementat aplicațiile noastre, am optimizat sistemul și acum trebuie să creăm o imagine OS pregătită pentru firmware. Utilitarul testsign ne va ajuta în acest sens. Mai întâi trebuie să împachetați firmware-ul folosind zip:

$ cd ~/rom; zip -r my-rom.zip *

Acum trebuie să semnați arhiva pentru ca Recovery să o poată instala:

$ wget goo.gl/OyBBk $ java -classpath testsign.jar testsign \ my-rom.zip my-rom-signed.zip

După aceea, aruncăm arhiva my-rom-signed.zip pe cardul de memorie a dispozitivului și oprim dispozitivul. Pentru a intra în Recuperare, porniți dispozitivul în timp ce țineți apăsată tasta de reducere a volumului (pentru unele dispozitive, procedura poate diferi).

Acum mergeți la „Instalați zip de pe cardul SD”, apoi la „Alegeți zip de pe cardul SD”, găsiți my-rom-sign.zip pe cardul SD și selectați Da. După finalizarea instalării, selectați „Reporniți sistemul acum”.

constatări

Android este o platformă flexibilă, iar acest articol nu descrie toate posibilitățile de modificare. O modificare mai profundă poate include înlocuirea nucleului, schimbarea ecranului de blocare și aplicații standard, activarea unor funcții precum instalarea automată a aplicațiilor pe un card de memorie, introducerea unui mecanism de script de boot (/etc/init.d) și multe altele. Despre toate acestea vom vorbi în articolele următoare.

Aproape fiecare utilizator smartphone Android a existat dorința de a crea sau edita firmware-ul pentru a se potrivi nevoilor și dorințelor dumneavoastră. În acest articol, vom lua în considerare principiul editării firmware-ului pentru CWM (în format zip).

Instruire:

În primul rând, este necesar să decidem ce firmware vom lua ca bază. Mai bine să folosești off. firmware în zip. Pentru aproape fiecare dispozitiv comun există un firmware curat + root.
Când firmware-ul este selectat, trebuie să îl descărcați în orice loc convenabil pentru dvs. pe computer (nu ar trebui să îl despachetați).
Avem nevoie și de un arhivator, vă sfătuiesc să folosiți 7zipși cel mai bun editor de text de acest fel Notepad++.

Structura firmware:

Când deschideți arhiva cu firmware-ul, vedeți următoarele:
META-INF- scripturile de instalare a firmware-ului sunt stocate în folder.
sistem- un folder cu toate fișierele de firmware (aplicații, ajustări, scripturi etc.).
boot.img este nucleul sistemului.

Aproape toate manipulările sunt efectuate în folder sistem, structura sa:
aplicația - aplicații de sistem.
cos- resursele sistemului propriu-zis.
etc- Scripturi, ajustări, configurații, profiluri și setări de sistem.
fonturi- Fonturi de sistem.
cadru- aici sunt stocate fișierele principale ale sistemului (grafice, setări pentru textul animației etc.).
lib- biblioteci de sistem.
mass-media- fișiere multimedia (tonuri de notificare, animații de încărcare, imagini de fundal etc.).
usr- setări care nu sunt modificate de sistem în viitor (funcționează în modul „numai citire”).
xbin- din nou, configurații de sistem și alte modificări.
construi.prop- informații despre sistem, setările locale și performanța sistemului.

Aplicatii:

Înainte de a adăuga / elimina software-ul în sistem, trebuie să verificați dacă firmware-ul este deodexat (adică, verificați prezența fișierelor .odex în folderul aplicației. Dacă există fișiere, atunci trebuie să scăpați de ele aici pe acest instrucțiuni .
Adăugarea de software la firmware:
În primul rând, trebuie să instalați în smart acele programe pe care doriți să le adăugați la ansamblu. După instalare, le obținem de la sistem folosind Rădăcină de explorare si analogii lui, sunt situate pe calea date/aplicatie, avem nevoie si de ele fie (daca exista bineinteles) sunt situate pe calea date/date. Acestea se află în folderul cu același nume cu aplicația și au extensia .asa de. Apoi confiscat .apk punem fișierele în arhivă de-a lungul căii sistem / aplicație și fișierele cu extensia .asa de(lib"s) de-a lungul căii sistem/lib.
Eliminați software-ul din firmware:
Totul este simplu aici, mergi la folder aplicația- stabilim ce nu avem nevoie și eliminăm toate programele care nu sunt necesare (este mai bine să nu atingem sistemul).

Limba și versiunea de firmware:

Copiați fișierul build.prop pe desktop. Deschide-l cu notepad și găsește rândurile:

ro.product.locale.language=en
ro.product.locale.region=US

pentru limba rusă, trebuie să faceți acest lucru:

ro.product.locale.language=en
ro.product.locale.region=RU

introduceți numele modului dvs. în rând

în aceeași construcție.prop

Arte grafice:

Întreaga parte grafică a firmware-ului este stocată în două fișiere calea fișierului framework-res.apk cadru de sistemși SystemUI.apk pe parcurs aplicația de sistem. Iar partea grafică a aplicației de setări este stocată în mod natural în aplicația Settings.apk.

Scripturi și ajustări (accelerare și optimizare a sistemului):

Majoritatea setărilor sunt făcute în fișier construi.prop, puteți citi despre asta. De asemenea, dacă nucleul dvs. acceptă

Salut Habr!

Acum câțiva ani, când am fost introdus pentru prima dată în Android, am auzit de la un coleg de la serviciu că Android oferă posibilitatea de a instala firmware modificat sau făcut în casă. Sincer, atunci eram departe de asta. Și chiar și acum jumătate de an nu mă mai interesau astfel de lucruri. În adâncul inimii mele, eram sigur că ceea ce face producătorul este deja destinat utilizării normale.

Care a fost dezamăgirea mea când mi-am cumpărat un telefon din China, unde setările din fabrică interziceau folosirea Google, Skype, Facebook și a altor aplicații. În principiu, era posibil să închid ochii la unele lucruri, dar când telefonul meu nu presupunea folosirea unui cont înregistrări google- Am promis că îmi voi da seama cu siguranță ce se va întâmpla cu mine.

A trecut o jumătate de an și firmware-ul meu personalizat este folosit cu succes în toată lumea.

Această serie de articole va vorbi despre cum să faci programare inversă pentru Android, să implementezi patch-uri, modificări și modificări.

Preambul

Asa de! Să definim mai întâi termenii care vor fi folosiți în dat articol. Înțelegerea ta obișnuită, totuși, poate diferi foarte mult.

Plasture- modificarea sau înlocuirea unui existent codul programului pentru a modifica algoritmul programului.
Maud- de regulă, adăugarea de funcționalități suplimentare la codul programului existent fără a schimba algoritmul.
ajustare fina- îmbunătățirea funcționalității programului pentru a facilita accesul la parametrii sistemului.

De asemenea, vreau să remarc că toate exemplele vor fi luate pentru telefon HTC, dar asta nu înseamnă asta aceasta informatie nu poate fi folosit pe alte telefoane.

Vă rugăm să rețineți că eu, în calitate de autor, nu sunt responsabil pentru posibila pierdere de date de pe telefonul dvs. ca urmare a utilizării informațiilor de mai jos.

Pregătirea mediului

Mă voi descurca fără instrucțiuni detaliate despre cum să utilizez acest sau acel software. Dacă sunteți interesat de acest articol și ați citit până la aceste rânduri, atunci sper că sunteți deja un utilizator experimentat și aveți experiență în utilizarea sau cel puțin experimentarea în acest domeniu. Instrucțiunile, articolele și rezultatele testelor sunt complete acces deschis, totuși, precum și pe Habré. Mă voi descurca și fără a descrie unii termeni, altfel articolul se va dovedi a fi foarte mare și plictisitor. Vom scrie doar despre afaceri. Sunt sigur că aveți deja mediul de mult timp. Dacă nu, atunci sugerez descărcarea și instalarea.

1 . Android SDK. Acesta este un mediu de dezvoltare a aplicațiilor Android. Pentru a face modificări, cu siguranță va trebui să ne verificăm codul programului. Mediul de dezvoltare este cel mai bun pe care îl putem folosi.
2 . Android Bucătărie. Acest utilitar vă va permite să lucrați cu imagini ale partițiilor de sistem ale firmware-ului oficial sau neoficial.
3 . JD GUI. Decompilator de cod Java. Voi observa imediat că acesta este cel mai bun decompilator în ceea ce privește ușurința în utilizare.
4 . DJ Java Decompiler. Un alt decompilator, sau dezasamblator, cum le place unii să-l numească, al codului limbajului Java. Nu este ușor de utilizat, dar parsează cod pe care uneori JD-GUI nu îl înțelege.
5 . smali. Un alt dezasamblator, dar deja un cod dalvik. smali este necesar pentru dezasamblare, iar backsmali pentru asamblarea codului.
6 . dex2jar. Utilitar pentru conversia fișierelor executabile de cod Dalvik.

Conversie de firmware

Desigur, firmware-ul pe care îl aveți pe telefon de la producător este optimizat pentru a reduce consumul de energie. Pentru ca firmware-ul să fie modificat, acesta trebuie convertit într-un format care să permită modificarea codului. Android Kitchen este folosit pentru aceasta. Puteți, desigur, să vă folosiți mâinile, așa cum am făcut eu înainte, până când am găsit această „bucătărie”. Cum să scoți zona de sistem din telefon, să instalezi mediul, să faci firmware DEODEX, poți citi pe Internet. Daca deja nu intelegi nimic, cred ca ar trebui sa astepti cu articolul pana cand vei dobandi suficienta experienta.

După ce firmware-ul dintr-o formă optimizată (ODEX - cod executabil dalvik optimizat, dacă îmi servește memoria) a devenit DEODEX (adică NU optimizat), toate fișierele executabile sunt gata de modificare.

Modificări directe

Crearea de patch-uri
După cum am spus deja, telefonul meu avea inițial o interdicție privind utilizarea Google. Ei bine, cel puțin tu crac, nu poți merge la Playstore, cont nu instalați carte de telefoane nu se sincronizează bine. De ce avem nevoie de un astfel de Android? Sapă lung în jurnalele (logcat) ale dispozitivului în sine, am găsit intrări care spuneau că utilizarea Google este interzisă. Cel mai incomod din Android, vezi jurnalul, dar nu știi ce aplicație de sistem îl produce. Pentru a afla de unde îmi cresc picioarele, a trebuit să elimin toate aplicațiile de sistem într-un cod Java dezasamblat. A durat destul de mult, dar încă folosesc munca depusă atunci când analizez și găsesc codul potrivit. Pașii pentru obținerea unui astfel de instrument sunt următorii:
1 . Faceți DEODEX tot firmware-ul
2 . Noul dumneavoastră firmware DEODEX va trebui să fie asamblat și flashat pe telefon. Cum se face acest lucru este subiectul unui alt articol.
3 . Extrageți fișierul classes.dex din fiecare fișier aflat în /system/framework și convertiți-l în JAR folosind dex2jar.
4 . Fiecare a primit JAR deschis în JD-GUI și re-salvat în codul sursă
5 . Despachetați codul sursă din arhivă.

Am ajuns să am atâtea foldere câte fișiere JAR erau în /system/framework și fiecare folder avea o structură de cod sursă Java.
Prin simple manipulări, am găsit rapid locul care a generat intrări logcat.

Nu vom lua în considerare întreaga logică a interdicției, deoarece pentru fiecare caz aceasta poveste separată. A trebuit să petrec câteva ore înainte să aflu unde se fac verificările, să construiesc o diagramă bloc a algoritmului în capul meu și să înțeleg unde să merg pentru a „strica” puțin algoritmul.

Totul s-a dovedit a fi simplu. Există o subrutină care, pe baza unor constante prestabilite, răspundea dacă telefonul aparține sau nu Chinei.

Codul era în dosar HTCExtension.jar, iar clasa care conținea această subrutină era în

Despachetarea si analiza dosarul original
1 . Mai întâi trebuie să luăm fișierul DEODEX JAR original, care este responsabil pentru partea de cod de care avem nevoie. În cazul nostru HTCExtension.jar.
2 . Deschideți cu orice arhivator și scoateți classes.dex de acolo
3 . Utilizați convertorul dex2jar pentru a-l converti într-un fișier JAR. Comanda: dex2jar.bat classes.dex
4 . Deschideți fișierul classes_dex2jar.jar rezultat în JD-GUI.
5 . Da, cel mai adesea JD-GUI decompilează codul diferit de modul în care arată în original, este de înțeles, dar este destul de lizibil. În codul sursă, vedem că subrutina verifică parametrii proiectului și flag-ul limbii firmware-ului. În cazul nostru nefericit, TRUE este returnat.
public static boolean isChina() ( if ((HtcBuildFlag.Htc_PROJECT_flag == 216) || (HtcBuildFlag.Htc_PROJECT_flag == 218) || (HtcBuildFlag.Htc_PROJECT_flag == 23)); while (F_lag ==Htc_PROJECT_flag) ; && (2 == HtcBuildFlag.Htc_LANGUAGE_flag)) || (HtcBuildFlag.Htc_PROJECT_flag == 27)) returnează adevărat; returnează fals; )
6 . Pentru a face un patch, trebuie să dezasamblam codul Dalvik în sine. Pentru aceasta folosim baksmali. Cel mai convenabil este să creați un folder separat și să puneți acolo trei fișiere împreună: HTCExtension.jar, smali.jarși baksmali.jar. Dam comanda java -Xmx512m -jar baksmali.jar -a -d -o HTCExtension -x HTCExtension.jar

Acesta este API-ul versiunii dvs. de Android. Pentru JB este 16
- folderul în care se află toate cadrele de firmware.

În cazul meu a fost comanda
java -Xmx512m -jar baksmali.jar -a 16 -d S:\dev\Android\Android-Kitchen\WORKING_JB_15\system\framework -o HTCExtension -x HTCExtension.jar
7 . În dosarul nostru nou creat, a apărut folderul HTCExtension și în el fișierele noastre de cod Dalvik.
8 . Găsind un fișier pe parcurs \com\htc\util\contacts\BuildUtils$Customization.java si uita-te la cod:
.method public static isChina()Z .registers 3 .prologue const/4 v0, 0x1 .line 276 sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S const/16 v16 v12 , v2, :cond_13 sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S const/16 v2, 0xda if-eq v1, v2, :cond_13 sget-short-short v1flag/hcom/htvacFlag ;->Htc_PROJECT_flag:S const/16 v2, 0x17 if-ne v1, v2, :cond_14 .line 297:cond_13:goto_13 return v0 .line 283:cond_14 sget-short v1, Lcom/htcvaflag/Htcjag/Htcvaflag/ Htc_PROJECT_flag:S if-ne v1, v0, :cond_1d .line 285 const/4 v1, 0x2 sget-short v2, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_LANGUAGE_flag:S if v-eqline v2, v-eq, v. 291:cond_1d sget-short v1, Lcom/htc/htcjavaflag/HtcBuildFlag;->Htc_PROJECT_flag:S const/16 v2, 0x1b if-eq v1, v2, :cond_13 .line 297 , goto_1 v297, const. metodă
9 . Înfricoșător, nu-i așa? Nimic nu este clar. Dar, acest lucru este reparabil. După ce ați creat câteva patch-uri proprii și, astfel, v-ați umplut mâna, puteți modifica cu ușurință codul fără instrumente de la terți. În cazul nostru, în acest cod
.prolog const/4 v0, 0x1 variabilei v0 i se atribuie valoarea 1, adică TRUE. Apoi există tot felul de verificări, iar dacă telefonul nu este chinezesc, atunci valoarea variabilei se schimbă:
.line 297 const/4 v0, 0x0 goto:goto_13
10 . Cel mai simplu mod de a-l salva pe părintele democrației ruse este să schimbi codul în următoarele:
.prologue const/4 v0, 0x0 , adică modificați valoarea variabilei de la 1 la 0. Adică, orice s-ar întâmpla, valoarea lui FALSE ar fi întotdeauna returnată și în JD-GUI codul ar arăta ca public static boolean isChina() ( if (( HtcBuildFlag.Htc_PROJECT_flag == 216) || (HtcBuildFlag.Htc_PROJECT_flag == 218) || (HtcBuildFlag.Htc_PROJECT_flag == 23)); în timp ce ((Flag.Htc_PROJECT_flag == 218)); 2 == HtcBuildFlag.Htc_LANGUAGE_flag)) || (HtcBuildFlag.Htc_PROJECT_flag == 27)) returnează fals; returnează fals; )
11 . Da, metoda va funcționa. Dar nu căutăm căi ușoare – de data aceasta. În al doilea rând, nu este foarte frumos. Vreau cod de genul
public static boolean isChina() ( returnează fals; )
12 . Și cum putem obține codul Dalvik pentru asta cod sursa? Pentru începători, vom face un mic truc.

Crearea codului Dalvik
1 . Deschideți Android SDK.
2 . Creăm un nou proiect, iar în singura noastră clasă de testare scriem următorul cod
pachet en.habrahabr.test; test de clasă publică ( public static boolean isChina() ( return false; ) )
3 . Compilăm proiectul nostru și apoi luăm aplicația asamblată din spațiul de lucru.
4 . Am pus aplicația asamblată în folderul în care am eliminat fișierul JAR.
5 . Dăm comanda java -Xmx512m -jar baksmali.jar -a -d -o test -x test .apk
6 . Am dezasamblat aplicația nou construită în codul Dalvik.
7 . Deschideți fișierul nostru test.smali și vedeți codul acolo
.method public static isChina()Z .registers 1 .prolog .line 7 const/4 v0, 0x0 return v0 .end method
8 . Totul, codul pentru corecție este gata.
Rolling petice
1 . Codul Dalvik este presărat cu marcaje care indică o linie de cod în fișierul sursă original. Acest lucru este necesar la afișarea erorilor, dacă există, în programul dvs. Codul funcționează bine și fără șiruri.
2 . Stergem liniile cu numerotarea liniilor, copiem si inlocuim metoda (subrutina) din nostru \com\htc\util\contacts\BuildUtils$Customization.java fişier.
.method public static isChina()Z .registers 1 .prologue const/4 v0, 0x0 return v0 .end method
3 . Salvăm fișierul. Da, am uitat să spun, aveți nevoie de un editor normal, precum Notepad++ sau EditPlus. Cui îi place ce.
Compilarea și construirea fișierului JAR corectat
1 . Cu ajutorul backsmali, ne-am eliminat fișierul JAR și acum trebuie să-l reconstruim.
2 . Dam comanda java -Xmx512m -jar smali.jar -a 16 HTCExtension -o classes.dex
3 . Fișierul classes.dex apare în tatăl nostru
4 . Deschide din nou HTCExtension.jar fișier cu un arhivator și înlocuiți-l pe cel existent în acesta clase.dex la cel nou creat.
5 . Totul, al nostru HTCExtension.jar conţine codul de program modificat.
Înlocuirea fișierului original cu unul corectat
De obicei, pentru utilizatorii obișnuiți sunt create scenarii speciale, care sunt înlocuite prin recuperare. Dar nu ne interesează asta. În primul rând, este lung și plictisitor, iar în al doilea rând, suntem utilizatori experimentați și ne putem permite unele subtilități.

1 . Puteți înlocui fișierul de lucru curent cu următoarele comenzi dacă aveți deja instalat firmware-ul DEODEX și aveți acces root:

adb push HTCExtension.jar /sdcard/HTCExtension.jar adb shell su mount -o remount -rw /system dd if=/system/framework/HTCExtension.jar of=/system/framework/HTCExtension.jar.back dd if=/sdcard /HTCExtension.jar of=/system/framework/HTCExtension.jar chmod 644 /system/framework/HTCExtension.jar rm /data/dalvik-cache/ [email protected]@[email protected] reporniți

Prima comandă încarcă fișierul corelat pe unitatea flash
A doua comandă deschide shell
A treia comandă oferă acces root
A 4-a comandă montează sistemul în modul citire/scriere
Echipa a 5-a face backup fişier
A șasea comandă suprascrie fișierul existent cu cel nou corelat.
A șaptea comandă de configurare a permisiunilor
A 8-a comandă șterge memoria cache
A 9-a comandă face o repornire a dispozitivului.

2 . Vă mulțumesc pentru că ați citit până în acest moment, nu a mai rămas mare lucru.
3 . După repornire, noul cod corelat va intra în vigoare.
4 . Dacă codul nu funcționează sau apare o eroare, atunci, prin combinații deloc complicate, puteți returna copia de rezervă.
adb shell su mount -o remount -rw /system dd if=/system/framework/HTCExtension.jar.back of=/system/framework/HTCExtension.jar rm /data/dalvik-cache/ [email protected]@[email protected] reporniți

Epilog

Da, acest articol părea prea specific cuiva, obscur pentru cineva și inutil cuiva. Am făcut în mod deliberat fără detalii și ilustrații aprofundate despre cum arată totul în direct și în practică. În primul rând, această muncă va fi ingrată și va da naștere la și mai multe întrebări. În al doilea rând, nu vreau să văd o armată de utilizatori pe forumuri care se plâng că și-au ucis telefonul.

Pentru următorul articol, vă voi spune cum să faceți Tweaks. Va exista un exemplu de utilizare a înregistrării automate a apelurilor telefonice cu instrumente telefonice native. Vă mulțumim pentru atenție.

P.S. Dacă ceva nu este clar sau încurcă, pune întrebări - voi fi întotdeauna bucuros să răspund și să explic.

Nu este ușor să creezi firmware personalizat pentru Android, pentru asta ai nevoie de special softwareși anumite abilități, precum și algoritmul de acțiuni pe care îl vom descrie în acest articol.

Să analizăm caz specialși să începem în ordine. Pentru a crea un firmware Android personalizat, veți avea nevoie de:

  1. Un computer personal sau laptop care rulează Ubuntu și are Java instalat.
  2. „Bucătărie” este o aplicație pentru procesarea imaginilor partițiilor de sistem.
  3. De fapt, firmware-ul Android urmează să fie procesat.

Pasul 1 - Instalarea Ubuntu

Ubuntu se bazează pe nucleul Linux și se bazează pe Debian, dezvoltat de Canonical. Nu este deloc necesar să instalați acest sistem în locul celui actual, să îl rulați printr-un emulator și așa mai departe.


Pentru a folosi confortabil toate avantajele sale, este suficient să folosiți aplicația Wubi, care poate instala Ubuntu sub Windows. Wubi este prescurtarea pentru windows ubuntu instalator.

După descărcarea programului de instalare și instalarea unui nou sistem de operare prin intermediul acestuia, atunci când porniți computerul, puteți intra în unul sau altul sistem la alegere și îl puteți gestiona prin panoul de control Windows.

Pasul 2 - Instalarea Java

Java este un limbaj de programare dezvoltat în 1995, numele său aparent este preluat din filme (amuzantii oameni Java din Star Wars).

Majoritatea software-ului de astăzi se bazează pe această tehnologie. tipuri diferite. Unele site-uri funcționează numai dacă aveți Java instalat pe computer.


Pentru a-l instala aveți nevoie de:

  1. introduce sistem Ubuntuși deschideți terminalul folosind tastele Ctrl+Alt+T.
  2. Utilizați comanda sudo add-apt-repository „deb http://archive.canonical.com/ubuntu lucid partner” în fereastra care se deschide pentru informații de intrare/ieșire în sistemul de operare Ubuntu - vă permite să conectați un nou depozit de la care aveți poate descărca Java. Pentru a face acest lucru, va trebui să introduceți o parolă pentru a obține drepturi de Super Administrator, care este setată când instalarea Ubuntu. În continuare, trebuie să utilizați următoarele comenzi:
  3. sudo apt-get update pentru a actualiza lista de surse.
  4. sudo apt-get install sun-java6-jre sun java6-plugin sun-java6-fonts pentru a instala Java.

Pasul 3 - lucrați cu „bucătăria” pentru a crea firmware-ul

Programul „bucătărie” este instrumentul principal pentru lucrul cu firmware-ul Android. Există mai multe tipuri de ele, vom lua în considerare lucrul cu bucătărie de la Dsixda.


  • După descărcarea fișierelor necesare, trebuie să le dezarhivați în folderul de acasă din directorul bucătăriei.
  • Lansați Terminalul, utilizați comanda Is pentru a afișa o listă de documente în folderul de start pe ecranul său. Directoarele vor fi evidențiate cu albastru, fișierele de arhivă vor fi evidențiate cu roșu și așa mai departe.
  • Deschideți în folderul Bucătărie, transferați fișierul firmware procesat în orice format în directorul original_update.
  • Întoarce-te la terminal cu deschide folderul Bucătărie, introduceți comanda Is. Meniul va apărea printre fișiere, ar trebui să fie lansat cu comanda ./menu. Aceasta va deschide o listă de comenzi numerotate pe care le puteți executa introducând numărul lor pe linie și apăsând Enter.
  • Pentru a dezasambla firmware-ul, trebuie să introduceți comanda 1. Bucătăria va începe apoi să afișeze o mulțime de întrebări la care trebuie să răspundeți cu tasta Enter (valorile necesare sunt introduse implicit).

Aceste acțiuni vor duce la meniul inițial al programului. Înapoi în folderul Bucătărie, veți găsi folderul „WORKING_x_y”, unde x și y sunt data și ora la care a fost creată.

Acesta va conține fișierele firmware analizate. În folderul System puteți găsi totul fișiere de sistem. părți din aceste fișiere vor schimba firmware-ul.

După ce ați schimbat setul de aplicații de bază, funcții, setări și ați făcut toate modificările dorite la fișierele firmware, trebuie să îl asamblați.

Pentru a face acest lucru, trebuie să vă întoarceți la Terminal, să introduceți comanda 99, să răspundeți din nou la toate întrebările cu tasta Enter. După aceea, programul va arunca utilizatorul în meniul inițial, iar folderul OUTPUT_ZIP va conține un nou fișier de firmware, care poate fi apoi instalat pe un dispozitiv mobil.

Există și alte modalități de a crea personalizarea drepturilor de autor firmware Android, iar programele necesare pentru aceasta pot fi găsite în rețea, acestea vă permit să „deschideți” fișierele sistemului de operare și să modificați anumiți parametri după cum doriți.

Iată mai multe programe concepute pentru asta:

  • Android SDK este un mediu de dezvoltare conceput special pentru lucrul cu aplicații Android, vă permite să verificați codul programului.
  • Android Kitchen - necesar pentru procesarea imaginilor partițiilor sistemului în firmware.
  • JD-GUI este un decompilator capabil să lucreze cu limbajul de programare Java. Analogul său este DJ Java Decompiler.
  • smali - pentru lucrul cu codul dalvik. Conceput pentru dezasamblarea codului, backsmali vă permite să asamblați codul dalvik.
  • dex2jar este un utilitar care vă permite să convertiți fișiere executabile pe baza codului dalvik.