Iată câteva dintre bibliotecile de nivel scăzut:
- Surface Manager - Android folosește un manager de ferestre compozit similar cu Compiz (Linux), dar mai primitiv. În loc să deseneze grafice direct în buffer-ul de afișare, sistemul trimite comenzi de desenare primite în buffer-ul offscreen, unde acestea sunt acumulate împreună cu altele, formând o compoziție și apoi afișate utilizatorului pe ecran. Acest lucru permite sistemului să creeze efecte interesante fără întreruperi, să realizeze transparența ferestrei și tranziții netede.
- Media Framework - biblioteci implementate pe baza PacketVideo OpenCORE. Cu ajutorul lor, sistemul poate înregistra și reda date audio și video, precum și poate scoate imagini statice. Sunt acceptate multe formate populare, inclusiv MPEG4, H.264, MP3, AAC, AMR, JPG și PNG. În viitor, OpenCORE ar trebui să fie înlocuit cu un cadru Stagefright mai simplu.
- SQLite este un motor de baze de date relaționale ușor și de înaltă performanță, utilizat de Android ca principal motor de bază de date.
- Biblioteci 3D - utilizate pentru desenul extrem de optimizat al graficelor 3D, dacă este posibil accelerare hardware. Implementările lor se bazează pe API-ul OpenGL ES 1.0.
- FreeType este o bibliotecă pentru lucrul cu hărți de biți, precum și pentru rasterizarea fonturilor și efectuarea de operațiuni asupra acestora. Acesta este un motor de înaltă calitate pentru fonturi și redarea textului.
- LibWebCore - biblioteci ale celebrului motor de browser WebKit, folosite și pe desktop browsere Google Chrome și Apple Safari.
- SGL (Skia Graphics Engine) este un motor deschis pentru lucrul cu grafica 2D. Biblioteca de grafică este un produs Google și este adesea folosită în celelalte programe ale acestora.
- SSL - biblioteci pentru suportul protocolului criptografic cu același nume bazat pe OpenSSL.
- libc este o bibliotecă standard în limbaj C similară cu glibc (GNU libc de la Linux) pentru dispozitive mici. Se numește Bionic.
Orez. 1.5.
La același nivel, se află Android Runtime - mediul de execuție a programului aplicației. Componentele sale cheie sunt un set de biblioteci standard și mașină virtuală Dalvik. Fiecare aplicație Android rulează în propria instanță mașină virtuală Dalvik. Astfel, toate procesele care rulează sunt izolate de sistem de operare si unul de altul. Arhitectura Android Runtime este de așa natură încât munca programelor se desfășoară strict în cadrul mediului de mașină virtuală. Datorită acestui fapt, nucleul sistemului de operare este protejat de posibile daune cauzate de celelalte componente ale sale. Prin urmare, codul buggy sau malware nu vor putea corupe sistemul de operare Android și dispozitivul bazat pe acesta. Astfel de functie de protectie, împreună cu execuția codului de program, este una dintre cheile Android Runtime.
Un strat de deasupra este Cadrul de aplicație, uneori denumit stratul de cadru de aplicație. Prin intermediul cadrelor de aplicație, dezvoltatorii obțin acces la API-urile furnizate de componentele de bază ale sistemului. În plus, datorită arhitecturii framework-ului, orice aplicație este prevăzută cu capabilitățile deja implementate ale altor aplicații care au voie să fie accesată. Setul de bază de servicii și sisteme care stau la baza fiecărei aplicații și care fac parte din cadru include:
- Un set bogat și extensibil de vizualizări (Vizualizări) care poate fi folosit pentru a crea componente vizuale ale aplicației, cum ar fi liste, câmpuri de text, tabele, butoane sau chiar un browser web încorporat.
- Furnizori de conținut, care gestionează datele pe care o aplicație le expune alteia, astfel încât să le poată folosi pentru munca lor.
- Manager de resurse, care oferă acces la resurse care nu poartă cod, cum ar fi date șiruri, grafice, fișiere și altele.
- Notification Manager, prin care toate aplicațiile își pot afișa propriile notificări pentru utilizator în bara de stare.
- Managerul de activități, care gestionează ciclurile de viață ale aplicațiilor, stochează datele din istoricul activității și oferă un sistem de navigare pentru acestea.
- Manager de locație, care permite aplicațiilor să primească periodic actualizări privind locația geografică curentă a dispozitivului.
În partea de sus a stivei de software Android se află stratul Aplicații. Acesta include un set de aplicații de bază care este preinstalat pe sistemul de operare Android. De exemplu, include un browser, client de mail, program pentru trimiterea de SMS-uri, hărți, calendar, manager de contacte și multe altele. Lista aplicațiilor integrate poate varia în funcție de modelul dispozitivului și versiuni Android. Și pe lângă acest set de bază, stratul de aplicații include toate aplicațiile de aplicație pentru platforma Android, inclusiv cele instalate de utilizator.
De regulă, aplicațiile pentru Android sunt scrise în Java, dar este posibil să se dezvolte programe în C / C ++ (folosind Native Development Kit). Exoticele pot fi numite utilizarea Basic (folosind Simplu) și alte limbi. Puteți, de asemenea, să vă creați propriile programe folosind creatori de aplicații, cum ar fi App Inventor.
1.6. Caracteristicile kernelului
Nucleul este cea mai importantă parte a sistemului de operare Linux și, spre deosebire de celelalte părți ale sale, a fost portat aproape complet pe sistemul de operare Android. Cu toate acestea, aproximativ 250 de patch-uri au fost aplicate pe nucleu în timpul procesului de portare.
În nucleul sistemului de operare Android, s-a decis să se abandoneze facilitățile de comunicare între procese ale sistemului de operare Linux și să se creeze un singur mecanism numit Binder. Binder permite ca metodele unui proces să fie apelate din interiorul altui proces, transmițându-le argumente și obținând un rezultat, similar modului în care sunt apelate metodele în cadrul aceluiași proces. Binder face această treabă cu o utilizare minimă a memoriei.
Pentru a asigura depanarea pe dispozitive mici, informațiile de depanare au fost adăugate la kernel în port serial și a implementat suport pentru comanda logcat.
Schimbări mari au atins munca cu memorie. Tradiționalul Linux shared memory shmem a fost înlocuit cu ashmem. Aceeași problemă, dar la nivel de memorie fizică, este rezolvată folosind driverul pmem. S-a adăugat un handler special în afara memoriei numit Viking Killer, în cel mai simplu caz, doar oprește procesul, dar pot fi specificate reguli mai complexe.
Noi setări de securitate au fost adăugate la stiva de rețea, suport pentru Sistemul de fișiere pentru media flash, YAFFS2 este inclus în nucleu.
1.7. Mașină Java Dalvik
Dalvik Virtual Machine face parte din mobil Platforme Android. Acest mașină virtuală de Dan Bronstein. Se răspândește ca software gratuit sub licența Apache 2.0 compatibilă cu BSD. În mare măsură, acest fapt a jucat un rol în Soluție Google drop JME (Java Micro Edition), care ar trebui să fie licențiat de la Sun. Prin urmare, o corporație al cărei scop a fost să creeze un sistem de operare deschis și-a dezvoltat propria mașină virtuală.
Spre deosebire de majoritatea mașinilor virtuale (aceeași mașină virtuală Java), care sunt orientate spre stivă, Dalvik este orientat pe cazuri, ceea ce nu poate fi numit o soluție standard. Pe de altă parte, este foarte potrivit pentru a lucra pe procesoare cu arhitectură RISC, care includ procesoare ARM, care sunt utilizate pe scară largă în dispozitive mobile Oh.
Dalvik a fost conceput special pentru platforma Android. S-a luat în considerare faptul că platforma construiește toate procesele ca fiind izolate, fiecare rulând în propriul spațiu de adrese. Mașină virtuală optimizat pentru consum redus de memorie și lucru pe hardware mobil. Începând cu Android 2.2., Dalvik folosește compilarea JIT (just-in-time). Ca urmare a acestor caracteristici, un rapid și productiv mașină virtuală, care nu poate decât să afecteze funcționarea aplicațiilor în general.
Dalvik folosește propriul bytecode. Când se dezvoltă aplicații pentru Android, acestea sunt traduse de compilator într-un cod special de nivel scăzut, independent de mașină. Când este executat pe o platformă, Dalvik este cel care interpretează și execută un astfel de program.
În plus, Dalvik este capabil să traducă codurile de octet Java în coduri în format nativ și, de asemenea, să le execute în propriile sale mediu virtual. Cod program scris în Java, iar după compilare, totul. Fișierele de clasă sunt convertite în format .dex (potrivit pentru interpretare de către Dalvik) folosind utilitarul special dx inclus cu Android SDK.
1.8. Bionic
Bionic este o bibliotecă de apeluri standard C distribuită sub licența Berkeley Software Distribution (BSD). softwareîn codurile sursă, creat pentru schimbul de experiență între instituțiile de învățământ) și dezvoltat de Google pentru Android. Bionic nu are unele funcții POSIX non-Android disponibile în implementarea completă a glibc.
Principalele diferențe ale bionicului:
- Licențe BSD: Android folosește nucleul Linux, care se află sub Licența publică generală GNU (GPL), dar Google a ales să izoleze aplicațiile Android de efectele GPL. Libc-ul GNU care este utilizat în mod obișnuit cu nucleul Linux este licențiat sub GNU LGPL ca alternativă la uClibc.
- dimensiune mică: codul obiect bionic este mult mai mic (de aproximativ 2 ori) decât glibc și ceva mai mic decât uclibc.
- bionic este destinat procesoarelor cu viteze de ceas relativ mici.
- o implementare trunchiată, dar eficientă a firelor de execuție POSIX.
1.9. Prezentare generală a interfețelor de programare a aplicațiilor Java
Pentru programatorul de aplicații Android, un set de interfețe în limbajul Java. Să vedem cum este organizat. Setul se bazează pe pachete incluse în standardul limbajului Java, cum ar fi java.util, java.lang, java.io . Sunt disponibile pe orice platformă unde aplicațiile java pot fi rulate și nu sunt specifice Android. Acestea sunt alăturate de extensii care nu sunt incluse în standardul de limbă, dar au fost standard de facto de mult timp - pachetele javax.net , javax.xml .
De asemenea, în Android sunt incluse extensii Java mai puțin obișnuite - pachetul org.apache.http, cea mai solidă implementare a protocolului HTTP. Pachetul org.json este responsabil pentru serializarea obiectelor JavaScript și pentru suportul tehnologiei AJAX. Pachetul org.w3c.dom oferă model de obiect document
Este posibil ca anumite modele de tablete Android să nu aibă unele dintre elementele enumerate mai sus.
Toate tabletele „android” sunt controlate de una dintre versiunile sistemului de operare mobil de la Google. Cu toate acestea, este posibil ca versiunile mai vechi să nu accepte unele dintre aplicațiile moderne.
Toate versiunile celui mai popular sistem de operare mobil au o bază comună. Ne putem gândi la sistemul de operare Android ca la o structură stratificată. Inginerii informatici o numesc stiva de software. Elementele din partea de sus a stivei sunt ceea ce vede utilizatorul în timpul interacțiunii sale cu sistemul de operare. În „partea de jos” a stivei se află acele părți ale sistemului de operare care interacționează direct cu hardware-ul dispozitivului.
Deci, la cel mai de jos nivel se află componentele hardware în sine: procesoare, senzori, fire și plăci de circuite imprimate. Următorul strat este nucleul sistemului de operare. Nucleul este uneori denumit și software încorporat (sau proprietar). Definiția engleză a „firmware” este mai cunoscută. Acest software controlează resursele hardware ale dispozitivului, le gestionează și le distribuie.
Această parte a sistemului de operare „traduce” în limba componentelor hardware acele comenzi pe care utilizatorul le dă printr-un mod convenabil. GUI. Sistemul de operare Linux 2.6 open source a devenit exemplul de nucleu pentru Android.
Deasupra nucleului sistemului de operare se află bibliotecile Android. Sunt seturi de instrucțiuni pe care dispozitivul le urmează în procesul de prelucrare a diferitelor tipuri de date. Un exemplu este Biblioteca de orientare 3D. Conține toate instrucțiunile de care are nevoie un dispozitiv Android pentru a recunoaște și a răspunde la modificările poziției sale în spațiu.
La același nivel al stivei de software se află bibliotecile rădăcină necesare pentru a susține aplicațiile scrise în limbajul Java. Java este un limbaj de programare de la Sun Microsystems. Până de curând, telefoanele cu suport pentru aplicații Java erau foarte comune. În zilele noastre, acestea sunt din ce în ce mai mult înlocuite de smartphone-uri.
Mașina virtuală Android se află la același nivel al stivei de software a sistemului de operare. Această bucată de software se ocupă cu crearea unui mediu de operare virtual, altfel cunoscut ca mediu de operare virtual. O mașină virtuală simulează un dispozitiv fizic cu un sistem de operare separat. Google a proiectat acest strat astfel încât fiecare aplicație care rulează pe sistemul de operare Android să funcționeze ca un proces separat. În acest fel, dacă unul dintre procesele care rulează eșuează, restul va rămâne neafectat. Mașina virtuală joacă, de asemenea, rolul unui manager de memorie.
Următorul strat este cadrul de aplicare. Este baza pentru toate aplicațiile dispozitivului „android”. Infrastructura aplicațiilor este legătura dintre aplicații și restul sistemului de operare.
Google încurajează dezvoltatorii să creeze aplicații care interacționează cu acest strat în cadrul interfeței de programare a aplicațiilor () dezvoltată de sistemul de operare al gigantului de căutare. Dezvoltatorii trebuie doar să se familiarizeze cu aceste reguli legate de API. Nu trebuie să se gândească specificatii tehnice fiecare tabletă „android”.
Cel mai nivel superior Stiva de software conține interfața cu utilizatorul și toate aplicațiile tabletei „android”. Este această parte a sistemului de operare pe care utilizatorul o vede constant în fața lui. Dar în spatele acestui strat atractiv și colorat se află o mulțime de cod plictisitor și interesant doar pentru specialiști.
Ca orice alt sistem de operare și alte resurse hardware pentru tabletă.
Sursă de la computer.howstuffworks.com
#fapte | Cum este organizat Android? Oleg Dovbnya
Sistem de fișiere OS Android
așa că în acest articol, după cum probabil ați ghicit din titlu, vom vorbi despre structura de ansamblu sistem de fișiere Android. Descrierea directoarelor principale, metode de formatare, backup etc.. articolul se adreseaza in principal incepatorilor. Sper că și altora le va face plăcere să o citească.
structura sistemului de fișiere linux
în Android nu există discuri familiare pentru mulți - cum ar fi c sau e. Avem rădăcina sistemului de fișiere: "". toate celelalte directoare sunt atașate la directorul rădăcină. Să luăm în considerare câteva dintre ele:
sistem- după nume puteți deja ghici că fișierele de sistem se află aici (ceva așa cum putem vedea în viespi de la Microsoft c: Windows). Fișierele din acest folder sunt imuabile în mod implicit. Sunt destinate funcționării sistemului de operare. De asemenea, aici sunt aplicații încorporate în sistemul de operare. Dacă obținem drepturi de root, putem face modificările în acest director. Cu toate acestea, acest lucru trebuie făcut cu atenție deoarece fișiere șterse iar folderele nu se vor recupera de la sine. În acest caz, doar intermiterea sau backupul ne va ajuta. Ceva interesant poate fi găsit în folder systemmedia. Arhivat bootanimation.zip Există imagini care alcătuiesc animația atunci când dispozitivul este pornit. Chiar și la rădăcina folderului de sistem, puteți găsi fișierul construi.prop care conține multe setări, de la descrierea dispozitivului la densitatea ecranului (sunt multe aplicații terță parte).ecran
Date- spre deosebire de sisteme, acestea sunt stocate aici fișiere mutabile. În subcategorie aplicația doar depozitat apk instalat programele noi. ecran
Dacă avem nevoie de fișierul apk al oricărei aplicații, atunci îl putem găsi cu ușurință acolo. Si in date aceste programe instalate.
Mnt-memoria utilizatorului este montată în această secțiune (dacă, de exemplu, este instalată un card flash). Astfel, dacă punem fișierul nostru txt în rădăcina cardului flash, atunci calea completă va arăta astfel: mntsdcard file.txt". Discul încorporat este montat și aici pentru smartphone-uri fără suport pentru carduri de memorie. ecran
Cum să ștergeți (resetarea din fabrică) pe Android
Există mai multe moduri de formatare. Despre câteva dintre ele mai jos.
1. resetați prin setări. Accesați setări >> restaurare și resetare >> resetare din fabrică. Resetează toate setările și elimină software-ul instalat. Înainte de aceasta, puteți face backup pentru unele setări bifând elementul corespunzător. După repornire, dispozitivul va întreba dacă să restabilească aceste date.
ecran
2. resetare prin recuperare. Util în situația în care dispozitivul nu pornește. Veți avea nevoie de acces root și de o recuperare instalată în consecință. Depinzând de recuperare instalată locațiile pot varia. Am acest articol cu ștergere avansată. Contine:
cache dalvik- formatarea cache-ului mașinii virtuale dalvik.
Sistem- formatarea partiției de sistem.
Date– ștergerea tuturor aplicațiilor terță parte din memoria dispozitivului, precum și a setărilor utilizatorului.
cache - șterge memoria cache
formatați cardul sd– Formatați cardul de memorie. Ștergeți totul de pe cardul de memorie.
format sd-ext– formatarea unei partiții ext pe cardul de memorie (dacă a fost creată o astfel de partiție. De exemplu, pentru a monta scriptul aplicației de referință la instalarea pe card).
3. formatare cu un cod de serviciu. Dacă formați * 2767 * 3855 # . imediat după apelare, acesta va fi resetat. Ai grija.
De exemplu, ștergerea conținutului unui folder date vom șterge setările și datele aplicației, dar nu și aplicațiile în sine. Acest lucru se poate face și din setările aplicației „Ștergeți datele”. Când ștergeți un folder, data va fi ștearsă aplicații instalate.
Dorințe, amendamente, completări la articol, vă rog să lăsați în comentarii sau pe mine într-un personal. articolul va fi actualizat. Mulțumesc cititorilor, mult succes.
-----------------
Puteți lăsa comentarii în secțiunea Catalog de articole
- Traducere
În acest articol, ne vom uita la arhitectura aplicațiilor Android.
Sincer să fiu, nu mi se pare de ajutor Google oficial pe acest subiect. În timp ce răspunde la întrebarea „cum” în detaliu, nu explică deloc „ce” și „de ce”. Așa că iată versiunea mea și sper că va aduce puțină claritate. Apropo, aprob total citirea articolelor Google așa cum le conțin Informatii utile pe care nu am de gând să-l repet.
Arhitectura sistemului de operare Android - un pic de istorie
Așa cum este adesea cazul în IT, multe lucruri nu pot fi explicate izolat de istoria unui anumit software. De aceea trebuie să ne întoarcem la originile sistemului de operare Android.Dezvoltarea sistemului de operare Android a fost începută în 2003 de o companie tânără numită Android Inc. În 2005, această companie a fost cumpărată de Google. Consider că principalele caracteristici ale arhitecturii Android au fost definite în această perioadă. Acesta nu este doar meritul Android Inc; conceptele arhitecturale și resursele financiare ale Google au avut o influență decisivă asupra arhitecturii Android. În continuare, voi da câteva exemple.
Dacă vă amintiți, anii 2003-2005 au fost marcați de o atenție sporită acordată aplicațiilor AJAX. Cred că acest lucru a avut un impact fundamental asupra arhitecturii Android: în multe privințe este mai aproape de arhitectura unei aplicații tipice AJAX decât de o aplicație desktop GUI scrisă în Java, C#, C++, VB etc.
Nu știu de ce sa întâmplat. Bănuiesc că cineva de la Google a venit cu asta într-un moment în care Rich Internet Applications (RIA) era în sensul documente Google sau Gmail au fost considerate soluția tuturor problemelor. Nu cred că această idee este bună sau rea. Nu uitați că aplicațiile Android sunt foarte diferite de aplicațiile desktop.
Influența filozofiei arhitecturale Eclipse este vizibilă în alegerea principiului implementării GUI, care seamănă mai mult cu SWT decât Swing.
Standardele de proiectare a codului Android includ „notația maghiară”, născută între zidurile MS. Se poate presupune că persoana care a scris aceste standarde a dezvoltat anterior sub Windows.
Niveluri arhitecturale Android
Sistemul de operare Android are trei straturi foarte diferite și foarte separate:- Se bazează pe o versiune modificată și redusă de Linux, așa cum am menționat într-unul dintre articolele mele anterioare.
- Deasupra stratului Linux se află stratul de infrastructură a aplicațiilor, care conține mașina virtuală Dalvik, browser web, baza de date SQLite, câteva „cârje” de infrastructură și API-ul Java.
- Și, în sfârșit, nivelul scris în Google Android Apps. În general, ele reprezintă o extensie a stratului de infrastructură, deoarece dezvoltatorul poate folosi aceste aplicații sau părți ale acestora ca blocuri de construcție pentru propriile dezvoltări.
nivelul Linux
Imaginează-ți că ești arhitect într-o companie tânără. Trebuie să dezvoltați un sistem de operare pentru un nou tip de dispozitiv. Ceea ce ai de gând să faci?În linii mari, ai două moduri: să-ți implementezi propriile idei, pornind de la zero, sau să folosești un sistem de operare existent și să-l adaptezi la dispozitivele tale.
Implementarea de la zero sună întotdeauna interesantă pentru programatori. În aceste momente, cu toții credem că de data aceasta vom face totul mai bine decât fac alții și chiar mai bine decât am făcut noi înșine înainte.
Cu toate acestea, acest lucru nu este întotdeauna practic. De exemplu, utilizarea nucleului Linux a redus semnificativ costul de dezvoltare (poate undeva deja excesiv de mare). De acord, dacă cineva decide să creeze ceva care să semene cu nucleul Linux în starea sa actuală, va avea nevoie de câteva milioane de dolari.
Dacă rulați Android Inc, atunci prin definiție nu puteți avea atât de mulți bani. Dacă rulați Google, atunci aveți astfel de bani, dar cel mai probabil vă veți gândi de două ori înainte de a-i cheltui pentru a vă crea propriul sistem de operare. De asemenea, vă va dura câțiva ani pentru a ajunge unde este Linux astăzi; câțiva ani de întârziere poate fi prea târziu pentru a intra pe piață.
Într-o asemenea situație Compania Apple a decis să construiască Mac OS bazat pe FreeBSD. Android Inc a luat decizia de a folosi Linux ca bază pentru Android. Atât sursele FreeBSD, cât și Linux sunt disponibile gratuit și oferă o bază bună pentru orice dezvoltare, fie că este Apple sau Google.
Dar la acel moment nu era posibil să rulezi Linux standard pe un dispozitiv mobil (nu mai este cazul). Dispozitivele aveau prea puțină memorie RAM și memorie non volatila. Procesoarele au fost semnificativ mai lente în comparație cu procesoarele computerelor în care Linux este folosit în mod obișnuit. Ca rezultat, dezvoltatori Android a decis să minimizeze Cerințe de sistem linux.
Dacă te uiți la Linux la un nivel înalt, atunci este o combinație a nucleului (de care nu te poți lipsi) și multe alte părți opționale. Puteți rula chiar și un nucleu, fără nimic altceva. Deci, oricum, Google este forțat să folosească nucleul Linux ca parte a sistemului de operare Android. În plus, au fost luate în considerare piese opționale și dintre acestea au fost selectate cele mai necesare. De exemplu, firewall-ul de rețea IPTables și shell-ul Ash au fost adăugate. Este curios că a fost adăugat Ash, și nu Bash, în ciuda faptului că acesta din urmă este cu un ordin de mărime mai puternic; această decizie s-a bazat probabil pe faptul că Ash este mai puțin pretențios cu resurse.
Dezvoltatorii Android au modificat nucleul Linux pentru a adăuga suport pentru hardware-ul folosit în dispozitivele mobile și, de cele mai multe ori, nu este disponibil pe computere.
Alegerea Linux ca fundație a avut un impact uriaș asupra fiecărui aspect al sistemului de operare Android. Construirea Android este în esență o variație a procesului build-uri Linux. Cod Android este gestionat de git (un instrument conceput pentru a gestiona codul Linux). etc.
Deși toate acestea sunt interesante, cel mai probabil nu veți atinge niciodată toate aceste puncte specifice decât dacă scopul dvs. este pur și simplu să dezvoltați aplicații Android. Singura excepție este să răsfoiți sistemul de fișiere folosind comenzi ash. Principalul lucru pe care trebuie să-l știți atunci când dezvoltați aplicații Android este stratul de infrastructură a aplicațiilor.
Vă puteți întreba, ce se întâmplă dacă aveți nevoie să dezvoltați o aplicație nativă pentru Android? Google descurajează ferm acest lucru. Din punct de vedere tehnic, desigur, acest lucru este posibil, dar în viitor nu veți putea distribui această aplicație într-un mod normal. Deci, gândiți-vă de două ori înainte de a începe dezvoltarea nativă Android, cu excepția cazului în care, desigur, lucrați la Android Open Source Project (AOSP), adică. sistemul de operare Android în sine.
Stratul de infrastructură a aplicațiilor
În ciuda unor asemănări Apple iOSși Android OS, există diferențe semnificative între soluțiile arhitecturale la nivelul infrastructurii ambelor OS.Apple a decis să folosească Objective-C ca limbaj de programare și timp de rulare aplicații iOS. Objective-C arată ca o alegere mai mult sau mai puțin naturală pentru un sistem de operare bazat pe FreeBSD. Vă puteți gândi la Objective-C ca un C++ simplu cu un preprocesor personalizat care adaugă câteva constructe lingvistice specifice. De ce nu poți folosi standardul C++ în care este scris FreeBSD? Mi se pare că motivul este că Apple încearcă să facă totul în stilul său, „Apple”.
Ideea de bază este că aplicațiile iOS sunt scrise mai mult sau mai puțin în aceeași limbă cu sistemul de operare din spatele lor.
Aplicațiile Android sunt foarte diferite în acest sens. Sunt scrise în Java, care este o tehnologie complet diferită de C++ (deși sintaxa este moștenită din C++).
Cred că motivul principal este necesitatea ca aceeași aplicație să ruleze pe hardware diferit. Această problemă este doar pentru sistemul de operare Android; Băieții de la Apple nu au această problemă. iOS rulează doar pe propriul hardware, iar Apple are control deplin asupra întregului proces. Pentru Android, este adevărat invers: Google nu controlează producătorii de hardware. De exemplu, sistemul de operare Android rulează pe procesoare x86, ARM și Atom (comentariile sugerează că x86 include Atom, iar Android rulează pe x86, ARM, PPC și MIPS - nota traducătorului). La nivel binar, aceste arhitecturi sunt incompatibile.
Dacă arhitecții Android ar urma aceeași cale ca și arhitecții de la Apple, dezvoltatorii de aplicații Android ar fi forțați să distribuie mai multe versiuni ale aceleiași aplicații în același timp. Aceasta ar fi o problemă serioasă care ar putea duce la prăbușirea întregului proiect Android.
Pentru ca aceeași aplicație să ruleze pe hardware diferit, Google a folosit o arhitectură bazată pe container. Într-o astfel de arhitectură, codul binar este executat de un container software și izolat de detaliile hardware specifice. Exemplele sunt familiare tuturor - Java și C#. În ambele limbi, codul binar este independent de hardware și este executat de o mașină virtuală.
Desigur, există o altă modalitate de a obține independența hardware la nivel binar. O opțiune este utilizarea unui emulator hardware, cunoscut și sub numele de QEMU. Vă permite să emulați, de exemplu, un dispozitiv cu procesor ARM pe platforma x86 și așa mai departe. Google ar putea folosi C++ ca limbaj pentru dezvoltarea aplicațiilor în interiorul emulatorilor. Într-adevăr, Google utilizează această abordare în cadrul său Emulatori Android, care sunt construite deasupra QEMU.
Este foarte bine că nu au mers pe acea cale, pentru că atunci cineva ar trebui să ruleze sistemul de operare pe un emulator care necesită mult mai multe resurse și, ca urmare, viteza de lucru ar scădea. Pentru a obține cele mai bune performanțe, emularea a fost lăsată doar acolo unde nu a putut fi evitată, în cazul nostru - în aplicațiile Android.
Oricum ar fi, Google a luat decizia de a utiliza Java ca principal limbaj de dezvoltare a aplicațiilor și mediu de rulare.
Cred că a fost o decizie arhitecturală critică care a diferențiat Android de restul sistemelor de operare mobile bazate pe Linux care sunt introduse în prezent. Din câte știu, niciunul dintre ele nu are compatibilitate binară la nivel de aplicație. Să luăm MeeGo ca exemplu. Utilizează C++ și framework-ul Qt; în ciuda faptului că Qt este multiplatformă, necesitatea de a face diferite build-uri pentru diferite platforme nu dispare.
După ce am ales Java, a trebuit să decideți ce mașină virtuală (JVM) să utilizați. Din cauza resurselor limitate, utilizarea JVM-ului standard a fost dificilă. Singura alegere posibilă a fost utilizarea unui Java ME JVM conceput pentru dispozitive mobile. Cu toate acestea, fericirea Google nu ar fi completă fără dezvoltarea propriei mașini virtuale și a apărut Dalvik VM.
Dalvik VM diferă de alte mașini virtuale Java în următoarele moduri:
- Utilizează un format special DEX pentru a stoca coduri binare, spre deosebire de formate JARși Pack200, care sunt standardul pentru alte JVM-uri. Google a declarat că binarele DEX sunt mai mici decât JAR-urile. Cred că ar putea la fel de bine să folosească Pack200, dar au decis să meargă pe drumul lor.
- Dalvik VM este optimizat pentru a rula mai multe procese în același timp.
- VM-ul Dalvik folosește o arhitectură bazată pe registru față de arhitectura bazată pe stivă în alte JVM-uri, rezultând o execuție mai rapidă și binare mai mici.
- Folosește propriul set de instrucțiuni (mai degrabă decât bytecode JVM standard)
- Este posibil să rulați (dacă este necesar) mai multe aplicații independente Android într-un singur proces
- Execuția aplicației poate acoperi mai multe procese Dalvik VM „în mod natural” (vom discuta despre ce înseamnă aceasta mai târziu). Adăugat pentru a sprijini acest lucru:
- Un mecanism special de serializare a obiectelor bazat pe clasele Parcel și Parcelable. Din punct de vedere funcțional, servește același scop ca și Java Serializable, dar rezultatul sunt date mai mici și, potențial, mai tolerante la versiunea de clasă.
- O modalitate specială de a efectua apeluri între procese (apeluri între procese, IPC), bazată pe Android Interface Definition Language (AIDL).
- Înainte de Android 2.2, Dalvik VM nu accepta compilarea JIT, ceea ce a fost un impact serios de performanță. Începând cu versiunea 2.2, viteza de execuție a aplicațiilor frecvent utilizate