II.3. Descrierea Arhitecturii Android … … … . 10 [615477]

1

CUPPRINS ………………………….. ………………………….. ………………………….. ………………………….. ……….. 1
Listă de figuri ………………………….. ………………………….. ………………………….. ………………………….. ……. 2
CAPITOLUL I. Dezvoltarea a plicațiilor mobile ………………………….. ………………………….. …………….. 3
CAPITOLUL II. Sistemul de operare Android ………………………….. ………………………….. ……………….. 5
II.1. Scurtă istorie ………………………….. ………………………….. ………………………….. ………………………….. .. 5
II.2. Dezvoltarea aplicațiilor ………………………….. ………………………….. ………………………….. …………….. 8
II.3. Descrierea Arhitecturii Android ………………………….. ………………………….. ………………………….. . 10
II.3.1 Linux Kernel ………………………….. ………………………….. ………………………….. ……………….. 10
II.3.2 -a Libraries ………………………….. ………………………….. ………………………….. …………………… 10
II.3.2 -b Android Runtime ………………………….. ………………………….. ………………………….. ………. 11
II.3.3 Application Framework ………………………….. ………………………….. ………………………….. … 11
II.3.4 Applications ………………………….. ………………………….. ………………………….. ………………… 12
II.4. Pr ocese și fire de execuție ………………………….. ………………………….. ………………………….. ………. 12
II.4.1. Procese ………………………….. ………………………….. ………………………….. ……………………….. 12
II.4.2. Fire de execuție – Threads ………………………….. ………………………….. …………………………. 13
II.4.3. Apeluri de procedură la distanță ………………………….. ………………………….. …………………. 13
II.5. Stocarea datelor ………………………….. ………………………….. ………………………….. ……………………… 14
II.5.1. Preferences ………………………….. ………………………….. ………………………….. ………………….. 15
II.5.2. Fișiere (Files) ………………………….. ………………………….. ………………………….. …………….. 15
II.5.3. Baze de date ( Databases) ………………………….. ………………………….. ………………………….. 16
II.5.4. Network ………………………….. ………………………….. ………………………….. ……………………… 16
II.6. Cerințe Hardware ………………………….. ………………………….. ………………………….. …………………… 16
II.7. Evoluția Android ………………………….. ………………………….. ………………………….. ……………………. 17
II.8. Viitorul An droidului ………………………….. ………………………….. ………………………….. ………………. 21
CAPITOLUL III. Studiu de caz ………………………….. ………………………….. ………………………….. ……… 22
III.1 Obiectivele aplicației ………………………….. ………………………….. ………………………….. ……………… 22
III.2 Implementare ………………………….. ………………………….. ………………………….. ………………………… 22
III.2.1. Clasa DatabaseHelper ………………………….. ………………………….. ………………………….. …. 24
III.2.2. Crearea tabelelor ………………………….. ………………………….. ………………………….. ………… 25
III.2.3. Clasa folosit ă pentru meniu ………………………….. ………………………….. ………………………. 26
III.2.4. Declarare variabile pentru aplicație ………………………….. ………………………….. ……………. 26
III.2.5 Clasele realizate pentru utilizarea aplicației ………………………….. ………………………….. …. 27
III .3. Aplica ția vExpenseTracker ………………………….. ………………………….. ………………………….. ……. 28
CONCLUZII ………………………….. ………………………….. ………………………….. ………………………….. …… 42
BIBLIOGRAFIE ………………………….. ………………………….. ………………………….. ………………………….. 43

2

Figura nr. 1 Sisteme de operare mobile ………………………….. ………………………….. ………………………….. 3
Figura nr. 2 Dispozitive mobile ………………………….. ………………………….. ………………………….. ………… 4
Figura nr. 3 Structura Android ………………………….. ………………………….. ………………………….. …………. 6
Figura nr. 4 Logo Android ………………………….. ………………………….. ………………………….. ………………. 8
Figura nr. 5 Arhitectura Android ………………………….. ………………………….. ………………………….. …….. 10
Figura nr. 6 AIDL tool ………………………….. ………………………….. ………………………….. …………………. 14
Figura nr. 7 Diferite versiuni de Android ………………………….. ………………………….. ……………………… 17
Figura nr. 8 Afișare sumă ………………………….. ………………………….. ………………………….. ………………. 23
Figura nr. 9 Crearea tabelelor ………………………….. ………………………….. ………………………….. …………. 25
Figura nr. 10 Clasele din pachetu l vExpenseTracker ………………………….. ………………………….. ……… 27
Figura nr. 11 Conectare la PC ………………………….. ………………………….. ………………………….. ………… 28
Figura nr. 12 Copiere fișier .apk ………………………….. ………………………….. ………………………….. …….. 28
Figura nr. 13 Panoul de control al telefonului ………………………….. ………………………….. ……………….. 29
Figura nr. 14 Conectare telefon la PC ………………………….. ………………………….. ………………………….. 29
Figura nr. 15 C opiere fișier APK ………………………….. ………………………….. ………………………….. ……. 29
Figura nr. 16 Iconița aplicației pe telefon ………………………….. ………………………….. …………………….. 30
Figura nr. 17 Interfața inițială a aplicației ………………………….. ………………………….. …………………….. 30
Figura nr. 18 Alocare buget ………………………….. ………………………….. ………………………….. ……………. 31
Figura nr. 19 Creare buget nou ………………………….. ………………………….. ………………………….. ……….. 31
Figura nr. 20 L istă de bugete ………………………….. ………………………….. ………………………….. ………….. 33
Figura nr. 21 Opțiuni utilizabile ………………………….. ………………………….. ………………………….. ……… 34
Figura nr. 22 Adaugă tranzacții ………………………….. ………………………….. ………………………….. ………. 35
Figura nr. 23 Vizualizare tranzacții în bugetul Benzină ………………………….. ………………………….. ….. 36
Figura nr. 24 Restart buget ………………………….. ………………………….. ………………………….. …………….. 36
Figura nr. 25 Mod ificare buget existent ………………………….. ………………………….. ……………………….. 38
Figura nr. 26 Șterge buget ………………………….. ………………………….. ………………………….. ……………… 39
Figura nr. 27 Cheltuieli ………………………….. ………………………….. ………………………….. …………………. 40
Figura nr. 28 Afișare sume în funcție de cheltuieli ………………………….. ………………………….. ………… 41

3

Comunicarea în zilele noastre este din ce în ce mai importantă , iar nevoia de a fi mereu în
contact cu ceilalți se manifestă în toate activi tățile curente. Această nevoie este sprijinită cu ajutorul
tehnologiei moderne printr -un exponent de seamă – dispozitivele mobile. Telefoanele inteligente
(smartphones) sunt dotate cu sisteme de operare din ce î n ce mai avansa te, deținând un mic univers
al fiecă ruia dintre noi: contacte cu prietenii , agendă telefonică , știri , calendarul întâlniri lor de afaceri,
jocuri, dietă , alarme… și câte și mai câte…
Platforme mobile precum iOS, Android, BlackBerry și Windows Phone sunt în atenția
marilor dezvoltatori software care au potențialul de a atrage sau a respinge utilizatori , punându -se
mare interes pe calitatea aplicațiilor software a fiecă rei platform e pus e la dispoziție . Dezvoltatorii
sun puși în situația de a ale ge între dezvoltarea aplicațiilor mobile utilizând cod nativ sau opțiunea
de a dezvolta aplicații hibride. Aplicațiile native sunt aplicații le scrise în limbajul de programare
specific platformei pentru care se dezvoltă. În Fig.nr.1 se pot observa câteva d in sistemele de
operare mobile împreună cu limbajul de programare specific, platformele pentru dezvoltare precum
și cu medii de dezvoltare folosite de către programatorii de aplicații mobile1.

Figura nr. 1 Sisteme de operar e mobile
Aplicațiile native pot fi atractive pentru oricine datorită timpului rapid de răspuns și faptului
că aplicația are acces la diferite componente hardware ale dispozitivului (camera foto sau cea
frontală , bluetooth, etc.).
Pentru dezvoltarea unei ap licații pentru dispozitivele mobile trebuie luate în calcu l ambele
modalități de dezvoltare, atât aplicațiile native, cât și aplicațiile hibride.
O aplicație mobilă ( app) este o aplicație software proiectată pentru a rula pe smartphone –
uri, tablete și alte dispozitive mobile wireless [2]. Unele aplicații sunt gratuite, în timp ce altele
trebuie cumpărate. Majoritatea sunt descărcate de pe o platformă a unui anumit dispozitiv, cum ar

1 https://www.todaysoftmag.ro/article/542/dezvoltarea -aplicatiilor -mobile -intre-nativ -si-hibrid

4
fi un iPhone, BlackBerry, telefon cu sistem de operare Android sau un telefon cu sistem de operare
Windows Mobile. O altă modalitate de instalare a aplicațiilor pe dispozitivul dorit este conectarea
acestuia la un laptop sau desktop ce are instalat un software de comunicare cu dispozitivul mobil.

De unde putem desc[ rca aplica ții mobile?
 Pentru telefoane le mobile cu sistem iOS , platforma utilizată pentru descărcarea
aplicațiilor este APP Store, prima platformă, apărută î n iulie 2008 .
 Pentru telefoanele BlackBerry 10 ș i BlackBerry OS a fost creat ă plat forma BlackBerry
World.
 Pentru telefoanele cu Android a fost dezvoltat Google Play, sub denumir ea veche de
Android Market, un program online internațional apărut în octombrie 2008.
Alte platforme sunt: Nokia Store , Windows Phone Store & Windows Store , Samsung Apps
Store .
Termenul ” app” , prescurtare a termenului ”application software” (software de aplicație) , a
devenit tot mai cunoscut , iar în anul 2010 a fost declarat „cuvântul anului” de către Societatea
Americană de Dialect 2. În 2009 David Progue a spus că smartphone -urile mai noi, ar putea fi
poreclite „App Phones” pentru a putea fi distinse de mai puțin sofisticatele smartphone -uri apărute
anterior 3.

Figura nr. 2 Dispozitive mobile
Aplicațiile mobile au fost inițial real izate pentru productivitate și informare, inclusiv e -mail,
calendar, contacte, piața de valori și informații meteo. Cererea publicului și disponibilitatea de
instrumente de dezvoltare au dus la expansiunea rapidă în alte categorii, cum ar fi jocur i pentru
telefoane mobile, GPS ș i servicii bazate pe locație, servicii bancare, achiziții de bilete pentru filme,
transport etc.
Popularitatea aplicațiilor mobile a continuat să crească, deoarece utilizarea lor a devenit din
ce în ce mai răspândită printre utiliz atorii de telefoane mobile. Un studiu comScore realizat în mai
2012 4 a raportat că pe parcursul trimestrului anterior, abonații de telefonie mobilă au folosit mai
mult aplicațiile mobile decât browserele web instalate pe dispozitivele acestora: 51.1% vs. 49.8%.
Aplicațiile mobile joacă un rol din ce în ce mai important și în cadrul asistenței medicale,
iar atunci când sunt proiectate și integrate corect, pot aduce multe beneficii [1].

2 http://www. americandialect.org/app -voted -2010 -word -of-the-year-by-the-american -dialect -society -updated
3 Pogue, David (November 4, 2009). "A Place to Put Your Apps". New York Times. Retrieved January 22, 2013.
4 Perez, Sarah. July 2, 2012. "comScore: In U.S. Mobile M arket, Samsung, Android Top The Charts; Apps Overtake
Web Browsing." techcrunch.com

5

II.1. Scurtă istorie

Android este un sistem de operare mobil dezvoltat de Google, bazat pe kernel -ul Linux și
conceput în primul rând pentru dispozitive mobile touchscreen, cum ar fi smartphone -uri și tablete.
Interfața de utilizator a Andro id se bazează în principal pe manipularea directă, folosind gesturi tactile
care corespund în mod liber acțiunilor din lumea reală, cum ar fi împingerea, atingerea și ciupirea,
manipularea obiectelor pe ecran, împreună cu o tastatură virtuală pentru introd ucerea textului. În plus
față de dispozitivele touchscreen, Google a dezvoltat în continuare Android TV pentru televizoare,
Android Auto pentru mașini și Android Wear pentru ceasuri de mână, fiecare cu o interfață de
utilizator specializată. Variantele de Android sunt de asemenea utilizate pe notebook -uri, console de
jocuri, camere digitale și alte produse electronice 5.
Conform [7] și [10], Android ( un nume desprins din science -fiction ), definește o suită de
aplicații software d estinate dispozitivelor mobile și este d ezvoltat de către OHA (Open Handset
Alliance ), un consorțiu de companii hardware, software și de telecomunicații dedicat avansării
standardelor deschise pentru dispozitivele mobile .
Începând cu primul dispozitiv comercial Android în septembrie 2008, sistemul de operare a
trecut prin mai multe versiuni importante, versiunea curentă fiind de 7.0 ” Nouga t”, lansată în aug ust
2016. Aplicațiile Android (”apps” ) pot fi descărcate de pe Google P lay Care are peste 2,7 milioane
de aplicații începând cu februarie 2017. Android a fost cel mai bine vândut sistem de operare pe
tablete din 2013 și rulează pe marea majoritate a smartphone -urilor. Începând din mai 2 017, Android
are două miliarde de utiliz atori activi lunar și are cea mai mare bază instalată a oricărui sistem de
operare.
Deși numele Android este marcă înregistrată, suita software este de tip open source – cod
sursă disponibil pentru oricine, gratuit. Dezvoltatorii so ftware au acces la codul sursă Android și pot
dezvolta aplicații software pentru acesta fără să plătească. Aplicațiile sunt programate și dezvoltate
în limbajul Java.

Android este structurat pe patru niveluri, enumerate mai jos, de la bază spre vârf:
 Linux kernel ( kernel -ul Lin ux). Pe partea de sus a kernelului Linux, există middleware -ul,
bibliotecile și API -urile scrise în C și software -ul aplicației care rulează pe un cadru de
aplicații care include biblioteci compatibile cu Java. Dezvoltarea kernel -ului Linux continuă
indepe ndent de alte baze de c od sursă ale sistemului Android ;
 Libraries ( librăriile software ). Conțin și modulul “runtime” ce permite rularea proceselor
software pentru aplicațiile Java. Toate procesele sunt rulate în mașini virtuale independente
(Dalvik Virtual Machine) optimizate pentru dispozitivele mobile. Aplicațiile pentru Android
sunt compilate în formatul .dex – Dalvik Executable – ce este rulat de mașinile virtuale în
momentul execuției. Pentru biblioteca Java, platforma Android utilizează un subset al

5 https://en.wikipedia.org/wiki/Android_(operating_system)

6
proiectului Apache Harm ony 6. În decembrie 2015, Google a anunțat că următoarea versiune
de Android va trece la o implementa re Java bazată pe OpenJDK 7;
 Application Framework (cadrul de dezvoltare pentru aplicații ). Conține clasele de obiecte
necesare progr amatorilor în procesul de dezvo ltare al aplicațiilor cum ar fi : clase de obiecte
folosite pentru afișare – View System , clase de obiecte folosite pentru accesare a datelor din
alte aplicații – Content P roviders, etc;
 Applications ( nivelul aplicație ). Aici se găsesc aplicațiile software livrate odată cu sistemul
de operare: clientul email, managerul SMS, managerul de apeluri și contacte, browser -ul web,
etc. Toate aceste aplicații sunt scrise în Java.

Figura nr. 3 Structura Android
Sursa: https://ocw.cs.pub.ro/courses/eim/laboratoare/laborator01

În 2013 , Android folosea kernel -ul Linux 3.10 numai serviciile de bază: managementul
memoriei, managementul proceselor, protocoalele de rețea și modelul de drivere hardware. Ca și în
Linux, kernel -ul servește drept interfață între componentele hardware și nivelurile software
superioare. Spre deosebire de alte sisteme de operare, programatoriii au acces la aceleași funcții API
ca și procesele de sistem, neexistând funcții API ascunse (nedocumentate) așa cum se întâmplă în
Microsoft Windows Phone sau Apple iOS.
Uneltele din SDK -ul Android, compilează codul sursă împreună cu fișierele în care se află
memorate resursele, în arhive ce au extensia *.apk . Tot codul aflat într -o arhivă *.apk este tratat ca o
aplicație unitară ce este instalată ulterior pe dispozitivele ce rulează Android.
Faptul că Android este un sistem de operare cu sursă deschisă și licență gratuită, permite

6 Amadeo, Ron (January 6, 2012). "Android N switches to OpenJDK, Google tells Oracle it is protected by the GPL" /
https://arstechnica.com/tech -policy/2016/01/android -n-switches -to-openjdk -google -tells-oracle -it-is-protected -by-the-
gpl/
7 https://venturebeat.com/2015/12/29/google -confirms -next-android -version -wont -use-oracles -proprietary -java-apis/

7
programatorilor să dezvolte rapid și cu ușurință aplicații care să aducă inovația în utilizarea
dispozitivelor mobile.
Android permite dezvoltatorilor să scrie cod gestionat în limbajul Java, controlând
dispozitivul prin inter mediul bibliotecilor Java dezvoltate de Google. Aplicațiile scrise în C și în alte
limbaje po t fi compilate în cod mașină și executate, dar acest model de dezvoltare nu este sprijinit
oficial de către Google.
La Google, echipa condusă de Rubin a dezv oltat un sistem de operare pentru dispozitive
mobile bazat pe Linux, pe care l -au prezentat producătorilor de telefoane mobile și operatorilor de
rețele de telefonie mobilă, cu perspectiva de a asigura un sistem flexibil, upgradabil. Google a raportat
că a aliniat deja o serie de parteneri producători de componente hardware și software la noul concept,
și a semnalat operatorilor de rețele de telefonie mobilă că era deschis la diferite grade de cooperare
din partea acestora.
În iulie 2005 Google a achiziționat Android Inc. pentru cel puțin 50 de milioane de dolari.
Angajații săi cheie, inclusiv Rubin, Miner și White, s -au alăturat companiei Go ogle ca parte a
achiziției. Nu se știa prea multe despre Android -ul secretiv la vremea respectivă, compania oferind
câteva detalii, altele decât faptul că făcea softwar e pentru telefoane mobile. La Google, echipa
condusă de Rubin a dezvoltat o platformă de dispozitive mobile, alimentată de kernel -ul Linux.
Google a com ercializat platforma pentru factorii de decizie și operatorii de telefonie cu privire la
promisiunea de a furniza un sistem flexibil, care poate fi actualizat. Google a ” aliniat o serie de
componente hardware și parteneri de software și a semnalat tra nsportatorilor că a fost deschis la
diferite grade de cooperare” 8.
Speclația privind intenția Google de a intra pe piața comunicațiilor mobile a continua t să se
dezvo lte până în decembrie 2006. Un prototip timpuriu se aseamăna foarte mult cu un telefon
BlackBerry, fără touchscreen și tastatură QWERTY fizică, dar sosirea Apple iPhone din 2007 a
însemnat că Android ” a trebuit să se întoarcă la planșa de desen ”. Google și -a schimbat ulterior
documentele de specifica ție Android pentru a afirma că ” Touchscreens vor fi acceptate” , deși
”Produsul a fost proiectat cu prezența unor taste fizice discrete ca o ipoteză, prin urmare un
touchscreen nu poate înlocui complet butoanele fizice” 9.
În septembrie 2007 InformationWe ek a publicat un studiu al companiei Evalueserve care
dezvăluia că Google a depus cereri pentru mai multe brevete de invenție în domeniul telefoniei
mobile.
Din 2008, Android a văzut numeroase actualizări care au îmbunătățit treptat sistemul de
operare, ad ăugând noi caracteristici și reparând bug -uri în versiuni anterioare. Fiecare versiune
majoră este denumită în ordine alfabetică după un desert sau un tratament cu zahăr, primele câteva
versiuni Android fiind numite ”Cupcake” , ”Donut ”, ”Eclair ” și, respect iv, ”Froyo ”. În timpul
anunțului lui Android KitKat în 2013, Google a explicat că ”Deoarece aceste dispozitive ne fac viața
atât de dulce, fiecare versiune And roid este numită după un desert” 10.
În 2010, Google a lansat seria de dispozitive Nexus, o linie în care Google a colaborat cu
diferiți producători de dispozitive pentru a produce noi dispozitive și a introduce noi versiuni Android.
Seria a fost descrisă ca având ”un rol esențial în istoria Androidului prin introducerea unor noi
iterații de software ș i standarde hardware peste tot” 11.
La conferința pentru dezvoltatori din mai 2013, Google a anunțat o versiune specială a
Samsung Galaxy S4, în care, în loc să utilizeze propria personalizare Samsung Android, telefonul a
rulat ”Android stock” și a fost pro mis că va primi noul sistem de actualizări rapide 12. Dispozitivul va

8 https://web.archive.org/web/20070821142941/http://online.wsj.com/article/SB118602176520985718.html
9 https://www.theverge.com/2012/4/25/2974843/google -in-2007 -a-touchscreen -cannot -completely -replace –
physical/in/2731667
10 https://en.wikip edia.org/wiki/Android_KitKat
11 https://arstechnica.com/gadgets/2013/05/from -the-nexus -one-to-the-nexus -10-a-brief -history -of-nexus -devices/
12 https://www.theverge.com/2013/5/15/4333716/galaxy -s4-stock -android -google -io-2013

8
deveni începutul programului Google Play edition și va fi urmat de alte dispozitive, inclusiv edițiile
Google Play HTC One13 și ediția Moto G Google Play14.
În 2015, Ars Technica a scris c ă ”La începutul acestei săptămâni, ultima ediție Android a
Google Play a magazinului online Google a fost listată ca ”nu mai es te disponibilă pentru vânzare ”15.
Un raport al informațiilor din ianuarie 201 7 a declarat că Google ”își extinde programul”
Androi d One ” pentru smartphone -uri low -cost în S.U.A. în următoarele luni”16.
Logo -ul pentru sistemul de operare Android este un robot verde de culoarea mărului,
proiectat în California de designer -ul Irina Blok.

Figura nr. 4 Logo 2007 -2014

Figura nr. 5 Logo alternativ

Figura nr. 6 Logo Android

II.2. Dezvoltarea aplicațiilor

Conform [3][5][12] au fost elaborate diferite aprecieri cu privire la dezvoltarea aplicațiilor
pentru platforma Android. Au fost depistat e probleme de bug-uri, lipsă de documentație,
infrastructură de testare inadecvată și lipsa unui sistem de gestionare public a problemelor. Primul
sistem de gestionare a problemelor a fost anunțat de Google la data de 18 ianuarie 2008.
Android este open s ource și Google eliberează codul sub licența Apache . Acest cod open
source și acordarea de licențe permite software -ului să fie modificat gratis și distribuit de către
producătorii de dispozitive fără fir, producătorii de aparatură mobilă și de către dezvo ltatori
entuziaști. În plus, Android are o mare comunitate de dezvoltatori care scriu aplicații (”apps”), ce
extind funcționalitatea dispozitivelor, scrise într -o versiune cu biblioteci personalizate a limbajului
de programare Java , biblioteci dezvoltate d e Google.

13 Cunningham, Andrew (July 4, 20 13). "Review: The HTC One Google Play edition offers the best of both worlds"
14 Cunningham, Andrew (January 14, 2014). "Moto G Google Play edition replaces near -stock Android with stock
Android"
15 Cunningham, Andrew (January 25, 2015). "Don't cry for the G oogle Play edition program; it was already dead"
16 Efrati, Amir (January 17, 2017). "Google's New Stab at Boosting Android Brand in U.S."

9
Android a ajuns să aibă cea mai utilizată platfo rmă pentru smartphone -uri, depăș ind
Symbian în al patrulea trimestru al anului 2010. De asemena acesta devenea sofware -ul de alegere
pentru companiile tehnologice low -cost. Caracterul deschis Andr oid a încurajat în continuare o
mare comunitate de dezvoltatori și entuziaști de a utiliza codul „open source” ca o fundație a
comunității bazată pe proiecte, la care se adaugă noi caracteristici pentru utilizatorii avansați sau
aducerea Android pe dispozi tivele gândite inițial sa ruleze pe alte sisteme de operare.
Aplicațiile (”apps” ), care extind funcționalitatea dispozitivelor, sunt scrise utilizând kitul d e
dezvoltare software (SDK)17 și, adesea, l imbajul de programare Java. Limbajul Java po ate fi
combinat cu C / C++18, împreună cu o gamă de runtime non -implicite car e permit o mai bună
susținere C++. Limba de programare Go este de asemenea acceptată, dar cu un set limitat de
interfețe de progr amare a aplicațiilor (API)19. În mai 2017, Google a anunțat sprijinul pen tru
dezvoltarea aplicațiilor Android în limba de programare Kotlin20.
SDK include un set cuprinzător d e instrumente de dezvoltare , inclusiv un program de
depanare, biblioteci de software, un emulator de telefon bazat pe QEMU, documentație, cod
exemplu și tu toriale. Inițial, mediul de dezvoltare integrat suportat de Google (IDE) a fost Eclipse ,
utilizând pluginul A ndroid Development Tools (ADT).
În decembrie 2014, Google a lansat Android Studio, bazat pe IntelliJ IDEA, ca IDE primar
pentru dezvoltarea de apli cații Android. Alte instrumente de dezvoltare sunt disponibile, inclusiv
un kit nativ de dezvoltare (NDK) pentru ap licații sau extensii în C sau C ++, Google App Inventor,
un mediu vizual pentru programatorii novici și diverse platforme de aplicații web mob ile. În
ianuarie 2014, Google a dezvăluit un cadru bazat pe Apache Cordova pentru transferarea aplicațiilor
web Chrome HTML 5 pe Android, înfășurat într -o coală de aplicație na tivă.
Android are o selecție crescândă de aplicații de la terțe părți, care pot fi achiziționate de
utilizatori prin descărcarea și instalarea fișierului .apk al aplicației (pachet de aplicații Android) sau
prin descărcarea acestora utilizând un program de magazin de aplicații care permite utilizatorilor să
instaleze, să actualizeze și să elimine Aplicații de pe dispozitivele lor. Magazinul Google Play este
magazinul principal de aplicații instalat pe dispozitive Android care respectă cerințele de
compatibilitate Google și licențiază software -ul Google Mobile Services. Magazinul Google Play
permite utilizatorilor să navigheze, să descarce și să actualizeze aplicațiile publicate de Go ogle și
de dezvoltatorii terți. Începând din iulie 2013, există mai mult de un milion de aplicații disponibile
pentr u Android în Magazin Play21 și au fost ins talate peste 50 de miliar de de aplicații. În mai 2017,
există peste un miliard de utilizatori activi pe lună pentru Gmail, Android, Chrome, Google Play și
Google Maps.
Datorită naturii deschise a Androidului, există și o serie de piețe de aplicații pentru Android,
fie pentru a oferi un înlocuitor pentru dispozitivele care nu au permisiunea de a fi livrate cu
Magazinul Google Play, fie să furnizeze aplicații care nu pot fi oferite în Magazinul Google Play
din cauza încălcări i politicilor sau din alte motive. Exemplele acestor magazine au inclus Amazon
Appstore, GetJar și SlideMe. F -Droid, o altă piață alternativă, urmărește să furnizeze numai aplicații
distribuite în l icențe gratuite și open source.
Deoarece dispozitivele Android sunt de obicei alimentate de la baterie, Android este
proiectat pentru a gestiona procesele pentru a menține consumul de energie la minim. Atunci când
o aplicație nu este utilizată, sistemul suspendă funcționarea acesteia. Android gestionează automat
aplicațiile stocate în memorie: câ nd memoria este scăzută, sistemul va începe să închidă invizibil și
automat procesele inactive, începând cu cele care au fost inactive cel mai mult.

17 Mullis, Alex (November 21, 2016). "How to install the Android SDK (Software Development Kit)"
18 https://developer.a ndroid.com/ndk/guides/stable_apis.html
19 https://godoc.org/golang.org/x/mobile/app
20 Miller, Paul (May 17, 2017). "Google is adding Kotlin as an official programming language for Android
development"
21 http://mashable.com/2013/07/24/google -play-1-million/# dk4DcQY5Uiqq

10

II.3. Descrierea Arhitecturii Android

În figura următoare se pot vedea cele 4 niveluri :

Figura nr. 7 Arhitectura Android

II.3.1 Linux Kernel

Conține driver -ele pentru diferitele componente hardware -display, camera, tastatura, memoria
flash, dispozitive audio și este responsabil de gestiunea memoriei, a perifericelor, a disp ozitivelor de
I/O, precum și a consumului de energie . Kernelul, de asemenea, acționeaz ă ca un strat de abstractizare
între hardware și software. Kernel -ul Linux este un kernel monolit, care susține multitaskingul
adevărat (atât în modul de utilizare, cât ș i din ser ia 2.6, în modul kernel ), memoria virtuală, bibliotecile
partajate, încărcarea cererii, copierea pe copie Executabile (prin KSM), gestionarea memoriei, suita
de protocoale Internet.

II.3.2 -a Libraries

Android include un set de biblioteci C / C++ utilizate de diferite componente ale sistemului
Android. Aceste capacități sunt expuse dezvoltatorilor prin intermediul ”Android application
framework” . Bibliotecile conțin codul care oferă principalele funcționalități a le sistemului de operare
Android, fă când legătura între kernel și aplicații. Unele d intre bibliotecile de bază sunt :
 System C – o implementare derivată BSD a sistemului standard de biblioteci C(libc), ajustată
pentru dispozitive bazate pe embedded Linux
 Media Libraries – biblioteci pentru re darea și înregi strarea de conținut audio/video, bazate
pe „PacketVideo’sOpenCORE”. Suportă atât înregistrarea ș i derularea mai multor formate

11
video ș i audio cunoscute, cât și a imaginilor statice în formate MPEG4, MP3, AAC, AMR,
JPG și PNG ,
 Surface Manager – gestionează accesul la subsistemul de afișare 2D și grafică 3D în cadrul
mai multor aplicații,
 LibWebCore – un motor de căutare modern ce rulează atât browserul Android cât și o
vizualizare web
 SGL – stă la baza motorului grafic 2D ,
 Biblioteci 3D – implementare bazată pe OpenGL ES 1.0 APIs; bibliotecile folosesc fie
accelerare hardware 3D în cazurile in care există, fie softul inclus 3D , foarte bine optimizat .
 FreeType – pentru suportul seturilor de caractere ,
 SQLite – bază de date utilizată ca spaț iu de stocare și pentru partajarea datelor specifice
aplicațiilor .
II.3.2 -b Android Runtime

Este mașina virtuală Java care a fost implementată începând cu versiunea 5.0, utilizând un tip
de compilare AOH (Ahead of Time) . Bytecode -ul este executat direct de mediul dispozitivului mobil .
Aplicațiile Android rulează în propriul proces, cu propriul său ex emplu de mașină virtuală Dalvik,
bazată pe un compilator JIT – Just in Time . Dalvik VM execută fișiere în executabil Dalvik (. dex),
format care este optimizat pentru volum minimal al memoriei.VM este pe bază de registru și execută
clasele compilate de un compilator Java, care au fost transformate în format .dex de instrumentul
inclus „DX”. Dalvik VM se bazează pe kernel -ul Linux pentru funcționalitatea de baz ă, cum ar fi
gestionarea nivelului de memorie scăzut.
Android include un set de biblioteci de bază, care oferă cele mai multe dintre funcționalitățile
disponibile în bibliotecile limbajului de programare Java.

II.3.3 Application Framework

Cadrul de aplica ții expune diferite funcționa lități ale SO Android către programatori, pentru
ca aceștia să le poată utiliza în aplicațiile lor. Prin furnizarea unui mediu des chis de dezvoltare Android
oferă dezvoltatorilor posibilitatea de a construi aplicații extrem de bogate și inovatoare. Dezvoltatorii
sunt liberi să profite de hardware, de informațiile privind localizarea cu ajutorul GPS -ului, să execute
servicii de fundal, să seteze alarme, să adauge notificări pentru bara de stare și multe altele.
Dezvoltatorii au a cces deplin la același API utilizate de către aplicațiile de bază. Arhitectura
aplicațiilor este concepută pentru a simplifica reutilizarea componentelor; orice aplicație poate
publica capacitățile sale și orice altă aplicație ar putea face apoi utilizar ea acestor capacități (supuse
unor constrângeri de securitate impuse de cadru). Același mecanism permite componentelor să fie
înlocuit de către utilizator.
La baza tuturor aplicațiilor se află un set de servicii și sisteme, cum ar fi:
 un set bogat de opini i care pot fi folosite pentru a construi o aplicație, inclusiv liste, grile,
casete de text, butoane și chiar un browser web încorporat.
 furnizorii de conținut , care permit aplicațiilor să acceseze date din alte aplicații (cum ar fi
contactele), sau de a î mpărtăși propriile date.
 un manager de resurse , oferind acces la resurse non -cod, cum ar fi siruri de caractere
localizate, grafică și fișiere layout.
 un manager de notificare care permite tuturor aplicațiilor să afișeze alerte personalizate în
bara de st are.
 un manager de activitate care gestionează ciclul de viață al aplicațiilor.

12
II.3.4 Applications

Aplicația Android este livrat cu un set de aplicații de bază, un client de e -mail, programul de
SMS -uri, calendar, hă rți, browser, contacte, ceas și produs e ce pot fi instalate de pe Play Store sau
cele dezvoltate de programatori. Toate cererile sunt scrise folosind limbajul de programare Java.

II.4. Procese și fire de execuție

De multe ori, o aplicație este asemănătoare unui iceberg, fiind mult mai comp lexă decât se
vede sau se percepe de către utilizatorul care interacționează doar cu partea de UI. Acea parte ascunsă
sub interfața grafică este alcătuită din procese și fire de execuție. Mai exact , o aplicație poate fi formată
din mai multe procese, fieca re dintre aceste procese putând să aibă mai multe fire de execuție.
Conform [9], când prima componentă a unei apl icații trebuie să ruleze, Android pornește un
proces Linux pentru aceasta cu un singur fir de execu ție. În mod implicit, toate componentele
aplicației rulează în acest proces și thread. Cu toate acestea, există posibilitatea ca celelalte
componente să ruleze în alte procese, și se pot folosi fire de execuție suplimentare pentru orice proces.

II.4.1. Pr ocese

Toate componentele unei aplicații vor rula într -un singur proces. Procesul în care rulează o
componentă este controlat de fișierul manifest. Atunci când pornește o aplicație, Android va crea un
proces UNIX nou pentru acea aplicație care va conține u n singur fir de execuție (thread). Toate
componentele care vor porni ulterior vor rula în acel thread, denumit și „main thread” sau „UI thread”.
Elementele componente – <activity>, <service>, <receiver>, and <provider> – fiecare au un atribut
proces care poate specifica un proces în care această componentă ar trebui să ruleze. Aceste atribute
pot fi setate astfel încât fiecare componentă rulează în propriul proces, sau ca unele componente să
impărtășească sau nu anumite procese. Ele pot fi, de asemenea, se tate astfel încât componentele
diferitor aplicații să ruleze în același proces – cu condiția ca cererile să împărtășească același ID de
utilizator Linux și să fie semnate de către aceleași autorităț i. Elementul <application> are, de
asemenea, un atribut pr oces, pentru a stabili o valoare implicită care se aplică la toate componentele.
Toate componentele sunt instanțiate în firul principal al procesului specificat și apelurile de
sistem către componentă sunt expediate din acel fir. Nu sunt create subiecte di ferite pentru fiecare
instanță. Prin urmare, metode care răspund la aceste apeluri – metode, cum ar fi View.onKeyDown ()
care raportează acțiunile utilizatorului și notificările ciclului de viață – întotdeauna rulează în firul
principal al procesului. Ace asta înseamnă că nici o componentă nu ar trebui să efectueze operații lungi
sau de blocare (cum ar fi operațiunile de rețele sau bucle de calcul) atunci când sunt solicitate de către
sistem, deoarece acest lucru va bloca orice alte componente, pe parcursul procesului. Puteți realiza
fire separate pentru operațiile îndelungate.
Android poate decide să închidă un proces la un moment dat, dacă memoria este scăzută și
este solicitată de alte procese care sunt mai importante pentru utilizator. Componentele aplic ație care
rulează în procesul anterior, sunt distruse. Aceste procese vor fi reluate ulterior.
Atunci când se decide ce proces trebuie oprit, Android cântărește importanța proceselor
pornite pentru utilizator. De exemplu, oprește mai degrabă un proces ce n u este vizibil pe display
decât un proces cu activități vizibile. Prin urmare decizia de a inchide un proces depinde de starea
componentelor ce rulează în acel moment.
Procesele sunt înca drate în 5 nivele de importanță:
a. Foreground Process . Un proces necesa r la un moment dat (de ex. o activitate care este
folosită de utilizator sau un serviciu legat de activitatea cu care utilizatorul
interacționează).

13
b. Visible Process . Un proces care nu are componente vizibile pe ecran, dar este necesar
pentru componentele c u care interacționează utilizatorul (un proces care are un dialog
pornit în prim -plan).
c. Service Process . Un proces care conține un serviciu și nu e esențial pentru ceea ce este
afișat utilizatorului (un serviciu care redă o muzică în fundal în timp ce util izatorul
folosește altă aplicație).
d. Background Process . Un proces care conține o activitate care momentan nu e vizibilă
utilizatorului. Pentru aceasta, există o listă LRU (least recently used) care este luată în
considerare în importanța unui proces.
e. Empty Process . Un proces care nu are componente active și este pornit pentru a
îmbunătăți timpul de start -up al unei aplicații.

II.4.2. Fire de execuție – Threads

Un proces poate avea mai multe fire de execuție. Atunci când o aplicație e ste pornită, este
creat un proces UNIX, iar în cadrul lui – un singur thread. Aceasta poartă denumirea de „main thread” ,
fiind foarte important deoarece este responsabil de interacțiunea cu utilizatorul .
Chiar dacă o anume a plicați e se limitează doar unui singur proces, probabi l vor fi momente
când vor porni fire de execuție pentru munca de fundal. Deoarece interfața cu utilizatorul trebuie să
răspundă tot timpul rapid acțiunilor acestuia, threadul ce găzduiește o activitate nu ar trebui să
găzduiască tot timpul operațiuni îndel ungate cum ar fi descărcările de pe internet. Orice lucru ce nu
poate fi terminat repede ar trebui î nsărcinat unui thread diferit.
Thread -urile sunt create în cod, folosind obiecte Java „Thread” standard . Android oferă o
serie de clase pentru gestionarea „thread -urilor” – Looper pentru a rula o buclă de mesaj într -un
„thread”, Handler pentru prelucrarea mesajelor și HandlerThread pentru setarea unui „thread” cu o
buclă de mesaje.

II.4.3. Apeluri de procedură la distanță

Android are un mecanism ușor pe ntru apeluri de procedură la distanță (R emote Procedure
Calls / RPC ) – acolo unde o metodă este numită local, dar executată de la distanță (într -un alt proces),
cu orice rezultat întors înapoi apelantului. Aceasta presupune descompunerea apelării metodei ș i a
tuturor datelor ce o însoțesc la un nivel ce poate fi înțeles de către sistemul de operare, transmițând -o
de la procesul local la procesul la distanță, unde apelul este reasamblat. Valorile returnate trebuie să
fie transmise în direcția opusă. Android oferă codul pentru a face acest lucru .
O interfață RPC poate include numai metode. Toate metodele sunt executate sincron
(blocurile metodă locală până la terminarea metodei de la distanță), chiar dacă nu există nici o valoare
returnată.
Pe scurt, mecanismu l funcționează după cum urmează: se începe prin a declara că interfața
RPC care urmează să fie implementată cu ajutorul unui simplu IDL (Interface Definition L anguage).
Din această declaraț ie, instrument AIDL (Android Interface Definition Language ) genereaz ă o
interfață Java, care trebuie sa fie pusă atât la dispoziția procesului de la distanță cât ș i la dispoziția
procesului local. Acesta conține două clase interne, așa cum se arată în diagrama următoare:

14

Figura nr. 8 AIDL tool 22
Clasele interioare au tot codul necesar pentru a administra procedura de apel la distanță
pentru interfața declarată cu IDL. Ambele clase i nterioare implementează interfaț a IBinder . Una
dintre ele este folosită la nivel local și intern de către sist em, iar codul scris o poate ignora. Celălalt,
numit Stub, extinde clasa Binder . În plus față de codul intern pentru efectuarea de apeluri IPC, acesta
conține declarații pentru metodele din interfața RPC declarată.
De obicei, procesul de la distanță va fi g estionat de un serviciu (pentru că un serviciu poate
informa sistemul despre procesul și conexiunile sale cu alte procese). Aceasta dispune atât fișierul
interfață generat de unealta AIDL cât și de subclasa Stub ce pune în aplicare metodele RPC. Clienț ii
serviciului ar avea doar fișierul de interfață generat de unealta de AIDL.

O conexiune între un serviciu și clineții săi este stabilită astfel:
 Clienții serviciului (pe partea local ă) implementează metode onServiceConnected() și
onServiceDisconnected() , astfel încât aceștia să poată fi notificați atunci când se
stabilește o conexiune la distanță cu succes și atunci când se întrerupe. Apoi, pentru a
stabili conexiunea se apelează bindService().
 Serviciile metodei onBind() sunt puse în aplicare pentru a accep ta sau respinge
conexiunea, în funcție de intenție. În cazul în care conexiunea este acceptat ă, se
returnează o instanță de subclasă Stub.
 Dacă serviciul acceptă conexiunea, Android solicită metoda onServiceConnected() , a
clientului și îi atribuie un obiec t IBinder, un proxy pentru subclasa Stub gestionată de
serviciu. Prin intrermediul proxy -ului clientul poate efectua apeluri la distanță.

II.5. Stocarea datelor

În [6] se spune că un sistem de operare de tip desktop oferă un sistem de f ișiere comun pe
care orice aplicație le poate utiliza pentru a stoca fișiere ce pot fi citite de către alte aplicații.
Android folosește un sistem diferit: pe Android, toate datele aplicației (inclusiv fișierele)
sunt folosite numai în cadrul acestei apli cații. Cu toate acestea, Android oferă, de asemenea, o
modalitate standard pentru ca o aplicație să ofere datele ei altor aplicații – prin intermediul
furnizorilor de conținut. Un furnizor de conținut este o componentă opțională a unei aplicații care

22 http://www.linuxtopia.org/online_books/android/devguide/guide/topics/fundamentals.html

15
oferă citire /scriere a datelor aplicației, indiferent de restricțiile pe care le -ar putea impune. Furnizorii
de conținut implementează o sintaxă standard pentru solicitarea și modificarea datelor, precum și
un mecanism standard pentru citirea datelor returnat e. Android furnizează un serie de furnizori de
conținut pentru tipuri de date standard, cum ar fi imagini, audio, fișiere video și informații de contact
personale.
Indiferent dacă se dorește sau nu să se exporte datele aplicației pentru alții, este nevoie de o
modalitate de stocare. Android oferă următoarele patru mecanisme pentru stocarea și oferirea
datelor : Preferences , Files , Databases și Network .

II.5.1. Preferences

„Preferences” este un mecanism ușor folosit pentru a stoca și pentru a prelua perechi cheie –
valoare. Acesta este de obicei folosit pentru a stoca preferințele aplicațiilor, cum ar fi un salut
implicit sau un font de text pentru a fi încărcate atunci când aplicația este pornită. Se apelează
Context.getSharedPreferences (pentru a citi și a s crie valori ). Se asociază un nume pentru setul de
preferințe, care se pot î mpărți cu alte componente în aceeași aplicație, sau utilizează
Activity.getPreferences() cu nici un nume , pentru a le menține private. Între aplicații nu se pot
împărții preferințel e.
Exemplu de setare a preferințelor pentru un calculator (apăsarea tastelor este silențioasă):

import android .app.Activity ;
import android .content .SharedPreferences ;

public class Calc extends Activity {
public static final String PREFS_NAME = "MyPrefsFi le";
. . .

@Override
protected void onCreate (Bundle state ){
super. onCreate (state );
. . .

// Preferințe implicite
SharedPreferences settings = getSharedPreferences (PREFS_NAME , 0);
boolean silent = settings .getBoolean ("silentMode" , false);
setSilent (silent );
}

@Override
protected void onStop (){
super. onStop ();

// Salvează preferințele utilizatorului.
SharedPreferences settings = getSharedPrefer ences (PREFS_NAME , 0);
SharedPreferences .Editor editor = settings .edit();
editor .putBoolean ("silentMode" , mSilentMode );

editor .commit ();
}
}

II.5.2. Fișiere (Files)

Pe un dispozitiv mobil sau pe un mediu de stocare amovibil se pot de asemenea stoca fișiere .
În mod implicit, alte aplicații nu pot accesa aceste fișiere. Un fișier este un ob iect virtual care se

16
transpune î ntr-un document, fotogra fie, o melodie, clip video dar și î n baze de date sau arhive. Tipul
fișierului este da t de formatul său și indică utilizatorului sau sistemului , programul cu care poate fi
deschis.
Pentru a citi date dintr -un fișier, se apelează Context.openFileInput() și i se oferă numele
local și calea fișierului. Returnează un obiect Java standard de tip FileInputStream . Pentru a scrie
într-un fișier, se apelează Context.openFileOutput() oferind numele și calea. Aceasta returneaza un
obiect FileOutputStream . Apelarea acestor metode cu numele și calea de la o altă aplicație nu va
funcționa, se pot accesa d oar fișierele locale.

II.5.3. Baze de date (Databases )

Android API (Application Programming Interface) conține suport pentru crearea și utilizarea
bazelor de date SQLite. Fiecare bază de date aparține numai aplicației ce o crează. QLite este o
bibliotecă C (compactă ) ce implementează funcționalități standard pentru o bază de date relațion ală,
utilizând standardul SQL 92. Dacă Oracle, SQL Server , sunt baze de date proiectate pentru a
gestiona un volum mare de informație, SQLite este o bază de date open -source, folosită pentru a
gestiona informația la nivel local. SQLite este folosită în mu lte produse de renume – Mac OS X,
Chrome, chiar Dropbox. SQLite folosește Structured Query Language pentru a facilita accesul la
datele stocate și a fost proiectată în special pentru a fi rapidă, cu dimensiuni reduse și ușor de
folosit23.
Obiectul SQLiteDatabase reprezintă o bază de date și are metode de interacționare – face
interogări și gestionează d ate. Pentru crearea și actualizarea unei baze de date, se apelează
SQLiteDatabase.create() și, de asemenea, subclasa SQLiteOpenHelper .
Ca parte a sprijinului său pentru sistemul de baze de date SQLite, Android expune funcțiile
de gestionare a bazei de date care vă permit să stocați colecții complexe de date împachetate în
obiecte utile. De exemplu, Android definește un tip de date pentru informații de contact, acesta este
format din mai multe domenii, inclusiv de numele și prenumele (siruri de caractere), o adresă și
numere de telefon (de asemenea, siruri de caractere), o fotografie (imagine bitmap), și multe alte
informații care descriu o persoană.
Android este livrat cu instrumentul de baza de date sqlite3, care permite răsfoirea
conținutul ui de tabel, executarea de comenzi SQL, și efectuarea altor funcții utile în bazele de date
SQLite.
Bazele de date SQLite sunt stocate pe dispozitiv în /date/ date/nume _pachet /baze de date.

II.5.4. Network

Pentru a stoca și prelua date se poate folosi , de asemenea, rețea ua (atunci când este
disponibilă). Pentru a face operațiunile de rețea, se utilizează clase din următoarele pachete:
 java.net.* 24
 android.net.* 25

II.6. Cerințe Hardware

Primul telefon construit pentru a rula sistemul de operare Android a fost ”HTC Drea m”, lansat
la 22 octombrie 2008. Potrivit Google până la sfârșitul anului 2009, au apărut 18 de modele de
telefoane ce folosesc Android la nivel mondial. În plus față de dispozitivele mobile wireless ce au

23 http://ctrl -d.ro/tips -and-tricks/lucrul -cu-baze-de-date-in-android/
24 https://developer.android.com/reference/java/net/package -summary.html
25 https://de veloper.android.com/reference/android/net/package -summary.html

17
fost livrate cu Android, unii utilizatori au reuși t (cu o anumită cantitate de hacking și cu limită de
funcționalitate) să instaleze Android pe dispozitive mobile wireless livrate cu alte sisteme de operare.
Principala platformă hardware pentru Android este ARM (ARMv7 și ARMv8 -A), cu
arhitecturile x86, M IPS și MIPS64 și x86 -64, de asemenea, acceptate oficial în versiunile ulterioare
de Android. Proiectul neoficial Android -x86 a oferit suport pentru arhitecturile x86 înaintea
suportului oficial 26 27. Arhitectura MIPS a fost, de asemenea, susținută înainte de Google. Din 2012,
au început să apară dispozitive Android cu procesoare Intel, inclusiv telefoane și tablete [16]. În timp
ce câștigă suport pentru platforme pe 64 de biți, Android a fost lansat pentru prima dată pe 64 de biți
x86 și apoi pe A RM64. De la Android 5.0 ”Lollipop” , sunt acceptate variante pe 64 de biți ale tuturor
platformelor în plus față de variantele pe 32 de biți.
Cerințele pentru cantitatea minimă de RAM pentru dispozitive care rulează Android 5.1
variază de la 512 MB RAM pent ru ecrane cu densitate normală până la aproximativ 1,8 GB pentru
ecrane cu densitate mare. Recomandarea pentru Android 4.4 este să aibă cel p uțin 512 MB de
memorie RAM , în timp ce pentru dispozitivele "low RAM" 340 MB este cantitatea minimă necesară
care n u include memorie dedicată diferitelor componente hardware, cum ar f i procesorul de bandă de
bază. Android 4.4 necesită un procesor de arhitectură ARMv7, MIPS sau x86 pe 32 de biți (ultimele
două prin porturi neoficiale), împreună cu o unitate de procesare grafică compatibilă OpenGL ES 2.0 .
Android acceptă OpenGL ES 1.1, 2.0, 3.0, 3.1 și de la ultima versiune majoră, 3.2 și Vulkan. Unele
aplicații pot necesita în mod explicit o anumită versiune a OpenGL ES, iar hardware -ul GPU
corespunzător este necesar pen tru a rula astfel de aplicații 28.

II.7. Evoluția Android
De la lansarea sa inițială și până astăzi, Android a cunoscut o serie de actualizări
(http://www.spinfold.com/evolution -of-android -os/). Aceste actualizări pentru sistemul de operare de
bază re zolva de obicei bug -uri și a adăugă noi caracteristici.

Figura nr. 9 Diferite versiuni de Android

26 https://developer.android.com/about/versions/lollipop.html
27 https://developer.android.com/ndk/guides/x86 -64.html
28 https://source.android.com/devices/graphics/

18
Android 1.0 (API 1)
Această versiune nu a venit cu un nume de ” desert” . Lansat în septembrie 2008, cu
dispozitivul HTC Dream , sistemul de operare Android a furnizat servicii, cum ar fi GPS și
Bluetooth, servicii integrate Google, precum Gmail, Google Maps (cu Street View) și Google
Calendar, Android Market cu aproximativ 35 de aplicații (Amazon MP3 Store, YouTube) și
multitask ing.
Mai târziu , în februarie 2009 , Google a lansat o actualizare de Android, v. 1.1 (API 2).
Android 1.1 era cunoscut ca ”Petit Four” pe plan intern, deși acest nume nu a fost folosit oficial.
Actualizarea a rezolvat erori, a modificat API -ul Android și a adăugat o serie de caracteristici 29.
Android 1.5 Cupcake (API3 )
Android 1.5 a fost primul ce a obținut un nume de cod – ”Cupcake ”. Se spune că Google a
vrut să lanseze această versiune ca 1.2, dar compania a decis ca în sf ârșit să facă o revizuire majoră
și a ales 1.5 , bazată pe kernelul 2.6.27 al Linuxului. .
Deși Cupcake este un desert mic, cupcake -ul lui Google s-a dovedit a fi altfel, datorită unor
caracteristici notabile, cum ar fi caseta de căutare universală, suport pentru tastaturi cu cuvinte
prede finite și dicționar de cuvinte personalizate, înregistrare video și încărcarcare pe YouTube,
comutare între aparatul de fotografiat și modul video, galerie foto și camera integrată cu opțiune de
ștergere, mai multe widget -uri, cum ar fi calendarul sau un music player. Android Market a fost
reproiectat pe categorii, au apărut jocuri, descărcări și filtre, suport pentru gesturi și opțiunea ”voice –
to-text”.
Android 1.6 Donut (API 4)
Lansat în septembrie 2009, această actualizare era adresată erorilor de repor nire și a inclus
mai multe caracteristici noi, cum ar fi căutarea Android, care vă permite să căutați atât online, cât
și la nivel local pe telefon prin contacte, calendare, muzică și în orice aplicație cu codul adecvat,
tastatură virtuală pe ecran, căutar e vocală îmbunătățită, galerie foto integrată, aparat de fotografiat
și camera video, opțiunea de a încărca direct pe YouTube și Picasa, cu acces mai rapid la aparatul
foto, widget -uri pentru home screen, Bluetooth stereo și funcția de navigare Google turn -by-turn.
Această versiune a fost bazată pe Linux kernel 2.6.29.
Android 2.0 Eclair (API 5)
Noul STD numit „Eclair” a fost lansat în 26 octombrie 2009 (API5) , urmată de o versiune
bug-fix 2.0.1 (API6) în 3 decembrie 2009 și 2. 1 (API7) în 12 ianuarie 2010.
Noua versiune și actualizările acesteia a adus caracteristici cum ar fi suport Bluetooth 2.1,
bliț și zoom digital, modul scenă pentru fotografii, balansul de alb, efecte de culoare și focalizare
macro pentru aparatul de fotografiat, suport multi -touch, m ai multe conturi de utilizator, contact
rapid, imagini de fundal animate, cinci ecrane de start, tastatură îmbunătățită, pictograma microfon
pentru dictarea vocală a e -mailurilor și Bluetooth 2.1.
Android 2.2 Froyo (API 8)
Kitul SDK pentru Android 2.2 Froyo (iaurt îngheț at), a fost lansat în mai 2010 , bazat pe
kernelul 2.6.32 . Această versiune conține o mulțime de bug-uri corectate și a adus în plus unele
caracteristici extraordinare. Compilare just-in-time, actualizări automate ale aplicațiilor, USB și

29 https://web -beta.archive.org /web/20120505091337/https://developer.android.com/sdk/android -1.1.html

19
suport hot-spot, FM Radio, Adobe Flash 10.1, un nou kernel de Linux, îmbunătățiri OpenGL pentru
o grafică mai puternică a jocurilor și o performanță imbunătățită, politici de securitate îmbunătățite,
căutare globală de adrese , calendar sincronizat, ștergere a de fișiere de la distanță, funcții
„copy/paste”, suport Bluetooth pentru apelare vocală și multe altele. Această versiune a cuprins și 3
subversiuni: 2.2.1 (January 18, 2011 ), 2.2.2 (January 22, 2011 ), 2.2.3 (November 21, 2011) 30.
Android 2.3 Gingerbread (API 9)
Google a lansat official versiunea Gingerbread în 6 Decembrie 2010. Această versiune a fost
proiectată pentru optimizarea vitezei, a memorie și a performanței. Sistemul de operare a inclus, de
asemenea, o noua versiune a tastaturii virtuale, o îmbunătățire la funcția „copy/paste”, interfața cu
utilizatorul a fost simplificată, suport de compresie video oferit WebM, a fost adăugată opțiunea
pentru vizualizarea și controlul descărcărilor cu ajutorul browser -ului, manager de aplicații, suport
pentru giroscop, barometru, gravimetru,comutare la camera foto din față pentru apeluri video și
altele.
Primul telefon care a rulat Gingerbread a fost Samsung Nexus S de la T -Mobile , pentru care
au fost dezvoltate variante 2.3.1, 2.3.2, 2.3.3 (API 10), … , până l a 2.3.6, ce au adus o serie de
îmbunătățiri și corecții .
Android 3.0 Honeycomb (API 11)
Lansat în data de 22 februarie 2011, versiunea Honeycomb a sistemului de operare Android ,
a fost dezvoltată, în principal, pentru tablete și a fost urmată de două vers iuni rapide ce conțineau
rezolvarea bug -urilor inițiale, cum ar fi 3.1 (API 12) și 3.2 (API 13) , apărute în iulie, respectiv
august 2011.
Sistemul de operare a venit optimizat pentru tablete, avea widget -uri reînnoite și
multitasking mai bun, navigare priv ată, USB Host, tastatură reproiectată și îmbunătățită, Google
Talk, suport pentru grafică 3D, selecție multiplă, clipboard și opțiunea de drag -and-drop, noi API –
uri pentru Bluetooth A2DP și HSP și galerie foto în modul „full -screen”.
Primul dispozitiv cu a ceastă versiune, tableta Motorola Xoom, a fost lansat pe data de 24
februarie 2011.
Android 4.0 Ice Cream Sandwich (API 14)
O dată cu apariția Ice Cream Sandwich, Google a renunțat la tradiția îmbunătățirilor minore
și a lansat un sistem de operare cu o se rie de noi caracteristici. Acest sistem de operare, care a fost
lansat în octombrie 2011, este proiectat să funcționeze atât pe smartphone -uri cât și pe tablete.
Sistemul de operare include butoane virtuale, suportă deblocare de ecran, management al widget –
urilor, Android Beam, o nouă aplicație pentru calendar cu opțiunea de pinch -to-zoom, interfața de
utilizator Gmail restruscturată, caracteristici de rețele sociale, Roboto un nou tip pentru tastatură, o
mai bună căutare vocală, noi capabilități foto, opți unea de screenshot și multe altele.
Subversiuni care au adus o serie de îmbunătățiri sunt:
 Android 4.0.3 Ice Cream Sandwich (API 15)
 Android 4.1 Jelly Bean (API 16)
 Android 4.2 Jelly Bean (API 17)
 Android 4.3 Jelly Bean (API 18)
 Android 4.4 KitKat (API 19 )
 Android 4.4W KitKat, cu extensii portabile (API 20)

30 https://en.wikipedia.org/wiki/Android_version_history#cite_ref -44

20
Android 5.0 Lollipop (API 21)
Android 5.0 ”Lollipop ” a fost lansat sub codul ”Android L” pe data de 25 iunie 2014 . A
devenit disponibilă ca actualizări oficiale OTA pe 12 noiembrie 2014 pentru dispozit ivele selectate
care rulează distribuții de dispozitive Android preluate de Google, inclusiv dispozitivele Nexus și
edițiile Google Play. Codul său sursă a fost disponibil la 3 noiembrie 2014 31.
Lollipop are o interfață de utilizator reproiectată, constru ită în jurul unui limbaj de design
receptiv denumit ”design material” . Alte modificări includ îmbunătățiri ale notificărilor, care pot fi
accesate din lockscreen și afișate în cadrul aplicațiilor ca bannere de vârf. În plus, Google a efectuat
modificări interne ale platformei, prin înlocuirea oficială a programului Android Runtime (ART) cu
Dalvik pentru o performanță îmbunătățită a aplicațiilor și cu modificările destinate îmbunătățirii și
optimizării utilizării bateriilor, cunos cută ca proiectul Volta32.
Android 5.1 Lollipop (API 22), aduce îmbunătățiri și remedieri a erorilor în ecranul Prezentare
generală , prezintă suportul oficial pentru mai multe cartele SIM, prezintă îmbunătățiri ale sistemului
de priorități de notificare, pentru a replica mai repede modul silențios eliminat în Android 5.0.
Android 6.0 Marshmallow (API 23)
Android 6.0 ”Marshmallow ” a fost lansat sub codul ”Android M” pe 28 mai 2015, pentru
telefoanele Nexus 5 și Nexus 6, tableta Nexus 9 și set-top box-ul Nexus Player, sub numărul de
construire MPZ44Q. Cel de-al treilea preview developer (MPA44G) a fost lansat pe 17 august 2015
pentru dispozitivele Nexus 5, Nexus 6, Nexus 9 și Nexus Player și a fost actualizat la MPA44I care a
adus corecții legate de profilurile Android for Work.
Android 7 .0 Nougat (API 24)
Android ”Nougat” (codificat N în dezvoltare) este cea mai mare versiune 7.0 a sistemului de
operare Android. Acesta a fost lansat pentru prima dată ca previzualizare pentru dezvoltatori pe 9
martie 2016, cu imagini din fabrică pentru dispozitivele Nexus actuale, precum și cu noul ”Program
Android Beta”, care permite actualizarea dispozitivelor compatibile direct pe versiunea beta a
aplicației Nougat Android – actualizare aeriană. Versiunea finală a fost lansată la 22 august 2016.
Ultima construcție de previzualizare a fost lansată pe 18 iulie 2016, cu numărul de construcție
NPD90G. Prezintă următoarele caracteristici: Abilitatea de a afișa calibrarea culorilor , Abilitatea de
a afișa zoom -ul, Abilitatea de a schimba aplicațiile prin dublu atingere în butonul de prezentare
generală , A fost adăugată o parte de informație de urgență , A fost adăugat butonul "Ștergeți tot" în
ecranul Prezentare generală , O altă partiție de sistem, care se actualizează atunci când nu este utilizată,
permițând actualizări de sistem fără întreruperi , Daydream platforma realității virtuale (interfaț a VR),
Funcție îmbunătățită Doze functionality , care vizează prelungirea duratei de viață a bateriei ,
Îmbunătățiri ale browserului de fișiere , Mai multe opțiuni de setări rapide , Suport pentru mai multe
ferestre, care acceptă aplicații plutitoare pe un layout desktop , Modul nou de economisire a datelor,
care poate forța aplicațiile să reducă utilizarea lățimii de bandă , Suport imagine în imagine pentru
Android TV.
Pe 4 octombrie 2016 apare 7.1 (API 25), mai apoi în data de 5 decembrie 2016, Google a
lansat Android 7.1.1 ca previzualizare pentru dezvoltatori pentru Nexus 5X, Nexus 6P și Pixel C.
În 4 aprilie 2017 a fost lansată versiunea 7.1.2 cu următoarele caracteristici: Avertizări privind
utilizarea bateriei , Nexus specific , Stabilitate îmbunătățită a notificării , Amprenta amprentei pe 5X /
6P, Îmbunătățiri generale de conectivitate , Specific pixel , Îmbunătățirea performanței de străpungere

31 http://www.phonearena.com/news/Updated -Android -Lollipop -Developer -Preview -image -coming -to-Nexus -devices –
in-a-couple -of-days_id61780
32 Andrei Frumusanu (July 1, 2014). "A Closer Look at Android RunTime (ART) in Android L"

21
a amprentelor digitale , Îmbunăt ățiri de conectivitate Bluetooth , Noua interfață utilizator multitasking
pe Pixel C.
Android 8.0 "O" (API 26)
Android "O" este titlul de lucru al unei lansări viitoare a sistemului de operare mobil Android.
A fost lansat pentru prima dată ca previzualizar e a dezvoltatorului de calitate alfa pe 21 martie 2017.

II.8. Viitorul Androidului
Inovațiile hardware și software Android sunt stabilite pentru a juca un rol important în
roadmap -ul Android . Asemenea ecranelor flexibile și a tehnologiilor purtate la un nivel care depășește
imaginația omului comun, se dorește să se ia lumea ca prin furtună. Dispozitivele miniatură,
îmbrăcămintea, brățări și ochelari vor face parte din viața de zi cu zi a tuturor.

Hărțile în Future Android sau ”Android 2020”, vor transfo rma modul în care navigăm și
vedem lumea. În curând vom privi în interior și vom putea naviga prin clădiri cu camere de vizualizare
noi și îmbunătățite.
Telefoanele noastre vor putea fi folosite zilnic pentru a face tranzacții (bancare) și a verifica
ident itatea noastră, iar ”Android 2020” va juca un rol imens în a demonstra cine vă spuneți cu adevărat
că sunteți! Scanarea îmbunătățită a retinei și a amprentelor digitale integrate în dispozitive va permite
utilizatorului să acceseze dispozitivul. De a semene a, Google lucrează la App Authenticator, care va
integra cele mai bune caracteristici de securitate posibile. Android Messaging va arăta implementarea
de apeluri video 5G și trimiterea de mesaje text între dispozitivele Android OS, toate conversațiile
fiind grupate mai degrabă de persoană decât de platformă. Android prezice că fiecare ființă umană va
fi online până în 2020 și ca ută să facă acest lucru posibil.
Singura certitudine cu privire la viitorul Android este că se îmbunătățește constant, deoarece
are se luptă pentru a rămâne competitivă și pentru a crea noi progrese în tehnologie 33.
Capitolul următor va reda Prezentarea aplicației , care se va face cu ajutorul unui emulator
Android inclus în SDK.

33 https://technoretrospective.wordpress.com/category/enter -android/

22

III.1 Obiectivele aplicației

Programul are la baza ca obiectiv implementarea aplica ției Android portofel virtual,
vExpenseTracker , la baza av ând gestionar ea cheltuielilor lunare, astfel vom putea vedea dacă am
depășit bugetul și putem gestiona mai cu băgare de seamă cheltu ielile .
Aplica ția este u șor de utlizat chiar și pentru utlizatori neexperimentaț i, având o interfa ță
simpl ă și primitoare. Datorit ă faptului c ă Android are un cod open source, oferă dezvoltatorilor o
largă libertate în ceea ce privește crearea de noi apli cații sau extinder ea unora deja existente

III.2 Implementare

Implementarea aplica ției cuprinde urm ătoarele clase care au rolul de a gestiona informa țiile
primite de la utilizator.
BudgetEditor moștenește Activity.
Metodele suprascrise sunt metodele ca re apar țin clasei de bază Activity.
 Metoda OnCreate este folosit ă pentru a creea un nou Buget sau pentru a edita un buget
deja existent, diferen ța se face prin setarea variabilei currentState cu EDIT_STATE sau
CREATE_STATE, în cazul în care s -a produs o er oare, se poate ob ține textul anterior
direct din baza de date.
 Metoda OnResume , dac ă se apeleaz ă metoda, nu au fost erori la OnCreate, ob ținerea
informa țiilor în cazul în care ne aflam in EDIT_STATE.
 Metoda onSaveInstanceState salveaz ă și introduce informa țiile în baza de date , atât în caz
de CREATE_STATE c ât și în caz de EDIT_STATE .
 Metoda onPause este folosit ă pentru cazul în care user -ul crează un nou buget
(CREATE_STATE), dar navigheaz ă pe alt ă pagin ă a aplica ției inainte de a -l salva. Î n
acest caz, in forma țiile introduse se p ăstreaz ă pentru a putea fi puse la dispoziț ia user -ului
în caz de revenire, în cazul în care nu se introduce nici o informaț ie, bugetul se șterge.
 OnCreateOptionsMenu are rolul de a crea op țiunile disponibile at ât pentru cazul în care se
creeaz ă un buget, c ât și pentru cazul în care se editează unul deja existent.
 OnOptionsItemSelected(MenuItem item) oferă funcționalitate pentru fiecare item din meniu,
în cazul în care acesta este ap ăsat de c ătre user.

Metodele ajută toare sunt pri vate și sunt folosite pentru a simplifica codul și a cre ște
lizibilitatea acestuia:
o isBudgetChanged
o cancelBudget
o saveBudget
o deleteBudget

BudgetAdapter moșteneș te SimpleCursorAdapter.

23
Metode suprascrise

Pentru ob ținerea informa țiilor (View -ului) din poziția specificat ă a tabelei , se utilizează
metoda GetView . Analizeaz ă atât cazul în care suma (amount) este pozitiv ă cât și cazul în care suma
(amount) a fost depa șită, suma este afi șată cu roș u (când este depa șită), cu gri (câ nd este zero) și cu
verde ( când încă mai este o sum ă pozitiv ă alocat ă bugetului).

Figura nr. 10 Afișare sumă
 Clasa ajut ătoare este folosit ă pentru a salva informa țiile referitoare la un anumit buget.
 Private static class BudgetViewHolder conține info rmațiile care apar țin unui buget.
 BudgetList mo ștenește clasa ListActivity.

Metode utilizate:
– onCreate , onResume , onCreateOptionsMenu , onOptionsItemSelected , onCreateContextMenu ,
onContextItemSelected .

Clase ajut ătoare
 private class DeleteClickLi stener implements DialogInterface.OnClickListener
 private class RestartClickListener implements DialogInterface.OnClickListener

ExpenseTracker Provider seteaz ă atât numele bazei de date c ât și numele tabelelor, sunt dou ă
tabele una pentru a ține eviden ța bugetelor create și a sumei disponibile p entru fiecare buget în parte
și una pentru a ține eviden ța tranzac țiilor aloc ate fiecă rui buget în parte. Con ține metode de
inserare/ ștergere/update , care apeleaz ă la rândul lor query -urile de inserare/ ștergere/upda te puse la
dispozi ție de DatabaseHelper, av ând ca parametri atât numele tabelei implicate în opera ție, cât și
informa ția care se modeleaz ă.

DateControl implementează funcționarea butoanelor. Acestea sunt folosite la setarea
momentului în care a fost adau gată o nouă tranzac ție, are 3 constructori folosi ți pentru instan țiere,
pentru metode , pentru ob ținerea datei, respectiv setarea acesteia.

24
Metode mo ștenite
OnTimeSet, la setarea timpului, are loc actualizarea afi șajului de pe buton (timpul recent se tat)

OnDateSe t, la setarea datei, are loc actualizarea afi șajului de pe buton (data recent setat ă)

OnClick, la ap ăsarea butonului, at ât în cazul setarii timpului, c ât și în cazul setarii datei, apare
un Picker (TimePickerDialog respectiv DatePick erDialog) cu scopul de a u șura interac țiunea cu
utilizatorul.

III.2.1. Clasa DatabaseHelper

DatabaseHelper este clasa ajut ătoare, avâ nd scopul de a ” ușura” atât crearea bazei de date, c ât
și deschiderea acesteia. E ste apel de interogări pentru creare a bazei de date.

25

III.2.2. Crearea tabelelor

Pentru evidența bugetelor și a sumelor disponibile pentru fiecare buget adăugat, aplicația
utilizează două tabele accounts și transactions .

Figura nr. 11 Crearea tabelelor
Liniile de cod pentru update și delete:

CREATE INDEX account_id ON transactions(account_id);
CREATE TRIGGER accounts_update_start_date AFTER UPDATE OF start_date ON accounts BEGIN
UPDATE transactions SET archive_flag = 0
WHERE account_id = OLD._id A ND create_date >= NEW.start_date AND OLD.start_date <> NEW.start_date;
UPDATE transactions SET archive_flag = 1
WHERE account_id = OLD._id AND create_date < NEW.start_date AND OLD.start_date <> NEW.start_date;
END
CREATE TRIGGER accounts_delete AFTER DELETE ON accounts BEGIN
DELETE FROM transactions WHERE account_id = OLD._id;
END
CREATE TRIGGER transactions_insert INSERT ON transactions BEGIN
UPDATE accounts SET spend = spend + NEW.amount WHERE _id = NEW.account_id AND NEW.amount <> 0;
END
CREATE TRIGGER transactions_update_amount UPDATE OF amount ON transactions BEGIN
UPDATE accounts SET spend = spend – OLD.amount + NEW.amount WHERE _id = OLD.account_id AND
OLD.archive_flag = 0;
END
CREATE TRIGGER transactions_delete DELETE ON transactions B EGIN
UPDATE accounts SET spend = spend – OLD.amount WHERE _id = OLD.account_id AND OLD.amount <> 0 AND
OLD.archive_flag = 0;
END

26
III.2.3. Clasa folosit ă pentru meniu

III.2.4. Declarare variabile pentru aplicație

27

III.2.5 Clasele realizate pe ntru utilizarea aplicației

Figura nr. 12 Clasele din pachetul vExpenseTracker

28
III .3. Aplica ția vExpenseTracker

Instalare

Se conectează telefonul la calculator și se copiază fiș ierul vExpenseTracker.apk pe telefon.

Figura nr. 13 Conectare la PC

Figura nr. 14 Copiere fișier .apk

Sistemul de operare Android este protejat împotriva instalării aplicațiilor neautorizate prin
metoda sideload folosind o opț iune care se află în panoul de Setări al dispozitivului. Primul lucru pe
care îl vom face este să permitem instalarea aplicațiilor prin metoda sideload intrând în panoul de
Setări al dispozitivului și setând această opțiune pe modul Pornit.

29

Figura nr. 15 Panoul de control al telefonului

Figura nr. 16 Conectare telefon la PC

În folder ul Download din Phone am pus fiș ierul vExpenseTracker.apk

Figura nr. 17 Copiere fișier APK

30
Cu ajutorul aplicaț iei Apk Ins taller pornim instalarea aplicației vExpenseTracker. După
instalare pe ecranul telefonul a apărut iconița aplicaț iei.

Figura nr. 18 Iconița aplicației pe telefon

Utilizarea aplicați ei

”vExpenseTracker ” este o aplicație mobilă Android, simplă și ușor de utilizat ce ajută
utilizatorul să țină evidența cheltuielilor zilnice, planificate sau neplanificate. La deschiderea aplicației
vom fi î ntâmpinați de o interfață ușor de utilizat ce ne va ghid a spre următorii pași.Ecran ul de
întâmpinare ne spune că avem 0 Ron buget și că trebuie să mergem la meniu pentru începe
introducerea datelor.

Figura nr. 19 Interfața inițială a aplicației

Tema de fundal aleasă pentru prezentarea aplicației este ”Theme.Light ”. Această temă
fluctuează ca dimensiuni. În funcție de informația oferită de aplica ție ea încadrează conținutul
micșorând -uși dimensiunile sau crescându -le. Această temă se poate alege cu ajutorul editorului de
.xml furnizat de Eclipse prin intermediul pachetelor de Android.
După apăsarea butonului meniu, se va aduce în față posibilitate a de alocare a unei sume de
bani pentru bugetul unei activități.

31

Figura nr. 20 Alocare buget

În urma folosirii opțiunii de alocare a unui nou buget, vom putea crea unul , atribuindu -i
acestuia un nume ș i o sumă. După salv area noului buget, va fi reținut numele , suma alocată, ora și
data atribuirii.

Figura nr. 21 Creare buget nou

Aplicația folosește o bază de date denumită „ ExpenseTracker .db” pentru bugete și tranzacții
creată astfel:

32

Pentru salvarea datei și orei se folosește clasa de mai jos:

public DateControlSet (Activity activity , Button dateButton , Button timeButton ) {
this.activity = activity ;
this.dateButton = dateButton ;
this.timeButton = timeButton ;

dateButton .setOnClickListener (this);
timeButton .setOnClickListener (this);
setDate (null);
}

public DateControlSet (Activity activity , int dateButtonId , int timeButtonId ) {
this.activity = activity ;
this.dateBu tton = (Button ) activity .findViewById (dateButtonId );
this.timeButton = (Button ) activity .findViewById (timeButtonId );

dateButton .setOnClickListener (this);
timeButton .setOnClickListener (this);
setDate (0);
}

public Da te getDate () {
return date;
}

În urma salvării, bugetul va fi alocat și îl vom avea disponibil în meniul principal. Pentru
prezentare, am adăuga t mai multe bugete .Putem vedea că pentru fiecare buget în parte se poate
introduce un nume de buget și suma alocat ă. Data se va introduce automat, luată din setările
telefonului.

33

Figura nr. 22 Listă de bugete

Bugetele alocate sunt organizate în listă î n ordinea adăugării lor, iar în banda gri de deasupra este
afișată suma de bani care mai este disponibilă din suma totală a bugetelor. De asemenea, la fiecare
buget în parte este afișată suma cheltuită deja și suma care mai este disponibilă.

switch (action) {
case ACCOUNTS :
qb.setTables( ACCOUNTS_TABLE _NAME );
qb.setProjectionMap( sAccountsProjectionMap );
orderBy = Accounts. DEFAULT_SORT_ORDER ;
break ;

case ACCOUNT_ID :
qb.setTables( ACCOUNTS_TABLE_NAME );
qb.setProjectionMap( sAccountsProject ionMap );
qb.appendWhere(Accounts. _ID + " = " + uri.getPathSegments().get(1));
break ;

case ACCOUNT_TRANSACTIONS :
qb.setTables( TRANSACTIONS_TABLE_NAME );
qb.setProjectionMap( sTransactionsProjectionMap );
qb.appendWhere(Transactions. ACCOUNT_ID + " = " + uri.getPathSegments().get(1));
qb.appendWhere(" AND " + Transactions. ARCHIVE_FLAG + " = 0");
orderBy = Transactions. DEFAULT_SORT_ORDER ;
break ;

case TRANSACTIONS :

34
qb.setTables( TRANSACTIONS_TABLE_NAME );
qb.setProjectionMap( sTransactionsProjectionMap );
qb.appendWhere(Transactions. ARCHIVE_FLAG + " = 0");
orderBy = Transactions. DEFAULT_SORT_ORDER ;
break ;

case TRANSACTION_ID :
qb.setTables( TRANSACTIONS_TABLE_NAME );
qb.setProjectionMap( sTransactionsProjectionMap );
qb.appendWhere(Transactions. _ID + " = " + uri.getPathSegments().get(1));
break ;

default :
throw new IllegalArgumentException( TAG + " Unknown URI " + uri);
}

if (!TextUtils. isEmpty (sortOrder)) {
orderBy = sortOrder;
}

Dacă vom ține apăsat ” lung” pe bugetul alocat, în cazul nostru p e „Benzină ”, se vor activa
următoarele opțiuni:
o Adaugă tranzacții
o Vezi tranzacții
o Restart budget
o Setări buget
o Șterge

Figura nr. 23 Opțiuni utilizabile

35
Adaugă tranzacții

După alegerea opțiunii de adăugare tranzacții, avem posi bilitatea de a intriduce suma și numele
tranzacției pentru bugetul aferent (în cazul de față al bugetului Benzină).

Figura nr. 24 Adaugă tranzacții
După ce am salvat operațiunea vom avea pentru bugetul Benzină un nou buget, adică din suma
totală am cheltuit 70 Ron pentru o deplasare la Arad. Pentru vizualizare și testare am adăugat o nouă
tranzacție, o cheltuială pe benzină la Oradea.

Vezi tranzacții
În acestă opțiune se pot vizualiza toate tranzacțiile realizate la un anumi t buget.
Tranzacțiile sunt alocate Bugetelor astfel:

case ACCOUNT_TRANSACTIONS :
values.put(Transactions. ACCOUNT_ID , uri.getPathSegments().get(1));
case TRANSACTIONS :
if (values.containsKey(Transactions. CREATE_DATE ) == false ) {
values.put(Transactions. CREATE_DATE , now);
}
if (values.containsKey(Accounts. TITLE ) == false ) {
values.put(Accounts. TITLE , "");
}
long transactionId = db.insert( TRANSACTION S_TABLE_NAME , Transactions. TITLE , values);
if (transactionId > 0) {
Uri transactionUri = ContentUris. withAppendedId (Transactions. CONTENT_URI , transactionId);
getContext().getContentResolver().notifyChange(transac tionUri, null);
return transactionUri;
}
break ; }

36

Figura nr. 25 Vizualizare tranzacții în bugetul Benzină

Restart buget

Butonul „Restart buget” n e permite realocarea sumei in ițiale. Suma introdusă se va adăuga la
suma actuală disponibilă. Aplicația afișează un mesaj de atenționare, dacă suntem siguri că dorim să
reînnoim datele.

Figura nr. 26 Restart buget

37
Setări buget

Butonul ” Setări buget” ne permite să modificăm suma alocată sau numele bugetului alocat.
Codul specific acestei opțiuni este:

public int update(Uri uri, ContentValues values, String where, String[] whereArgs) {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
int count;
switch (sUriMatcher .match(uri)) {
case ACCOUNTS :
count = db.update( ACCOUNTS_TABLE_NAME , values, where, whereArgs);
break ;
case ACCOUNT_ID :
String accountId = uri.getPathSegments().get (1);
count = db.update( ACCOUNTS_TABLE_NAME , values, Accounts. _ID + "=" + accountId
+ (!TextUtils. isEmpty (where) ? " AND (" + where + ')' : ""), whereArgs);
break ;

În momentul modificării sumei o să se modifice atât data, cât și ora modificării:

public void setDate(Date newDate) {
if (newDate == null) {
setDate(0);
} else {
setDate(newDate.getTime());
}
}
public void setDate( long newDate) {
if (newDate == 0) {
date = new Date();
} else {
date = new Date(newDate);
}
updateDate();
updateTime();
}
public void onDateSet(DatePicker view, int year, int month , int monthDay) {
date.setYear(year – 1900);
date.setMonth( month );
date.setDate (monthDay);
updateDate();
}

38

Figura nr. 27 Modificare buget existent

Butonul ” Șterge” va șterge bugetul alocat:

public int delete(Uri uri, String where, String[] whereArgs) {
SQLiteDatabase db = mOpen Helper.getWritableDatabase();
int count;
switch (sUriMatcher .match(uri)) {
case ACCOUNTS :
count = db.delete( ACCOUNTS_TABLE_NAME , where, whereArgs);
break ;
case ACCOUNT_ID :
String id = uri. getPathSegments().get(1);
count = db.delete( ACCOUNTS_TABLE_NAME , Accounts. _ID + "=" + id
+ (!TextUtils. isEmpty (where) ? " AND (" + where + ')' : ""), whereArgs);
break ;
}

39

Figura nr. 28 Șterge buget VDF

Dacă vrem să vedem tranzacțiile, să ștergem sau să să adăugam o tranzacție nouă ținem apăsat
lung pe tranzacția țintă.
Codul corespunzător ștergerii unei tranzacții deja existente este următorul:

case TRANSACTIONS :
count = db.d elete( TRANSACTIONS_TABLE_NAME , where, whereArgs);
break
Codul corespunzător modificării unei tranzacții deja existente este:
menu.add(0, SAVE_ID , 0, R.string. menu_save ).setShortcut('0', 's').setIcon (android.R.drawable.
ic_menu_save );
if (mState == STATE_EDIT ) {
menu.add(0, REVERT_ID , 0, R.string. menu_revert ).setShortcut('1', 'r')
.setIcon(android.R.drawable. ic_menu_revert );
menu.add(0, DELETE_ID , 0, R.string. menu_delete ).setShortcut('2', 'd')
.setIcon(android.R.drawable. ic_menu_delete );

}

40

Figura nr. 29 Cheltuieli
Suma totală disponibilă este calculată în funcție de bugetele adăugate și sumele cheltuite.
Principiul de cal cul și modul în care b alanța este afișată este prezentat mai jos:

float suma = 0, spend = 0;
if (mCursor.getCount() > 0) {
mCursor.moveToFirst();
while (!mCursor.isAfterLast()) {
suma += mCursor.getFloat( PROJECTION_INDEX_AMOUNT );
spend += mCursor.getFloat( PROJECTION_INDEX_SPEND );
mCursor.moveToNext();
}
}

if (spend > 0 && suma > 0) {
float balance = suma – spend ;
setTitle(getResources().getString(R.stri ng.title_accounts_list_balance ,
NumberFormat. getNumberInstance ().format(balance > 0 ? balance : 0),
NumberFormat. getNumberInstance ().format(suma)));
} else if (suma > 0) {
setTitle(getResources(). getString(R.string. title_accounts_list_amount ,
NumberFormat. getNumberInstance ().format(suma)));
} else {
setTitle(getResources().getString(R.string. title_accounts_list_empty ));
}

Funcția următoare returnează sum a disponibilă alocat ă cu roșu în cazul în care s -a depășit
bugetul, cu verde în cazul în care încă sunt fonduri de cheltuit sau cu culoarea gri un buget epuizat.

41
holder.amount. setText (NumberFormat. getNumberInstance ().format(balance));
if (bala nce > 0) {
holder.hint.setText(R.string. accounts_list_hint_spent );
holder.hint.setTextColor(android.graphics.Color. GREEN );
holder.amount.setTextColor(android.graphics.Color. GREEN );
} else if (bala nce == 0) {
holder.hint.setVisibility(View. GONE );
holder.amount.setTextColor(android.graphics.Color. GRAY );
} else {
holder.hint.setText(R.string. accounts_list_hint_over );
holder.hi nt.setTextColor(android.graphics.Color. RED );
holder.amount.setTextColor(android.graphics.Color. RED );
}
} else {
holder.info.setVisibility(View. GONE );
holder.hint.setVisibility(View. GONE );
holder.amount. setText (NumberFormat. getNumberInstance ().format(spend));
}
return view;
}

Figura nr. 30 Afișare sume în funcție de cheltuieli

42

Pentru că totul este pus la dispoziție făr ă nici un cost, Android a reușit să atragă o mulțime de
programatori entuziaști în direcția dezvoltării d e aplicații. Codul open source oferă dezvoltatorilor o
largă libertate în ceea ce privește crearea de noi aplicații sau extinderea unora deja existente .
De la aplicațiile realizate inițial doar pentru productivitate și informar e, e-mail, calendar,
contacte, bursă de valori și informații meteo, cererea publicului și disponibilitatea de instrumente
de dezvoltare au dus la expansiunea rapidă în alte categor ii, cum ar fi jocur i pentru telefoane mobile,
GPS ș i servicii bazate pe locație, servicii bancare, achiziții de bilete pentru filme, transport etc.
Android și aplicațiile sale mobile au reușit să îmbunătățească viața utilizatorilor. Ei pot folosi
televizo rul, pot porni autovehiculul sau clima acestuia, pot supraveghea diferite incinte, pot edita
un clip video sau o fotografie, pot să facă cumpărăturile sau să plătească facturile cu un minim de
efort. Android a adus oamenii mai aproape unii față de alții cu ajutorul aplicațiilor create pentru
rețele de socializare.
Aplicația prezentată ”vExpenseTracker ” poate fi dezvoltată pe viitor. Utilizatorii ar putea fi
scutiți de introducerea manuală a cheltuielilor. Cu ajutorul unei interfețe fiecare utilizator ar put ea
avea un cont ce s -ar conecta la baza de date a băncii. În urma citirii extrasului bancar aplicația ar
ști ce cumpărături a făcut clientul și le -ar deduce pe acestea din sumele inițial alocate.

43

[1]. José S. Marcano -Belisario, Ajay K . Gupta, John O'Donoghue, Cecily Morrison, Josip Car,
”Tablet computers for implementing NICE antenatal mental health guidelines:
protocol of a feasibility study ”, January 2016 .
[2]. Octavian Dospinescu, Marian Perca, Aplicații mobile pe platforma Android , Editu ra
Tehnopress, Ia și 2013.
[3]. Onur Cinar, ”Android Apps with Eclipse ”, Editura Apress, 2012
[4]. Popescu, D.E . and Lonea A.M ., “Mobile Cloud Computing ”, Book Chapter in “ New Trends
in Mobile and Web Development 2012 ”.
[5]. Reto Meier , ”Professional Android 4 Applicatio n Development ”, Editura John Wiley &
Sons, 2012.
[6]. Stefan Tanasa, Cristian Olaru, Stefan Andrei, ”Java de la 0 la expert ”, Polirom, 2003.
[7]. http://android.com/
[8]. http://android.com/branding.html/
[9]. http://developer.android.com/guide/index.html/
[10]. http://developer.a ndroid.com/guide/basics/what -is-android.html/
[11]. http://developer.android.com/videos/
[12]. http://en.wikipedia.org/wiki/Android_(operating_system)/
[13]. http://roughlydrafted.com/
[14]. http://www.spinfold.com/evolution -of-android -os/
[15]. http://pluralsight.com/
[16]. Warman, Matt (J une 7, 2012). ”Orange San Diego In tel Android mobile phone review” .
The Daily Telegraph. Telegraph Media Group Limited. Retrieved June 19, 2013.

Similar Posts