1. Introducere Android este o platforma software i un sistem de operare pentru dispozitive i telefoane mobile bazat pe nucleul Linux, dezvoltat iniial de compania Google, iar mai trziu de consoriul comercial Open Handset Alliance. Android permite dezvoltatorilor s scrie cod gestionat n limbajul Java, controlnd dispozitivul prin intermediul bibliotecilor Java dezvoltate de Google. Aplicaiile scrise n C i n alte limbaje pot fi compilate n cod main ARMi executate, dar acest model de dezvoltare nu este sprijinit oficial de ctre Google. Lansarea platformei Android la 5 noiembrie 2007 a fost anunat prin fondarea Open Handset Alliance, un consoriu de 48 de companii de hardware, software i de telecomunicaii, consacrat dezvoltrii de standarde deschise pentru dispozitive mobile. Google a lansat cea mai mare parte a codului Android sub licena Apache, o licen de tip free-software i open source. Versiuni Android: Cupcake (1.5, Aprilie 2009) Donat (1.6, Septembrie 2009) Eclair (2.x, Octombrie 2009-Ianuarie 2010) Froyo (2.2.x, Mai 2010 - Noiembrie 2011), 2.6.32, Nexus One Gingerbread (2.3.x, Decembrie 2010 - Septembrie 2011) Honeycomb (3.x, Februarie 2011-Februarie 2012) Ice Cream Sandwich (4.0.x, Octombrie 2011-Martie 2012) Jelly Bean (planificat pentru al treilea trimestru 2012) Key Lime Pie (2013)
Sistemul Android poate fi folosit pentru: Aplicatii framework, permite refolosirea i nlocuirea de componentelor soft Telefonie GSM, dependenta de hardware Masina virtula Dalvik, optimizata speciala pentru dispozitive mobile Bluetooth, EDGE, 3G, si WiFi, dependente de hardware Web-browser integrat, bazat pe WebKit open source Camera, GPS, busola si accelerometru , dependente de hardware SQLite, pentru stocarea de date Suport media, cuprinde formatele obisnuite audio, video si imaginilor. Cuprinde formatele (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF) Optimizari grafice, 2D bazata pe o librarie de grafica 2D performanta 3D bazata pe libraria OpenGL ES (1.0), optional poate cuprinde si accelerare hardware Mediu de dezvoltare, include emulatoare de dipozitive, unelete pentru debug si plug-in pentru Eclipse IDE
3
2. Arhitectura sistemului Android Componentele hardware ale unui smartphone
Microprocesor: Arhitectura RISC(Reduced Instruction Set Computing) de tip ARM(Advance RISC Machine) Instructiuni simple (nu are virgula mobile) Consum redus de energie Scalarea vitezei in functie de necesitati Exemple: Qualcomm MSM 8260nSnapdragon 1.2 GHz dual-core processor; SamsungHummingbird 1 GHz ARM Cortex-A8 processor Coprocesoare Audio/Video: Procesoare specializate pe encodare si decodare audio/video Capacitate de encodare/decodare HD 1080p H.264 Exemple:GeForce Ultra Low Power GPU(in cipsetul Nvidia Tegra) PowerVR SGX535 GPU(in iPhone 4)
Memoria RAM: SDRAM (Synchronus Dynamic Random AccesMemory) DDR1/DDR2(Double Data Rate) Capacitate:32MB-1GB 4
Memoria ROM: Spatiu special read-only Contine imaginea initiala a SO-ului Persista in urma unui Hard Reset
Android este un sistem de operare open source dezvoltat de Google bazat pe kernel-ul Linux 2.6. Kernel-ul Linux a fost ales datorita driverelor existente, memoriei i managementului proceselor, mpreun cu alte servicii de baza pentru sistemul de operare. Pe lng nucleul Linux diferite biblioteci s-au adugat la platforma pentru a sprijini o funcionalitate mai mare. Multe dintre aceste biblioteci provin din proiecte open source. Cu toate acestea, echipa Android a creat propria biblioteca C pentru a rezolva de exemplu problemele legate de licenta. De asemenea, ei au dezvoltat propriul motor de execuie Java, optimizat pentru resursele limitate disponibile pe o platform mobil, numit Dalvik Virtual Machine. In final a fost creat si cadrul de aplicare, pentru a asigura afisarea librariilor intr-un mod cat mai clar pentru utilizatori. In continuare vom evidenia diferenele majore dintre un sistem standard de operare Linux i Android.
1. UX: Stratul UX al Android este mult mai avansat dect Linux. Este optimizat pentru touch screen si expune un set foarte bogat de API-uri pe care un dezvoltator le poate utiliza cu uurin. Linux pe de alt parte, are o multitudine de diferite biblioteci UI sau o mare varietate de platforme i avnd n vedere c este conceput ca un sistem de operare de baz, lasa integrarea UX la alegerea dezvoltatorului. 2. Suport pentru protocoale de conectivitate: Android are un manager de conectivitate dezvoltat, care include conexiuni wireless prin diverse protocoale. Acest lucru este perfect integrat att la nivelul serviciilor cat i UI i este uor s se extind. 3. Comunitatea de dezvoltatori: Android are un SDK i un proces de publicare bine stabilit pentru noi aplicaii. 4. Java: Android are un JVM optimizat (Dalvik VM), care permite unui programator Java sa scrie aplicaii care funcioneaz eficient pe acesta. Linux pe de alt parte, susine o multitudine de limbaje de programare, dar nu are un JVM la fel de bine optimizat ca cel al Android-ului. 5. Telefonie integrata: Android contine GSM, CDMA, LTE si de asemenea poate asigura apeluri VoIP.
Librarii de baza:
Toate aceste librarii sunt scrise in C/C++: Surface Manager: o Este responsabil cu compunea diferitelor ferestre si afisarea acestora pe eran; o Poate compune diferite ferestre ce sunt detinute de diferite aplicatii, ce ruleaza in procese diferite, toate fiind actualizate in momente diferite; 5
o Se asigura ca pixeli sunt afisati pe eran atunci cand trebuie. Principalele 2 librarii grafice sunt : OpenGL|ES si SGL Aceste 2 librarii pot fi combinate astfel incat sa poata fi folosite in aceeasi aplicatie: OpenGL ES este o librarie 3D: Conine o implementare software care poate fi folosi accelerarea hardware dac dispozitivul are ataat un cip de procesare 3D. SGL este o librarie pentru desene/afisare 2D o Aceasta este libraria cea mai utilizat pentru afisare. MediaFramework o Se bazeaz pe PacketVideo's OpenCORE, poate nregistra i utiliza majoritatea formatelor de date audio i video; o Cuprinde toate codecurile ce alcatuiesc experienta media MPEG4, H.264, MP3, AAC, AMR, JPG si PNG. Fonturi (FreeType) o Curpinde fonturie folosite. SSL SQLite o Libraria folosit pentru a stoca date. WebKit o Motor open source folosit pentru navigarea web, acelasi browser se este folosit de Safari(apple); o Optimizat pentru o functionare foarte bun pe ecrane mici pentru telefoane mobile. Libc o Sistemul de biblioteci standard C .
3. Kernel Arhitectura se bazeaz pe Kernel Linux 2.6. Acesta este folosit pentru interfa dintre componenta software i componenta hardware. Dac dorii s utilizai platform Android pe un nou dispozitiv hardware n prima etap trebuie s instalai Linux i s montai toi driverii. Este folosit Linux deoarece ofer un mediu stabil, cu driveri deja existeni: Exist driveri pentru: Afiaj Camer Memoria Flash Binder(IPC) Tastatur WiFi Audio De asemenea ofer: Gestionarea memoriei; 6
Gestionarea proceselor; Securitate modelului; Gestiunea retelelor; Infrastructura de baz a sistemului de baz robust si garantat de-a lungul timpului. Linux Kernel 2.6 aduce nou: driver-ul alarm, ashmem (Android shared memory driver), binder driver (Inter-Process Communication Interface), gestiune consum, low memory killer, kernel debugger, logger.
Driver-ul alarm implementeaz timere pentru a trezi device-urile din sleep.
Ashmem permite aplicaiilor s partajeze memoria i s o gestioneze la nivel de kernel.
Binder driver asigur comunicarea ntre procese. Un serviciu nregistrat ca un serviciu IPC nu trebuie s se gndeasc la alte thread-uri, pentru c binder-ul le va monitoriza i gestiona. Totodata asigur si sincronizare ntre procese.
Gestiunea consumului este peste Linux Power Management (PM) si implementeaz o politic mai agresiv.
4. Maina virtual Dalvik Dalvik este o main virtual care a fost creat pentru platforma Android. Este numit dup un sat din Islanda i a fost scris prima oar de Dan Bornstein. Spre deosebire de majoritatea mainilor virtuale care sunt pe baz de stiv, arhitectura Dalvik este pe baz de registre. Este optimizat s foloseasc mai puin spaiu. Caracteristicile tuturor sistemelor mobile sunt memoriile RAM mici, procesor cu performane sczute, memorie flash lent, i durat de via limitat a bateriei. Prin urmare, a fost nevoie de o main virtual care poate oferi performane mai bune cu resurse limitate. i aa a aprut Dalvik, proiectat s mearg pe Linux kernel, ce permite pre-procesare pentru execuia mai rapid a aplicaiilor, proceduri de securitate a ID-ului utilizatorului i comunicare ntre procese. Dalvik funcioneaz pe ARM-uri cu resurse limitate, este o arhitectur a procesorului de 32 bit, bazat pe o arhitectur cu set redus de instruciuni, dezvoltat de ARM. Procesoarele ARM( Advanced Risc Machines) sunt folosite datorit arhitecturii simple, ce le face utilizabile pe dispozitive cu putere sczut, cum sunt telefoanele mobile. Arhitectura Dalvik este arhitectur bazat pe regitri, ceea c o face mai rapid i mai eficient pentru a rul codul aplicaiei. Trebuie s foloseasc codul byte Dalvik, n favoarea celui byte Java.
7
Formatul fiierelor .dex Executabilele Dalvik sunt compilate de main virtual Dalvik, i sunt comprimate ntr-un singur fiier de tip pachet android .apk( Android Package). Fiierele .dex pot fi create automat translatand aplicaii compilate, scrise n Java. Fiierul .dex este mprit n diferite seciuni, fiecare din ele fiind de un tip particular.
Anatomia fiierului .dex 8
Conversia din .jar in .dex
5. Sistemul de fiiere
YAFFS este primul sistem de fiiere NAND optimizat petru memoria flash. Memoria flash are un timp de acces mic i este rezistent la ocuri Tipuri de memorie flash: NOR densitate mic, ofer scrieri ncete i citiri rapide NAND cost mic, denistate mare i ofer scrieri rapide i citiri ncete
Dispozitivele mobile folosesc NAND pentru stocare i NOR pentru cod i execuie. Noile sisteme Android folosesc ext4 - dispozitivele folosisc un flash ce apare pentru procesor ca un card SD, kernel-ul tradndu-l ca i un block device. 9
Limitri
tergerea blocurilor
cnd dorim tergerea oricrei memorii, trebuie ters tot blocul ce o conine NAND ofer accesarea oricrei date, dar nu ofer acelai acces pentru rescriere sau tergere Rezolvare: marcarea segmentelor ca dirty, iar cnd tot blocul este dirty se terge complet
Uzura memoriei
exist un numr limitat de cicli terge-scrie Rezolvare: tehnici de scriere uniform sau BBM (Bad Block Management) - verificare scrieri i remaparea sectoarelor defecte.
YAFFS
Yet Another Flash File System, Folosit cu succes pe Linux, WinCE, pSOS, eCos, ThreadX.
10
Caracteristici:
1. Jurnalizare: foloseste log-uri pentru recuperare
2. Garbage collection: optimizat; executat cnd spaiul liber devine foarte mic se alege blocul cu ceva pagini murdare, iar paginile bune se mut pe alt bloc. 3. Cerine mici de memorie 4. Flexibilitate: folosete o definiie general a flash-urilor NAND, putnd fi configurat i customizat pentru alte memorii flash. 5. Portabil, dezvoltat pentru Linux, dar modular i uor de modificat pentru alte sisteme. 6. Robust, este bine testat i folosit n multe produse. 7. Suport POSIX prin directoare, link-uri simbolice i hard.
YAFFS EXT3
Caracteristici:
1. Accesibilitate fiiere: sistemele de fiiere pentru discuri sunt optimizate pentru cutri; device-urile ce folosesc memoria flash nu au latene la cutare i pot accesa fiiere random. 2. Blocarea tergerii: uor s tergi un fiier de pe disc; consumator de timp pentru flash de aceea ar trebui fcut cnd device-ul este idle. 3. Tehnici mpotriva uzurii: numai memoria flash are de a face cu o astfel de problem
6. Gestiunea bateriei
Folosete arhitectura ACPI din Linux, dar difer abordarea folosit ncearc intrarea n suspend to RAM automat (starea ACPI S3) cnd se poate pentru a conserva energie. Are propria extensie Linux (PowerManager). Modulul are drivere pentru controlul perifericelor (display i backlight, lumina tastaturii) accesate prin primitive WakeLocks. PowerManager monitorizeaz viaa bateriei i statusul device-ului. Coordoneaz circuitul de ncrcare i se ocup de nchiderea device-ului cnd bateria ajunge la un pas critic.
Wake lock
11
Dac se ine un wakelock partial, CPU va continua s ruleze, chiar dac utilizatorul vrea s pun device-ul n sleep.
Arhitectura
Gestiunea bateriei pentru Linux
Este necesar reducerea consumului energetic datorit creterii cerinei de putere din partea calculatoarelor i a laptop-urilor. APM (Advanced Power Management) sau ACPI (Advanced Configuration and Power Interface): scalarea voltajelor activare sleep-mode dezactivarea memoriei cache Folosete "runtime PM" n versiunele foarte noi de kernel, pentru a face shutdown la device-uri atunci cand acestea nu sunt folosite. Folosete CPU idle pentru a trece procesorul ntr-o stare de consum redus.
12
7. Dezvoltarea de aplicatii
Pentru a putea dezvolta o aplicatie proprie trebuie sa ne impartim munca in 4 etape principale: Activitatea in sine (Activity) Reprezinta de ferestrele principale de utilizare, de exemplu pentru gestiunea unei adrese de mail avem: lista de mailuri, vizualizarea unui mail individual, un eran de compunere a unui mail nou.
InternReceiver Poate fi folosit pentru a genera mesaje de instiintare atunci cand se schimba un status sau parametri de utilizare (nivel retea...) Poate porni aplicatii in momentul in care exista evenimente ce necesita acele aplicatii. De exemplu atunci cand suna telefonun, se cocteaza la retea sau orice alt moment de timp.
Serviciu (Service) Reprezinta un task, ce nu are o interfata propiu-zisa In general este de o durata mai mare, apare atunci cand dorim sa pornim o melodie (folosind o aplicatie adecvata) si dupa aceea dorim si sa navigm pe internet => aplicatia media player este translatata intr-un serviciu ce va function pe fundal ContentProvider