Android pasaulē aiz katras lietotnes vienkāršās darbības slēpjas sarežģīta failu un procesu arhitektūra. kas bieži vien paliek nepamanīts lielākajai daļai lietotāju. Viens no galvenajiem elementiem, īpaši tiem, kas iedziļinās operētājsistēmas dziļumos vai izstrādā lietojumprogrammas, ir .art faili, kas saistīti ar Android Runtime (ART). Lai gan no pirmā acu uzmetiena tie var šķist tehnisks un attālināts aspekts, Izpratne par to funkciju un to eksistences iemeslu ir būtiska, lai izprastu, kā Android darbojas iekšēji un kā tā ir attīstījusies, lai kļūtu ātrāka, efektīvāka un drošāka..
No pirmajiem Android tālruņiem līdz jaunākajām versijām, lietotņu pārvaldīto failu izpildes sistēma un formāts ir ievērojami mainījies.. Ja vēlaties uzzināt, kam paredzēti .art faili, kā tie atšķiras no vecajiem ODEX failiem, kāda loma ir tā sauktajam ELF vai vienkārši saprast, kas notiek katru reizi, kad instalējat vai atverat lietotni, Šajā rakstā mēs jums visu pastāstīsim, bez liekām tehniskām detaļām un skaidri.. Pat ja esat zinātkārs lietotājs bez izstrādes pieredzes, jūs atklāsiet daudz detaļu, kas jūs noteikti pārsteigs!
Kas ir Android Runtime (ART) un kā tas radās?

Līdz aptuveni Android 4.4 KitKat versijai Google operētājsistēma izmantoja Dalvik kā galveno virtuālo mašīnu, kas bija atbildīga par Java izstrādātu lietojumprogrammu interpretēšanu un izpildi. Tomēr Dalvik bija daži veiktspējas un efektivitātes ierobežojumi, īpaši katras lietotnes koda kompilēšanā tieši laikā (JIT) katru reizi, kad tā tika atvērta. Android Runtime, kas pazīstams ar akronīmu ART, ir izpildes vide, kas tika atjaunota un aizstāta ar Dalvik, sākot ar Android 5.0 Lollipop, lai gan tā jau bija neobligāta KitKat pēdējā posmā..
ART revolucionizē Android lietotņu kompilēšanas un darbības veidu: sistēma pāriet no JIT kompilācijas uz pirmstermiņa (AOT) kompilāciju, lietotnes instalēšanas laikā ģenerējot ierīcei specifiskus mašīnkoda failus.. Tādā veidā, atverot lietojumprogrammu ART vidē, sistēmai jau ir ģenerēts vietējais kods, un tai nav jākompilē svarīgas daļas acumirklī, kas nozīmē Mazāks procesora patēriņš, daudz ātrāka izpilde un ievērojams akumulatora enerģijas ietaupījums.
Turklāt, ART ir atpakaļsaderīgs ar Dalvik .dex baitkoda formātu., tāpēc lietotnes, kas ir iepakotas APK failos un paredzētas vecākai virtuālajai mašīnai, joprojām darbojas, taču iekšējais konvertēšanas, izpildes un optimizācijas process radikāli mainās.
Kas ir .art fails un kā tas iederas šajā arhitektūrā?

Lai patiesi saprastu, kam paredzēti Android Runtime .art faili, vispirms tie jāaplūko katras Android lietotnes struktūras kontekstā:
- Lietotņu pirmkods (Java vai Kotlin) tiek kompilēts Java baitkodā, ģenerējot .class failus.
- Viss šis baitkods tiek pārveidots un saspiests .dex (Dalvik Executable) formātā, kas ir katrā APK failā (standarta Android lietotņu instalētājā) iekļautais fails “classes.dex”.
- Tāpēc APK ir saspiesta pakotne, kas ietver .dex failu, resursus, attēlus, manifestu un citus komponentus.
- Atkarībā no sistēmas darbības principa, izmantojot Dalvik, .dex fails tiek nepārtraukti pārkompilēts JIT procesa laikā un ģenerē .odex failus, lai saglabātu “optimizēto” kodu.
- Tomēr ART izmanto atšķirīgu stratēģiju: lietotnes instalēšanas laikā sistēma kompilē .dex failu vietējā mašīnkodā un izveido failus .oat un/vai .art formātā (atkarībā no Android versijas)., kas satur optimizētu kodu un datu struktūras, kas nepieciešamas, lai lietotne darbotos tieši, bez turpmākas reāllaika kompilācijas.
Konkrētāk, .art faili (Android Runtime) ir faili, kas iegūti no iepriekšējās kompilācijas, ko ģenerējis rīks. dex2oat, un var saturēt gan izpildāmo kodu ELF (izpildāmā un saistāmā formātā), gan papildu informāciju par virtuālās mašīnas attēlu un datus no iepriekš kompilētām klasēm.
Kam tiek izmantoti .art faili un kādu labumu tie sniedz gan lietotājam, gan izstrādātājam?
.art failu esamībai ir vairākas tiešas sekas un priekšrocības gan Android lietotājiem, gan izstrādātājiem.:
- Labāka lietotņu veiktspējaPateicoties AOT kompilācijai, kas notiek katras lietojumprogrammas instalēšanas laikā, visu funkciju palaišana un izpilde ir daudz ātrāka, jo kods jau ir gatavs darbināšanai jūsu ierīces arhitektūrā (ARM, x86 utt.).
- Mazāks resursu un akumulatora patēriņšNovēršot nepieciešamību pastāvīgi kompilēt kodu lietošanas laikā, kā to darīja Dalvik, procesors strādā mazāk, radot mazāk siltuma un patērējot mazāk enerģijas.
- Samazināta latentuma pakāpe, atverot vai pārslēdzoties starp lietotnēmOperētājsistēmai nav jāgaida, kamēr baitkoda daļas tiek pārkompilētas, kas uzlabo pieredzi un plūstamību.
- Lielāka drošība un kontroleART ievieš daudz stingrāku koda pārbaudi nekā Dalvik, samazinot ļaunprātīga vai nederīga koda izpildes iespējamību.
- Labāka atkļūdošana un kļūdu izsekošanaTā kā kods jau ir analizēts un kompilēts, Android Runtime var nodrošināt skaidrākus un detalizētākus izsekošanas datus un kļūdu ziņojumus.
Protams, kā pretstats, .art un .oat faili aizņem vairāk vietas iekšējā atmiņā jo tie jau satur visu mašīnkodu, un Lietotnes instalēšanas process var aizņemt nedaudz ilgāku laiku nekā vecākās Android versijās, lai gan mūsdienās tas ir kaut kas nemanāms gandrīz visiem lietotājiem.
Atšķirības starp .art, .oat, .odex, .dex un ELF failiem: ko nozīmē katrs no tiem?
Iespējams, viens no biežāk uzdotajiem jautājumiem, pētot Android Runtime, ir atšķirība starp vairākiem failu formātiem, kas var parādīties sistēmā. Skaidri paskaidrosim vienkāršā veidā:
- .dex (Dalvik izpildāmais fails): ir starpposma formāts, kas satur Java/Kotlin lietotņu baitkodu. Katram APK failam ir vismaz viens .dex fails (parasti “classes.dex”).
- .odex (optimizēts Dalvik izpildfails): faili, ko Dalvik ģenerē lietotnes optimizācijas un izpildes laikā, saglabājot jau kompilētus koda fragmentus, lai paātrinātu startēšanu nākamajās izpildēs. Tie bija īpaši aktuāli sistēmās pirms Lollipop un tiek noņemti līdz ar ART parādīšanos.
- .oat (optimizēta Android māksla): formāts, ko ieviesa ART, mūsdienu .odex ekvivalents, kas var saturēt gan vietējo kodu ELF formātā, gan optimizētas klases struktūras un metadatus. Tie ir atrodami modernās sistēmas versijās, īpaši /data/dalvik-cache direktorijos vai lietotņu mapēs.
- .art: ir Android Runtime virtuālās mašīnas attēla fails. Parasti tas atrodas sistēmas direktorijos, piemēram, /system/framework, un satur iepriekš kompilētu klašu un struktūru attēlu, kas nepieciešams, lai virtuālā mašīna darbotos un startētos ātrāk.
- ELF (izpildāms un saistāms formāts): ir izpildāmo failu standarta formāts Linux/Android sistēmās. ART programmā lietotnes instalēšanas laikā ģenerētais mašīnas kods tiek glabāts ELF failos, kas ir iegulti .oat vai citos failos.
Lai gan ODEX pazūd ART, OAT un ART (attēlu) faili kļūst nepieciešami jebkuras lietotnes efektīvai palaišanai un izpildei operētājsistēmā Android Lollipop un jaunākās versijās..
Kā notiek process no lietotnes programmēšanas brīža līdz tās palaišanai operētājsistēmā Android?
Apskatīsim precīzus soļus, ko Android lietojumprogramma veic no brīža, kad to uzrakstāt, līdz brīdim, kad varat to atvērt savā mobilajā tālrunī, atšķirot to, kas notiek Dalvik un ART.:
- Kods ir rakstīts Java vai Kotlin, parasti Android Studio lietotnē.
- Java kompilators ģenerē failus .klase ar standarta Java baitkodu.
- Android būvēšanas sistēma (Gradle un būvēšanas rīki) pārveido visus .class failus par .dex fails attiecas.
- aapt (Android Asset Packaging Tool) iepakošanas rīks apvieno .dex, resursus, manifestu un citus failus vienā APK parakstīts un saskaņots.
- Kad instalējat šo APK savā ierīcē:
- Ja skrien Dalvik (Android 4.4 vai vecākā versijā) sistēma dekompresē .dex failu un katru reizi, kad atverat lietojumprogrammu, to daļēji kompilē mašīnkodā, ģenerējot .odex (optimizētu Dalvik izpildāmo failu) kešatmiņai.
- Ja skrien ART (Android 5.0 vai jaunākā versijā) instalēšanas laikā rīks dex2oat ģenerē .oat un .art failus, kompilē visu baitkodu jūsu procesora dzimtajā kodā un saglabā to ELF formātā .oat failā kopā ar izpildei nepieciešamajām struktūrām. Tādā veidā, nākamreiz atverot lietotni, Tas sāksies gandrīz acumirklī un būs gatavs lietošanai..
Šīs darbplūsmas izmaiņas ļauj Daudz optimizētāka veiktspēja, viedāka atmiņas izmantošana un iespēja paginēt (pārvietot uz disku) retāk izmantotas koda daļas, ko Dalvik nevarēja izdarīt tik efektīvi..
Kur ierīcē atrodas .art un .oat faili?
Ja kādreiz esat pārlūkojis Android iekšējo sistēmu (ar root atļaujām vai emulatoros), iespējams, esat redzējis tādus direktorijus kā /data/dalvik-cache vai /system/framework. Šeit atrodas lielākā daļa sistēmas ģenerēto .art un .oat failu.. Katrai lietotnei ir savs atbilstošs kešatmiņas fails, kura nosaukumi un ceļi ir atvasināti no sākotnējā APK faila.
Jaunākās Android sistēmās .art failos parasti ir iekļauts izpildlaika attēls, savukārt .oat failos ir optimizēts mašīnas kods, abi ELF formātā. Šie faili ir ļoti svarīgi, lai ART virtuālā mašīna ātri startētos un lietotnes darbotos bez sastrēgumiem..
ART galvenās priekšrocības un trūkumi salīdzinājumā ar Dalvik un ODEX
Pāreja no Dalvik uz ART iezīmēja pagrieziena punktu Android vēsturē. Skaidri aplūkosim, kādas ir šīs izmaiņas sniegtās priekšrocības un izaicinājumi.:
- veiktspēju un efektivitātiART ievērojami samazina lietotnes palaišanas laiku un panāk stabilāku un plūstošāku izpildi. Dalvik, izmantojot JIT kompilāciju, sodīja ātrumu katru reizi, kad bija jāpalaiž lietotne, īpaši, ja tai bija daudz funkciju vai klašu.
- Enerģijas patēriņšSamazinātā nepieciešamība kompilēt acumirklī ietaupa akumulatora darbības laiku un rada mazāk siltuma ierīcē, atšķirībā no Dalvik.
- Vairāk vietas diskāSaglabājot jau ģenerēto vietējo kodu, lietotnes aizņem vairāk iekšējās vietas jūsu mobilajā tālrunī vai planšetdatorā. Tiek lēsts, ka vidējais pieaugums ir līdz pat 20% salīdzinājumā ar vecākām sistēmām.
- Lēnāka uzstādīšana- Pilns analīzes un kompilācijas process lietotnes instalēšanas laikā var aizņemt dažas sekundes ilgāk nekā iepriekš, kas ir vairāk pamanāms vecākās ierīcēs. Tomēr tas ir laiks, kas tiek ieguldīts tikai vienreiz un pēc tam atgūts ar katru lietošanas reizi.
- Uzlabota verifikācija un drošībaART nepieļauj noteiktas programmēšanas prakses, kuras Dalvik pieļāva, kas uzlabo sistēmas kopējo noturību. Piemēram, tas noraida nederīgu baitkodu, kas ģenerēts ar nesaderīgiem apmulsināšanas rīkiem vai riskantām praksēm, piespiežot izstrādātājus ievērot labu praksi.