„Android“ pasaulyje už paprasto kiekvienos programėlės veikimo slypi sudėtinga failų ir procesų architektūra. kuris dažnai lieka nepastebėtas daugumos vartotojų. Vienas iš pagrindinių elementų, ypač tiems, kurie gilinasi į operacinės sistemos esmę arba kuria programas, yra .art failai, susieti su „Android Runtime“ (ART). Nors iš pirmo žvilgsnio jie gali atrodyti kaip techninis ir tolimas aspektas, Suprasti jų funkciją ir egzistavimo priežastį yra labai svarbu norint suprasti, kaip „Android“ veikia viduje ir kaip ji vystėsi, kad taptų greitesnė, efektyvesnė ir saugesnė..
Nuo pirmųjų „Android“ telefonų iki naujausių versijų, programų valdomų failų vykdymo sistema ir formatas labai pasikeitė.. Jei norite sužinoti, kam skirti .art failai, kuo jie skiriasi nuo senų ODEX failų, kokį vaidmenį atlieka vadinamasis ELF arba tiesiog suprasti, kas nutinka kiekvieną kartą įdiegus ar atidarius programėlę, Šiame straipsnyje papasakosime viską aiškiai ir be nereikalingų techninių detalių.. Net jei esate smalsus vartotojas, neturintis jokios programavimo patirties, atrasite daugybę detalių, kurios jus tikrai nustebins!
Kas yra „Android Runtime“ (ART) ir kaip ji atsirado?
Maždaug iki „Android 4.4 KitKat“ versijos „Google“ operacinė sistema naudojo „Dalvik“ kaip pagrindinę virtualią mašiną, atsakingą už „Java“ sukurtų programų interpretavimą ir vykdymą. Tačiau „Dalvik“ turėjo tam tikrų našumo ir efektyvumo apribojimų, ypač kompiliuojant kiekvienos programos kodą „just in time“ (JIT) kiekvieną kartą, kai ji buvo atidaryta. „Android Runtime“, žinoma kaip akronimas ART, yra vykdymo aplinka, kuri atnaujino ir pakeitė „Dalvik“, pradedant „Android 5.0 Lollipop“, nors ji jau buvo pasirenkama paskutiniame „KitKat“ etape..
ART keičia „Android“ programų kompiliavimo ir paleidimo būdą: sistema pereina nuo JIT kompiliavimo prie išankstinio (AOT) kompiliavimo, generuodama įrenginiui būdingus mašininio kodo failus programos diegimo metu.. Tokiu būdu, atidarius programą ART aplinkoje, sistema jau turi sugeneruotą kodą ir jai nereikia skubiai kompiliuoti svarbių dalių, o tai reiškia Mažesnis procesoriaus sunaudojimas, daug greitesnis vykdymas ir žymiai taupoma baterija.
Be to, ART yra suderinamas su atgaliniu Dalvik .dex baitkodo formatu, taigi APK failuose supakuotos ir senesnei virtualiai mašinai sukurtos programos vis dar veikia, tačiau vidinis konvertavimo, vykdymo ir optimizavimo procesas radikaliai pasikeičia.
Kas yra .art failas ir kaip jis telpa į šią architektūrą?
Norint iš tikrųjų suprasti, kam skirti „Android Runtime .art“ failai, pirmiausia reikia juos pateikti kiekvienos „Android“ programos struktūros kontekste:
- Programėlių („Java“ arba „Kotlin“) šaltinio kodas kompiliuojamas į „Java“ baitinį kodą, generuojant .class failus.
- Visas šis baitkodas transformuojamas ir suspaudžiamas į .dex („Dalvik Executable“) formatą, kuris yra „classes.dex“ failas, įtrauktas į kiekvieną APK (standartinę „Android“ programų diegimo programą).
- Taigi APK yra suspaustas paketas, kuriame yra .dex failas, ištekliai, atvaizdai, manifestas ir kiti komponentai.
- Priklausomai nuo sistemos veikimo būdo, naudojant „Dalvik“, .dex failas yra nuolat perkompiliuojamas JIT proceso metu ir generuojami .odex failai, kuriuose saugomas „optimizuotas“ kodas.
- Tačiau ART naudoja kitokią strategiją: diegiant programą sistema sukompiliuoja .dex failą į originalų mašininį kodą ir sukuria failus .oat ir (arba) .art formatu (priklausomai nuo „Android“ versijos)., kuriuose yra optimizuotas kodas ir duomenų struktūros, reikalingos programai veikti tiesiogiai, be tolesnio kompiliavimo realiuoju laiku.
Tiksliau sakant, .art failai („Android Runtime“) yra ankstesnio įrankio sugeneruoti failai, gauti kompiliuojant. dex2oat, ir gali talpinti tiek vykdomąjį kodą ELF (vykdomojo ir susiejamojo formato) formatu, tiek papildomą informaciją apie virtualios mašinos atvaizdą ir duomenis iš iš anksto sukompiliuotų klasių.
Kam naudojami .art failai ir kuo jie naudingi tiek vartotojui, tiek kūrėjui?
.art failų egzistavimas turi keletą tiesioginių pasekmių ir privalumų tiek „Android“ naudotojams, tiek kūrėjams.:
- Geresnis programos našumasDėl AOT kompiliavimo, kuris atliekamas diegiant kiekvieną programą, visų funkcijų paleidimas ir vykdymas yra daug greitesnis, nes kodas jau yra paruoštas veikti jūsų įrenginio architektūroje (ARM, x86 ir kt.).
- Mažesnis išteklių ir akumuliatoriaus sunaudojimasPašalinus poreikį nuolat kompiliuoti kodą naudojimo metu, kaip tai padarė Dalvik, procesorius dirba mažiau, generuodamas mažiau šilumos ir sunaudodamas mažiau energijos.
- Sumažintas delsos laikas atidarant arba perjungiant programasOperacinei sistemai nereikia laukti, kol bus perkompiliuotos baitkodo dalys, todėl pagerėja naudojimo patirtis ir sklandumas.
- Didesnis saugumas ir kontrolėART įgyvendina daug griežtesnę kodo patikrą nei Dalvik, taip sumažindamas kenkėjiško ar negaliojančio kodo vykdymo tikimybę.
- Geresnis derinimas ir klaidų sekimasKadangi kodas jau yra išanalizuotas ir sukompiliuotas, „Android Runtime“ gali pateikti aiškesnius ir išsamesnius pėdsakus bei klaidų pranešimus.
Žinoma, kaip priešininkas, .art ir .oat failai užima daugiau vietos vidinėje atmintyje nes juose jau yra visas mašininis kodas ir Programėlės diegimo procesas gali užtrukti šiek tiek ilgiau nei senesnėse „Android“ versijose, nors šiandien tai yra kažkas nepastebima beveik visiems vartotojams.
.art, .oat, .odex, .dex ir ELF failų skirtumai: ką reiškia kiekvienas iš jų?
Turbūt vienas iš dažniausiai užduodamų klausimų tiriant „Android Runtime“ yra skirtumas tarp kelių sistemoje rodomų failų formatų. Paaiškinkime tai paprastai:
- .dex (Dalvik vykdomasis failas): yra tarpinis formatas, kuriame yra „Java“ / „Kotlin“ programų baitinis kodas. Kiekvienas APK failas turi bent vieną .dex failą (paprastai „classes.dex“).
- .odex (optimizuotas „Dalvik“ vykdomasis failas)„Dalvik“ sukurti failai, generuojami programos optimizavimo ir vykdymo metu, kuriuose saugomi jau sukompiliuoti kodo fragmentai, siekiant pagreitinti paleidimą vėlesnių vykdymų metu. Jie buvo ypač aktualūs sistemose iki „Lollipop“ ir buvo pašalinti atsiradus ART.
- .oat (optimizuotas „Android“ menas): ART pristatytas formatas, šiuolaikinis .odex atitikmuo, kuriame gali būti tiek originalus kodas ELF formatu, tiek optimizuotos klasių struktūros ir metaduomenys. Jie randami šiuolaikinėse sistemos versijose, ypač /data/dalvik-cache kataloguose arba programų aplankuose.
- .art: yra „Android Runtime“ virtualios mašinos vaizdo failas. Paprastai jis randamas sistemos kataloguose, tokiuose kaip /system/framework, ir jame yra iš anksto sukompiliuotų klasių ir struktūrų, reikalingų virtualiai mašinai greičiau veikti ir paleisti, atvaizdas.
- ELF (vykdomasis ir susiejamas formatas): yra standartinis vykdomųjų failų formatas „Linux“ / „Android“ sistemose. ART sistemoje programos diegimo metu sugeneruotas mašininis kodas saugomas ELF failuose, įterptuose į .oat arba kitus failus.
Nors ODEX dingsta iš ART, OAT ir ART (vaizdo) failai tampa būtini efektyviam bet kurios programos paleidimui ir vykdymui „Android Lollipop“ ir naujesnėse versijose..
Kaip vyksta procesas nuo programėlės programavimo iki jos paleidimo „Android“ sistemoje?
Pažiūrėkime tikslius veiksmus, kuriuos atlieka „Android“ programa nuo jos parašymo iki tol, kol ją galite atidaryti savo mobiliajame telefone, atskirdami, kas vyksta Dalvik ir ART.:
- Kodas parašytas Java arba Kotlin, paprastai „Android Studio“ programoje.
- „Java“ kompiliatorius generuoja failus .klasė su standartiniu „Java“ baitų kodu.
- „Android“ kūrimo sistema („Gradle“ ir kūrimo įrankiai) transformuoja visus .class failus į .dex failas atžvilgiu.
- „aapt“ („Android Asset Packaging Tool“) pakavimo programa sujungia .dex, išteklių, manifesto ir kitus failus į vieną APK pasirašyta ir suderinta.
- Įdiegę tą APK savo įrenginyje:
- Jei bėgsi Dalvikas (Android 4.4 arba senesnėje versijoje) sistema išskleidžia .dex failą ir kiekvieną kartą atidarius programą, iš dalies jį sukompiliuoja į mašininį kodą, sugeneruodama .odex (optimizuotą Dalvik vykdomąjį failą) failą talpykloje.
- Jei bėgsi ART (5.0 ar naujesnės versijos „Android“) diegimo metu įrankis dex2oat generuoja .oat ir .art failus, sukompiliuoja visą baitinį kodą į jūsų procesoriaus natyvų kodą ir saugo jį ELF formatu .oat faile kartu su vykdymui reikalingomis struktūromis. Tokiu būdu, kitą kartą atidarius programėlę, Tai prasidės beveik akimirksniu ir bus paruošta naudoti..
Šis darbo eigos pakeitimas leidžia Daug labiau optimizuotas našumas, išmanesnis atminties naudojimas ir galimybė puslapiuoti (perkelti į diską) rečiau naudojamas kodo dalis, ko „Dalvik“ negalėjo padaryti taip efektyviai..
Kur įrenginyje yra .art ir .oat failai?
Jei kada nors naršėte „Android“ vidinius komponentus (su root teisėmis arba emuliatoriuose), tikriausiai matėte tokius katalogus kaip /data/dalvik-cache arba /system/framework. Čia yra dauguma sistemos sugeneruotų .art ir .oat failų.. Kiekviena programa turi savo atitinkamą talpyklos failą, kurio pavadinimai ir keliai gauti iš originalaus APK failo.
Naujesnėse „Android“ sistemose .art failuose paprastai yra vykdymo laiko vaizdas, o .oat failuose – optimizuotas mašininis kodas, abu ELF formatu. Šie failai yra labai svarbūs, kad ART virtualioji mašina greitai paleistų ir programos veiktų be kliūčių..
Pagrindiniai ART privalumai ir trūkumai, palyginti su Dalvik ir ODEX
Perėjimas nuo Dalvik prie ART žymėjo lūžio tašką „Android“ istorijoje. Aiškiai pažiūrėkime, kokie yra šio pokyčio privalumai ir iššūkiai.:
- našumą ir efektyvumąART smarkiai sutrumpina programos paleidimo laiką ir užtikrina stabilesnį bei sklandesnį veikimą. Dalvik, naudodamas JIT kompiliavimą, kiekvieną kartą paleidus programą sumažindavo greitį, ypač jei ji turėjo daug funkcijų ar klasių.
- Energijos suvartojimasSumažėjęs poreikis kompiliuoti operatyviai taupo akumuliatoriaus veikimo laiką ir, skirtingai nei „Dalvik“, įrenginyje sukuriama mažiau šilumos.
- Daugiau vietos diskeIšsaugodamos jau sugeneruotą natyvųjį kodą, programos užima daugiau vidinės vietos jūsų mobiliajame telefone ar planšetiniame kompiuteryje. Apskaičiuota, kad vidutiniškai padidėja iki 20 %, palyginti su senesnėmis sistemomis.
- Lėtesnis diegimas– Visas analizės ir kompiliavimo procesas diegiant programą gali užtrukti keliomis sekundėmis ilgiau nei anksčiau, o tai labiau pastebima senesniuose įrenginiuose. Tačiau tai laikas, kuris investuojamas tik vieną kartą ir vėliau atgaunamas su kiekvienu panaudojimu.
- Patobulintas patvirtinimas ir saugumasART neleidžia tam tikrų programavimo praktikų, kurias toleravo Dalvik, o tai pagerina bendrą sistemos patikimumą. Pavyzdžiui, jis atmeta negaliojantį baitinį kodą, sugeneruotą nesuderinamų kodavimo įrankių arba rizikingų praktikų, todėl kūrėjai yra priversti laikytis gerosios praktikos.