Tehnologia Gps

CAPITOLUL 1: INTRODUCERE

Spre deosebire de animale ca și păsări sau insecte, omul nu este înzestrat cu simțul orientării la naștere; suntem nevoiți să folosim instrumente și să ne bazăm pe memoria vizuală.

La începuturi, oamenii au reușit să înțeleagă că stelele, soarele și alte mici indicii precum prezența mușchilor pe partea de nord a tulpinilor copacilor sau aplecarea vârfurilor de conifere spre est pot fi repere când vine vorba de orientare. Instrumente precum busola și “carul îndreptat spre sud” au reprezentat un prim-pas pentru ușurarea orientării în spațiu.

Hărțile de asemenea au un rol imens în domeniul orientării. Primele hărți au fost probabil trasate pe piele sau papirus. Cele mai vechi hărți păstrate în condiții bune au o vechime de circa 2000 de ani î.e.n. însă acestea descriau forme și elemente ale terenului într-o formă minimală. Împreună cu busola, hărțile reprezintă o combinație puternică de localizare și orientare.

Cel mai mare pas făcut de evoluția tehnologică în domeniul localizării și orientării este tehnologia GPS și accesul de către marele public la el. În 1965, proiectul NAVSTAR pus în aplicare de marina americană și armata aeriană. După multe eșecuri și studii, au fost lansați primii sateliți în 1989. La vremea aceea, un dispozitiv GPS putea să ajungă la un preț de 50 de ori mai mare decât al unuia din ziua de azi. Din anul 2000, când armata americană a încetat bruiajul undelor sateliților precizia GPS a crescut mult.

Într-adevăr, GPS a fost un salt enorm pentru orientare și localizare, iar azi este folosit într-o varietate de domenii: transport, cadastru, excursii, dispozitivele GPS fiind din ce în ce mai accesibile și cu precizie mai crescută.

La fel ca și acum 2000 de ani, nevoia de orientare și localizare este la fel de mare, indiferent dacă trăim în mediu cunoscut urban, rural sau necunoscut. Implementarea receptorilor GPS în smartphone-uri a însemnat un nou pas în acest domeniu, majoritatea telefoanelor inteligente dispunând de acești receptori.

În această lucrare este descris modul în care tehnologia GPS conlucrează cu hărți digitale oferite publicului de Google prin intermediul unui telefon Android pentru a oferi localizare și orientare oriunde atâta vreme cât există și conexiune cu o rețea mobilă.

CAPITOLUL 2: STUDIU BIBLIOGRAFIC

2.1 Java

Java este un limbaj de programare proiectat în mod expres pentru folosire în mediu distribuit pe internet. A fost proiectat pentru a avea un “look and feel” al limbajului C++, dar este mai ușor de folosit decât C++ și impune un model de programare orientat pe obiecte. Java poate fi folosit pentru a crea aplicații care pot rula pe un singur calculator sau distribuit între servere și clienți într-o rețea. [1]

2.2 Sisteme de operare pentru dispozitive mobile

2.2.1 Android

Android este o platformă software și un sistem de operare pentru dispozitive și telefoane mobile bazată pe nucleul Linux, dezvoltată inițial de compania Google, iar mai târziu de consorțiul comercial Open Handset Alliance. Android permite dezvoltatorilor să scrie cod gestionat în limbajul Java, controlând dispozitivul prin intermediul bibliotecilor Java dezvoltate de Google. Aplicațiile scrise în C și în alte limbaje pot fi compilate în cod mașină ARM și executate, dar acest model de dezvoltare nu este sprijinit oficial de către Google. [2]

Începând cu 21 octombrie 2008, Android a fost disponibil ca Open Source. Google a deschis întregul cod sursă (inclusiv suportul pentru rețea și telefonie), care anterior era indisponibil, sub licența Apache.

2.2.2 iOS

iOS e un sistem de operare mobil dezvoltat de compania Apple și distribuit exclusiv pentru dispozitive Apple. Este sistemul de operare folosit pentru majoritatea iDevice-urilor (iPod, iPhone, iPad etc.).

Termenul de “iOS” a fost original denumit “iPhone OS” și a fost introdus în anul 2007 împreună cu primul dispozitiv hardware Apple iPhone lansat. A fost termenul folosit pentru a descrie software-ul care va opera pe iPhone și derivă din termenul “OS X”, care acum descrie propriul sistem de operare pentru calculatoarele Macintosh. Platforma “iOS” este un software bazat pe dispozitive mobile care lucrează ca și un sistem de calculator, dar pe dispozitive mobile cum ar fi telefoane și tablet. Este proiectat să fie mai mic, mai rapid și cu consum mai puțin. [3]

Pentru a crea aplicații iOS, avem nevoie de un calculator Mac cu sistem de operare OS X 10,8 sau mai noi, Xcode și iOS SDK.

Xcode este mediul de dezvoltare al Apple. Xcode include un editor de sursă, un editor UI și multe alte facilități. SDK-ul iOS extinde setul de unelte Xcode pentru a include unelte, compilatoare si framework-uri ce sunt necesare pentru dezvoltarea aplicatiilor iOS.

Limbajul de programare denumit Swift, care a apărut în 2014. Acesta reprezintă primul limbaj de programare sub marca Apple și a înlocuit limbajul de programare precedent objective-C.

Figura 1 Mediul de dezvoltare Xcode și limbaj de programare Swift

2.2.3 Windows Phone

Windows Phones este un sistem de operare pentru smartphone-uri dezvoltate de Microsoft. Este succesorul sistemului de operare Windows Mobile, deși e incompatibil cu platforme mai vechi. Cu Windows Phone, Microsoft a creat o nouă interfață de utilizator, oferind un limbaj de design denumit „Modern”. A fost lansat pentru prima dată în 2010, împreună cu Windows Phone 7.

Cerințele hardware minime pentru Windows Phone 8 sunt:

Procesor dual-core Qualcomm Snapdragon S4 sau Snapdragon 800

Minim 512 MB RAM pentru telefoane WVGA și 1 GB RAM pentru 720p/WXGA/1080p

Minim 4 GB memorie flash

Suport pentru micro-USB 2.0

Mufă stereo jack 3.5 mm

Cameră-spate cu auto-focus, opțional cu flash LED sau Xenon

Accelerometru, senzor de proximitate si lumină ambientală și motor de vibrare

Suport grafică DirectX

Touch screen capacitiv multi-touch cu minim 4 puncte simultane[4]

Pentru a putea dezvolta aplicații Windows Phone, este nevoie de MicrosoftVisual Studio 2010 Express for Windows Phone sau mai noi, Windows Phone Emulator si Windows Phone SDK cu versiunea cea mai recentă.

Figura 2 Microsoft Visual Studio pentru dezvoltare de aplicații Windows Phone

2.2.4 Scurtă comparare

Atât Apple, cât și Microsoft percep o taxă pentru ca developerii să se înscrie în “iOS Developer Program”, respectiv “App Hub”. Ambele firme percep o taxă de 99$/an iar fără unul din aceste abonamente, nu se pot crea aplicații pe aceste sisteme de operare. În schimb, dezvoltarea aplicațiilor Android nu necesită nicio taxă, ci numai distribuirea lor pe Google Store, însă acestea putând fi distribuite și în afara magazinului. Toate cele 3 firme câștigă 30% de pe urma aplicațiilor plătite și distribuite pe magazinul lor. Se pot încărca un număr nelimitat de aplicații gratuite pe magazinele Google și Apple, în timp ce Microsoft oferă distribuirea gratis doar pentru 100 de aplicații, iar următoarele costă câte 19.99$.

2.3 Medii de dezvoltare integrate

2.3.1 Eclipse IDE și Android SDK

Eclipse este un mediu de dezvoltare gratuit și open source care se îndreaptă mai ales pe dezvoltarea programelor Java. Totuși, se mai pot adăuga alte limbaje de programare și funcționalități folosind diferite plugin-uri.

Eclipse a început ca și un proiect Smart Canada. În 2001, se formează un consorțiu condus de un comitet pentru a dezvolta Eclipse ca și un software open-source.

S-a estimat că IBM a investit deja 40 de milioane de dolar până atunci. Membrii originali au fost Borland, IBM, Merant, QNX Software Systems, Rational Software, Red Hat, SuSe, TogetherSoft și WebGain. Numărul administratorilor a crescut până peste 80 la sfârșitul anului 2003. În ianuiarie 2004, Fundația Eclipse s-a înființat.

Din 2006, Fundația a lansat anual câte o nouă versiune a softului. Fiecare versiune include Platforma Eclipse cât și un număr de alte proiecte Eclipse:

Austin, 21 iunie 2004, v3.0

Bravo, 28 iunie 2005, v3.1

Callisto, 30 iunie 2006, v3.2

Europa, 29 iunie 2007, v3.3

Ganymede, 25 iunie 2008, v3.4

Galileo, 24 iunie 2009, v3.5

Helio, 23 iunie 2010, v3.6

Indigo, 22 iunie 2011, v3.7

Juno, 27 iunie 2012, v3.8 și v4.2

Kepler, 26 iunie 2013, v4.3

Luna, 25 iunie 2014, v4.4

În momentul de față, Eclipse IDE împreună cu Android SDK reprezintă varianta cea mai stabilă pentru dezvoltarea aplicațiilor în Android (având suportul oficial de la Google), însă plugin-ul ADT pentru Eclipse nu mai este în dezvoltare, în favoarea mediului Android Studio. Eclipse oferă o varietate de plugin-uri ce pot fi folosite și nu se găsesc în alte medii de dezvoltare, care nu sunt neapărat de încredere și pot provoca probleme din punctul de vedere al stabilității (se pot întâmpla multe când numărul de plugin-uri crește). Pachetul ADT ce trebuie descărcat pentru dezvoltarea aplicațiilor conține:

Eclipse + plugin ADT

Unelte Android SDK

Unelte pentru platforma Android

O versiune a platformei Android

O versiune a imaginii de sistem Android pentru emulator [5]

Fig. 3 Mediul Eclipse cu un sample de cod Android

2.3.2 Android Studio

Android Studio a fost anunțat pe data de 16 mai 2013 la conferința Google I/O de către managerul de produse Ellie Powers. Android Studio este disponibil pentru developeri pe gratis. Este sponsorizat de IntelliJ și oferă îmbunătățiri și funcționalități. Din mai 2013, până in iunie 2014, Android Studio se afla în stadiul alfa, iar acum se află în beta. Spre deosebire de Eclipse, AS este mult mai rapid, oferă un preview ce se updatează instant, layout-urile se pot vizualiza pe o sumedenie de rezoluții etc. Se preferă să se folosească acest mediu de dezvoltare pentru aplicații mai mici și mai ușoare, până când va fi lansată versiunea finală și va deveni mediul de dezvoltare oficial pentru Android.[6]

Fig. 4 Mediul de dezvoltare Android Studio

2.3.3 IntelliJ IDEA

Mediul de dezvoltare IntelliJ IDEA a fost dezvoltat de JetBrains. Este disponibil în varianta “community” și comercială. Într-un articol scris de Infoworld în 2010, IntelliJ a primit cea mai mare notă la test concurând cu alte 3 medii de dezvoltare de top în Java: Eclipse, NetBeans și Oracle JDeveloper.

Versiunea 12.1 include suport pentru Java 8, designer UI pentru dezvoltare Android, Play 2.0 și Scala. Oferă suport pentru: ActionScript/ MXML, Clojure, CoffeeScript, Dart, Groovy, Haxe, HMTL/XHTML/CSS, Java, JavaFX, JavaScript, Jelastic, Kotlin, Node.js, PHP, Python, Ruby/Jruby, SQL, Type Script, XML/XSL.[7]

Pentru dezvoltarea aplicațiilor Android, este nevoie de IntelliJ IDEA Ultimate Edition versiunea 9 sau mai nou, JDK și Android SDK instalate pe calculator. Pe lângă ajutorul general pentru scrierea codului, IDE-ul permite testarea aplicațiilor Android pe emulatoare configurate de utilizator sau pe dispozitive fizice.[8]

Dezvoltarea aplicațiilor în Android cu versiunea “community” este gratuită și mulți developeri preferă acest mediu în defavoarea mediului Eclipse.

Fig. 5 Mediul de dezvoltare IntelliJ IDEA cu emulatorul de dispozitiv Android

2.3.4 NetBeans

NetBeans e un mediu de dezvoltare folosit mai ales pentru aplicații Java, dar și pentru alte limbaje de programare, cum ar fi: PHP, C/C++ și HTML5. Este scris în Java și poate rula pe Windows, OS X, Linux, Solaris și alte platforme ce sunt compatibile cu mașina virtuală Java.

Fiind sub marca Sun/Oracle, uneltele NetBeans tind sa pară puțin mai standardizate. De exemplu, o interfață grafică cu utilizatorul vine deodată cu platforma NetBeans, în timp ce aceasta este valabilă doar ca și un plug-in pentru Eclipse. Totodată, multe unelte de dezvoltare Google ca și acele pentru Android se găasesc ușor ca și plugin-uri pentru Eclipse, dar nu fac parte din pachetul NetBeans de bază și sunt create de comunitate și nu direct de către Google. [9]

Fig. 6 Mediul de dezvoltare NetBeans cu plugin Android

2.4 Aplicații existente pe piață

În ziua de azi, există o sumedenie de aparate dedicate GPS, însă voi aminti doar câteva care intră în categoria celor dezvoltate și folosite pe smartphone-uri și care sunt similare aplicației prezentate.

2.4.1 AroundMe

Această aplicație găsește cea mai apropiată locație, în funcție de tipul de locație ales de utilizator, precum: bănci, spitale, benzinării, hoteluri ș.a.m.d. Oferă detalii avansate ale locațiilor, ca și strada și numărul, numărul de stele al hotelului, detalii de contact, descriere, link spre rezervare, prețuri. Frecvența de update a locațiilor pe hartă de către firmă este mică și multe locații sunt deci omise.

Un mare dezavantaj este că nu permite localizarea persoanei doar prin conexiune la internet, este neapărat nevoie ca GPS-ul să fie activat și conexiunea realizată. Aplicația conține reclame iar varianta premium a aplicației elimină acest aspect pentru 2$.

2.4.2 Near Me Locate and Navigate

Această aplicație caută locații din apropierea utilizatorului și arată ruta spre o locație selectată. Un număr mare de locații este afișat pe pagina principală.

Un click pe markeru unei locații deschide opțiunile de navigare: plimbare, bicicletă, condus sau transport public. Butonul de deasupra hărții afișează locațiile sub formă de listă. Căutarea și navigarea folosesc datele mobile în cazul în care nu există conexiune de rețaa wi-fi. Raza căutării se poate modifica iar acuratețea locației utilizatorului depinde numai de GPS sau alte servicii de localizare.

Aplicația oferă detalii despre locațiile descărcate și este complet gratuit.

2.4.3 Places

Places este poate cea mai completă aplicație din categoria sa. Găsește locații apropiate, creează ruta spre locația selectată, oferă posibilitatea de a explora locații înainte de a merge undeva și poate ajuta pe altcineva afișând locațiile de lângă persoana respectivă.

Dispune de o opțiune de căutare după adresă sau cuvinte-cheie și oferă detalii amănunțite despre locațiile afișate și chiar li sub formă de listă. Prin rețele mobile, WiFi sau prin GPS, aplicația va localiza utilizatorul.

Atunci când se pornește navigarea, aplicația deschide aplicația de bază Google Maps peste Places și navigarea începe în cadrul acesteia.

2.4.4 Find Near Me

Este o aplicație ușor de folosit, găsește locații apropiate, are o interfață plăcută și este gratis. Oferă opțiune de căutare, afișează detalii cum ar f adrese, numere de telefon, distanța de la locația curentă, posibilitatea de a căuta în alte orașe și suportă atît orientarea portret cât și peisaj.

Capitolul 3: TEHNOLOGII FOLOSITE

3.1 Java

3.1.1 Generalități

Java este un limbaj de programare concurent, ce folosește clase, orientat pe obiecte și proiectat să aibă pe atât de puține dependențe pe cât posibil. A fost gândit ca developerii de aplicații să scrie o singură dată codul și să îl poată rula oriunde “write once, run anywhere”, ceea ce înseamnă că ce a fost scris pentru o platformă să nu fie nevoie a fi compilat din nou pentru altă platformă.

Java este unul dintre cele mai populare limbaje de programare, folosit mai ales pentru aplicații web client-server, cu un număr de peste 9 milioane de developeri. [10]

3.1.2 Istoric

Proiectul Java a fost inițiat de James Gosling, Mike Sheridam și Patrick Naughton în anul 1991. Inițial, a fost proiectat să fie televiziune interactivă, dar a fost prea avansat pentru industria cablului digital TV de pe acea vreme. S-a numit la început Oak, după care a luat numele de Green și mai apoi Java, de la ceafeaua Java, care era consumată în cantități mari de creatorii limbajului. S-a dorit să se implementeze o mașină virtuală și un limbaj similar cu stilul de scriere C/C++.

Sun Microsystems a lansat prima implementare în 1995: Java 1.0. A promis a abordare “scrie odată, rulează oriunde”, reducând astfel costurile pentru rularea pe alte platform populare. Destul de securizat și oferind opțiuni de securitate configurabilă, acesta permite restricții de acesare de rețea și fișiere. Browsere web populare au adoptat repede abilitatea de a rula Java applets pe paginile web și Java a devenit repede popular.

Java se poate accesa sub două forme: SDK și JRE, cu diferența că JRE este o parte a SDK și se folosește doar pentru a rula aplicații, în timp ce SDK conține și compilator, programe de utilitate, debugger.

În 13 noiembrie 2006, Sun a lansat mare parte a implementărilor Java către public, fiind un software “free și open source”. În 8 mai 2007, Sun a terminat procesul, făcând public întregul cod Java, în afară de o mică parte pentru care Sun nu avea drepturi de autor.

Existau 5 scopuri principale în crearea limbajului Java:

Să fie „simplu, orientat pe obiecte și familiar”

Să fie „robust și securizat”

Să fie „neutru din punct de vedere architectural și portabil”

Să poată fi executat cu „performanțe mari”

Să fie „interpretat, cu fire de execuție și dinamic.”

Versiunile principale Java lansate, împreună cu data de lansare a lor:

JDK 1.0 (January 21, 1996)

JDK 1.1 (February 19, 1997)

J2SE 1.2 (December 8, 1998)

J2SE 1.3 (May 8, 2000)

J2SE 1.4 (February 6, 2002)

J2SE 5.0 (September 30, 2004)

Java SE 6 (December 11, 2006)

Java SE 7 (July 28, 2011)

Java SE 8 (March 18, 2014) [10]

3.1.3 De ce aleg dezvoltatorii software Java?

Java a fost testată, extinsă, rafinată și confirmată de o comunitate dedicată de developeri Java, arhitecți și pasionați. Java a fost astfel creată, să ofere posibilitatea de dezvoltare a aplicațiilor portabile, de performanță mare pe cea mai mare gamă de platforme. Pentru a face aplicațiile compatibile cu mai multe platforme, afacerea oferă mai multe servicii și o productivitate crescută a utilizatorului, comunicare și colaborare, și o reducere drastică a costurilor, atât pentru aplicațiile dezvoltate de întreprinderi dar și pentru cele ale consumatorului individual.

Java a devenit de neprețuit dezvoltatorilor, oferindu-le mai multe avantaje:

Să scrie software-uri pe o platformă și să o ruleze pe orice altă platformă

Sa creeze programe care pot rula în cadrul unui browser web și să acceseze servicii web disponibile

Să dezvolte aplicații server pentru forumuri online, magazine, sondaje

Să combine aplicații de servicii folosind limbajul Java pentru a crea aplicații sau servicii customizabile

Să scrie aplicații puternice și eficiente pentru telefoane mobile, microcontrollere, module wireless, senzori și practic orice alt dispozitiv electronic [10]

3.1.4 Platforma Java

O caracteristică a limbajului Java este portabilitatea, ce înseamnă că programele scrise pe calculator în Java trebuie să ruleze similar pe orice platformă hardware sau sistem de operare. Asta se realizează prin compilarea codului Java într-o reprezentare intermediară numită Java bytecode, în loc să compileze direct într-un cod mașină specific platformei. Instrucțiunile Java bytecode sunt analoage codului mașină, dar sunt destinate a fi interpretate de mașina virtuală (VM) scrise în mod special pentru hardware-ul gazdă. Utilizatorul folosește Java Runtime Environment (JRE) instalat pe propria mașină pentru aplicații pur Java, sau într-un browser web pentru Java applets.

Librăriile standardizate oferă un mod generic de accesare a facilităților specifice gazdei, cum ar fi grafica, utilizarea firelor de execuție și rețelistica.

Un mare avantaj al utilizării bytecode-ului este portabilitatea, însă acest lucru duce la un timp de execuție al programului mai mic pentru programele interpretate, spre deosebire de programele compilate în cod nativ. Compilatoarele Just-in-Time au fost introduse într-un stadiu incipient, care compilează bytecode-ul în cod mașină în timpul execuției. [10]

3.1.5 Implementări

Corporația Oracle este proprietarul actual al implementării platformei Java SE, imediat după cumpărarea a Sun Microsystems în ianuarie 2010. Această implementare este bazată pe implementarea originală a limbajului Java de către Sun. Implementarea Oracle este disponibilă pe Windows, Mac OS X, Linux și Solaris.

Implementarea Oracle este făcută sub forma a două distribuții: The Java Runtime Environment (JRE) ce conține părți a platformei Java SE necesare pentru rularea aplicațiilor Java și se îndreaptă spre utilizatorii de rând, și Java Development Kit (JDK), care se îndreaptă spre dezvoltatorii software, acesta incluzând unelte pentru dezvoltare, cum ar fi compilatorul Java, Javadoc, Jar și un debugger. [10]

3.1.6 Performanța

Programele scrise în Java au reputația de a fi mai încete și de a consuma mai multă memorie decât cele scrise în C++. Deși, viteza execuției programelor Java a crescut considerabil cu introducerea compilării Just-in-time în 1997/1998 pentru Java 1.1 și adăugarea suportului de analiză mai bună a codului și optimizări la mașina virtuală Java în sine, HotSpot devenind mașina virtuală Java de bază în anul 2000.

Unele platforme oferă suport direct Java pentru hardware; există microcontrollere care pot rula Java în hardware, și nu pe o mașină virtuală Java, și procesoare ARM care pot avea suport hardware pentru execuția de Java bytecode prin opțiunea Jazelle. [10]

3.1.7 Gestiunea automată a memoriei

Cum sugerează și numele, Garbage Collection, se referă la eliminarea obiectelor care nu se mai folosesc. Este un adevăr bine cunoscut că indiferent de scopul obiectelor, Java le stochează în memoria heap. Deci, dacă continuăm să creăm obiecte fără să golim memoria heap, calculatoarele noastre pot să rămână fără loc heap și să primim o eroare “Out of Memory”. Garbage Collector-ul în Java este un mecanism care este controlat și executat de mașina virtuală Java ce eliberează memoria heap ocupată de obiectele care nu mai sunt în uz. Spre deosebire de C++, garbage collecter-ul în Java îl scapă pe developer de efortul de gestiunea memoriei pentru activitățile asociate. JVM execută acest proces prin apelarea thread-ului “Garbage Colector”. Firul de garbage collector invocă la început metoda finalize a obiectului. Aceasta efectuează activitatea de curățare pe obiectul respective. Ca și dezvoltatori, nu putem forța JVM să ruleze firul de garbage collector, însă sunt metode (de ex. Runtime.gc() sau System.gc() ), dar niciuna dintre acestea nu asigură execuția firului garbage collector. Aceste metode se folosesc pentru a trimite cereri de garbage collector spre JVM. Rămâne însă la decizia mașinii virtual când va iniția procesul de garbage collection.

Memoria heap se împarte în 3 părți:

Generația nouă

Generația veche

Generația permanent

Generația nouă se împarte la rândul ei în alte trei părți numite spații Eden, Survivor 1 și Survivor 2. Un obiect viu se află în zona Eden iar după o un proces de garbage collection, dacă obiectul trăiește încă, este mutat în survivor 1 și mai apoi în survivor 2. În final, după un garbage collection mai mare, obiectul este mutat în generația veche.

În Java, garbage collector concurent folosește un singur fir de execuție ce rulează în tandem cu firele aplicației. Acesta are scopul de completare a colectării generației vechi înainte să ajungă plin. Dacă garbage collectorul concurent mai rulează și generația veche de heap este plină, aplicația este oprită și colectarea este completă cu toate firele aplicației oprite. Această colectare se mai numeste garbage collection complet.

Un obiect devine eligibil pentru a fi colectat dacă toate referințele sunt negate. În alte cuvinte, un obiect este ales de garbage collector dacă nu poate fi accesat de vreun fir de execuție ce trăiește sau dacă nu are vreo referință statică. Dacă două obiecte au dependență ciclică și niciun thread nu are referință la ele, atunci ambele obiecte sunt eligibile pentru procesul de garbage collection.

Procesul de garbage collection efectuează următoarele activități de bază:

Verică înainte dacă obiectele sunt eligibile sau nu pentru garbage collector

Odată ce obiectul a fost identificat, garbage collector revendică spațiul heap folosit de obiect și îl face din nou disponibil pentru program

Fig. 7 Model de garbage collection

Garbage collector elimină efortul dezvoltatorului de a goli manual memoria.

Alocarea activității de gestiune a memoriei executată de JVM are multe avantaje:

Dezvoltatorul poate să își aloce mai mult timp și energie pentru rezolvarea unor task-uri mai complexe, în timp ce la limbajele ce nu posedă garbage collector, dezvoltatorilor le vor lua ore, zile sau chiar săptămâni pentru a găsi o scrugere de memorie

Gestiunea memoriei de JVM asigură integritatea programului. Din moment ce eliberarea memoriei este complet manipulată de JVM, există șanse foarte mici ca developerul să distrugă JVM prin eliberarea memoriei care mai are încă niște referințe.

Ca și un dezavantaj, garbage collector consumă resurse extra pentru a decide ce memorie trebuie eliberată. Mașina virtuală Java urmărește toate obiectele și verifică care obiect are referințe spre acesta și care nu. Acest lucru duce la performanțe scăzute sau inegale, din moment ce o parte din procesor este mereu ocupată cu executarea acestei sarcini.

Fig. 3.1.7.1 Înainte și după garbage collection

3.1.8 Java și Android

Limbajul de programare Java necesită o platformă software pentru ca programele compilate să fie executate. Una dintre platformele software este platforma Java SE. O platformă software neoficială dar foarte populară este platforma software Android, care folosește un limbaj bytecode diferit și o mașină virtuală și este proiectat pentru dispozitive de memorie mică, cum sunt smartphone-urile și tabletele.

Google și Android, Inc. Au ales Java ca și pilonul de bază în crearea sistemului de operare Android, un sistem de operare open-source pentru smartphone-uri. Deși, sistemul de operare Android, construit pe Linux kernel a fost scris în mare parte de în C, Android SDK folosește limbajul Java ca bază pentru aplicațiile Android. Android nu folosește mașina virtuală Java, folosind în schimb Java bytecode ca și un pas intermediar pentru a folosi la final propria mașină virtuală Android numită Dalvik.

Android nu furnizează librăria completă standard Java SE, deși librăria de clase Android include o implementare independentă a unui mare subset al acestuia. [10]

3.2 Eclipse

Eclipse este un mediu integrat de dezvoltare. Conține unspațiu de lucru și un sistem extensibil de plug-in pentru customizare mediului. Scris în mare parte în Java, Eclipse poate fi folosit pentru a dezvolta aplicații. Prin plugin-uri, Eclipse poate fi folosit pentru dezvoltarea aplicațiilor în alte limbaje de programare: Ada, ABAP, C, C++, COBOL, Fortran, Haskell, JavaScript, Lasso, Natural, Perl, PHP, Prolog, Python, R, Ruby, Scala, Clojure, Groovy, Scheme și Erland. Poate fi folosit și pentru dezvoltarea pachetelor pentru software-ul Mathematica. Mediile de dezvoltare includ unelte de dezvoltare Eclipse Java (JDT) pentru Java și Scala, Eclipse CDT pentru C/C++ și Eclipse PDT pentru PHP, pe lângă altele.

Colecția inițială de cod a provenit de la IBM VisualAge. Pachetul de dezvoltare software Eclipse sau SDK, care include uneltele de dezvoltare Java, este menit pentru dezvoltatorii Java. Utilizatorii pot să își extindă abilitățile instalând plung-inuri scrise pentru platforma Eclipse, cum sunt alte suite de unelte de dezvoltare pentru alte limbaje de programare, și pot scrie și contribui cu propriile module de plug-in.

Pe lângă posibilitatea de extindere a platformei Eclipse folosind alte limbaje de programare cum ar fi C și Python, framework-ul de plugin-uri permite platformei Eclipse să lucreze cu limbaje typesetting (de aranjare în pagină) ca și LaTeX, aplicații de rețea cum e telnet și sisteme de gestiune a bazelor de date.

Cu excepția unui mic kernel de rulare, totul în Eclipse este un plug-in. Acest lucru înseamnă că fiecare plug-in dezvoltat integrează cu Eclipse în exact același fel ca și alte plug-inuri; astfel, toate caracteristicile sunt “create egal”. [5]

3.3 Android

3.3.1 Generalități

Android este un sistem de operare bazat pe kernelul Linux și dezvoltat în momentul actual de Google. Având o interfață bazată pe atingere directă, Android este proiectat pentru dispozitive mobile touchscreen cum ar fi smartphone-uri și tablete, cu interfețe grafice specializate pentru televiziune (Android TV), mașini (Android Auto), și ceasuri de mână (Android Wear). [2]

3.3.2 Interfața

Sistemul de operare folosește informațiile de intrare pe baza atingerii care corespund cu acțiunile din lumea reală, cum ar fi swiping, tapping, pinching și reverse pinching pentru a manipula pe ecran obiecte și o tastatură virtuală. Răspunsul la aceste date de intrare este proiectat a fi imediat și furnizează o interfață de atingere fluidă, folosind des capacitățile de vibrare al dispozitivului pentru a oferi feedback utilizatorului. Hardware-ul intern, cum sunt accelerometrul, giroscopul și senzorii de proximitate sunt folosiți de unele aplicații pentru a răspunde acțiunilor utilizatorului, de exemplu schimbând ecranul din modul portret în peisaj, în funcție de cum este dispozitivul orientat, sau permițând utilizatorul să conducă mașina dintr-un joc de curse prin rotația dispozitivului.

Meniul de pornire este similar cu sistemele de operare pentru PC. Ecranul de început conține icoane de aplicații și widegt-uri; icoanele de aplicație lansează aplicația asociată, în timp ce widget-urile afișează în timp real, informații ce se auto-updatează, cum ar fi prognoza meteo, căsuța electronică sau un afișor de știri. Mulți producători își customizează aspectul dispozitivelor Android pentru a se evidenția față de competitori.

O bară de stare este prezentă în partea de sus a ecranului, afișând informații legate de dispozitiv și de conxiuni, pe cum și notificări, actualizări. Acestea persistă pe această bară până când sunt citite sau înlăturate de către utilizator.

Android oferă posibilitatea de a rula aplicații care să schimbe launcher-ul de bază și prin urmare modul în care arată și comportamentul extern vizibil al Androidului. [2]

3.3.3 Aplicații

Android are o colecție de aplicații ce este într-o continuă creștere, care poate fi accesată de utilizatori prin magazinul de aplicații cum ar fi Google Play sau Amazon Appstore, sau prin descărcare și instalare al fișierului APK al aplicației de pe alte site-uri. Magazinul Google Play permite utilizatorilor să parcurgă, descarce și actualizeze aplicații publicate de Google și de utilizatori, iar aplicația client Play Store vine pre-instalată pe dispozitive care sunt se conformă cerințelor de compatibilitate Google și licenței software-ului Google Mobile Services.

Aplicațiile, ce extind funcționalitățile dispozitivelor, sunt dezvoltate în principal în limbajul de programare Java folosind suita software de dezvoltare Android (SDK). SDK conține un set complex de unelte de dezvoltare, incluzând un debugger, librării software, un emulator bazat pe QEMU, documentație, cod mostră și tutoriale. Există și alte unelte disponibile, printre care se enumeră Native Development Kit pentru aplicații sau extensii în C sau C++, Google App Inventor, un mediu vizual pentru programatori începători și diverse framework-uri pentru aplicații mobile bazate pe web.[2]

3.3.4 Gestiunea memoriei

Din moment ce dispozitivele Android sunt alimentate de baterii, Android este proiectat să gestioneze memorie (RAM) pentru a păstra consumul de putere la un nivel minim, în contrast cu sistemele de operare desktop care în general presupun că sunt conectate la surse nelimitate de energie electrică. Atunci când o aplicație Android nu mai este în uz, sistemul îl va suspenda imediat în memorie. În timp ce aplicația e în principiu tot “deschisă”, aplicațiile suspendate nu consumă resurse (baterie sau putere de procesare) și stau așteptând în fundal până va fi nevoie de ele din nou. Acest lucru are două beneficii, unul dintre ele fiind creșterea generală a reacției a dispozitivelor Android, din moment ce aplicațiile nu trebuie să fie închise sau redeschise din nou de fiecare dată și totodată asigură ca aplicațiile din fundal nu consumă energie deageaba.

Android gestionează aplicațiile stocate în memorie în mod automat: cand memoria e scăzută, sistemul va începe să omoare aplicațiile și procesele care au fost inactive pentru o perioadă de vreme, în ordine inversă de cum au fost utilizate (cele mai vechi prima dată). Acest proces este proiectat să fie invizibil utilizatorului, astfel încât utilizatorii nu trebuie să gestioneze memorie sau să distrugă aplicațiile în sine. Deși au fost dezvoltate aplicații de distrugere a task-urilor (sarcinilor), acestea nu sunt recomandat, ele creând de regulă mai multă daune decât soluționare.[2]

3.3.5 Hardware

Platforma principală hardware pentru Android este arhitectura ARMv7 32-bit. Proiectul Android-x86 oferă suport pentru arhitectura x86, iar Google TV folosește o versiune specială x86 de Android. Din noiembrie 2013, Android 4.4 recomandă cel puțin 512 MB RAM, în timp ce pentru dispozitive cu memorie RAM mică, este nevoie de 340 MB care nu include memoria dedicată a diferitelor componente hardware cum e procesorul basedand. Android 4.4 necesită ARMv7 32-bit, MIPS sau arhitectură de procesor x86, împreună cu OpenGL ES 2.0 compatibil cu unitatea de procesare grafică (GPU). Android suportă OpenGL ES 1.1, 2.0 și 3.0. Unele aplcații necesită în mode explicit o versiune al OpenGL ES, dar e nevoie și de hardware GPU corespunzător pentru a rula aplicațiile.

Dispozitivele Android incorporează multe componente hardware opționale, incluzând camere foto sau video, GPS, senzori de orientare, controale dedicate pentru jocuri, accelerometre, giroscoape, barometre, magnetometre, senzori de proximitate, senzori de temperatură, termometre și touchscreen-uri. Unele componente hardware nu sunt necesare, dar devin standard în cazuș unor grupe de dispozitive, cum sunt smartphone-urile. [2]

3.3.5.1 GPS

Global Positioning System (rom. sistem de poziționare globală; prescurtat GPS) este un sistem global de navigație prin satelit și unde radio, bazat pe o rețea de 24 sateliți plasați pe orbită de către Departamentul de Aparare al Statelor Unite (DOD) si pe stațiile lor de la sol. Sistemul GPS a fost inițial realizat pentru aplicații militare, însă in anii '80, Guvernul Statelor Unite a hotărât ca acest sistem să devină disponibil si pentru uz civil. GPS-ul functionează în orice condiții meteorologice, oriunde în lume, 24 ore pe zi. Nu necesită abonamente periodice sau taxe de instalare sau utilizare. Sistemul poate calcula poziția exactă = coordonatele geografice exacte ale unui obiect pe suprafața Pământului, cu condiția ca acesta să fie echipat cu dispozitivul necesar – un receptor GPS. Obiectul poate fi și o persoană, care poate astfel să se orienteze pe pământ, pe apă, în aer sau și în spațiu (în apropierea Pământului). [12]

3.3.5.1.2 Cum funcționează GPS-ul?

Principiul de funcționare al GPS-ului este folosirea câtorva sateliți din spațiu ca puncte de referință pentru localizarea la sol. Sateliții GPS înconjoară pământul de două ori pe zi, pe orbite foarte precis determinate și transmit semnale/informații către stațiile terestre. Receptoarele GPS culeg aceste informații și folosesc triangulații pentru a calcula localizarea exactă a utilizatorului. Mai exact, receptorul GPS compară timpii de transmisie a semnalului de la satelit si recepționare a acestuia. Diferența de timp este folosită de către receptorul GPS pentru calculul distanței la care se găsește satelitul. Printr-o măsurare foarte exactă a distanței in linie dreaptă dintre receptor si cel puțin 4 sateliți, se poate determina poziția oricărui punct de pe Pământ (latitudine, longitudine, altitudine).

Un receptor GPS trebuie să primească simultan semnale de la minimum trei sateliți pentru a putea calcula o poziție 2D (latitudine si longitudine) si track-ul. Dacă receptorul culege informații de la patru sau mai mulți sateliți, poate calcula o poziție 3D (latitudine, longitudine si altitudine). Este nevoie si de a patra distanță, pentru minimizarea erorilor de poziționare datorate ceasurilor din receptoare, care nu sunt suficient de exacte in comparație cu ceasurile atomice din sateliții utilizați.[12]

Receptoarele GPS din ziua de azi sunt foarte precise, datorită tehnologiei "parallel multi-channel". Receptoarele cu canale paralele culeg foarte rapid informația de la satelit de la prima pornire si memorează poziția astfel încât pot naviga cu succes chiar și în medii neprietenoase (de exemplu mediul urban, cu clădiri înalte). Anumiți factori atmosferici sau surse de erori pot afecta buna funcționare a receptoarelor GPS (întârzierile in ionosferă și troposferă, reflexia semnalului, erori orbitale sau datorate ceasului receptorului, geometria sateliților, numărul sateliților vizibili, etc.).[12]

3.3.5.1.3 Receptoare GPS

Un receptor GPS este orice aparat care primește semnal de la sateliți, cu scopul de a determina poziția curentă a acestuia pe Pământ.

După mediul în care se utilizează sau tipul activității desfășurate, receptoarele GPS se clasifică astfel:

on the road: navigații GPS, destinate automobilelor, motocicletelor sau camioanelor;

on the go: telefoane mobile, PDA-uri sau laptopuri, cu GPS încorporat;

on the trail: numite și "GPS-uri hand-held" (dispozitive ținute în mână), sunt dedicate pasionaților de natură, cu funcții pentru diversele activități: drumeții montane(Hiking), pescuit, vânătoare sau căutarea comorilor (Geocaching). Gama de produse este largă, de la aparate având doar funcția de bază a unui GPS (basic handhelds) si până la aparate complexe, încărcate cu hărți, sau dotate cu camere foto, ecrane touch-screen si multe alte funcții moderne.

on the fitness: pentru alergări (Running) – ceasuri cu capabilități GPS sau pentru ture cu bicicleta (Cycling);

on the water: navigație maritimă (chartplottere), fishfindere, radare, transceivere, etc.

in the air: pentru curse aeriene.

Dintre producătorii de receptoare GPS amintim: Garmin, Mio, Magellan, Lowrance, DeLorme, Navigon, Trimble, TomTom, TeleType sau Navman.

În zilele noastre, majoritatea aparatelor de pe piața telefoanelor mobile au GPS încorporat (Assisted GPS): Smartphone-uri, produse de HTC, Samsung, LG, etc. (sistem de operare Android, navigare cu Google Maps), Nokia (navigare prin Ovi Maps) sau iPhone-uri (navigare prin iGO, Navigon).[12]

3.3.5.1.4 Precizia sistemului GPS

Sateliții sistemului GPS emit două tipuri de semnale, PPS (Precise Positioning System), utilizat de armata americană, fiind un sistem foarte precis, așa cum indică și numele, precum si SPS (Standard Positioning Service), semnalul folosit pentru navigația civilă și comercială, deci de GPS-urile noastre de exterior. În mai puțin de trei ani, precizia aparatelor care folosesc acest semnal a crescut de la peste 50 de metri la aproape 3 metri. Ceea ce înseamnă, se înțelege de la sine, o ameliorare care riscă să rămână norma pentru încă câțiva ani buni. Să spunem întâi că precizia garantată de GPS este de 20 de metri în 95% dintre cazuri, dar în realitate precizia „normală” a unui GPS portabil este în limita a 15 metri. Ceea ce înseeamnă că poziția indicată de aparat va varia pe o rază de 10 sau 15 metri în raport cu poziția sa reală.

Factori care afectează precizia sistemului GPS:

Calitatea geometrică – Aceasta este determinată de poziția sateliților pe cer și unghiul pe care îl fac cu receptorul GPS. Astfel, cu cât sateliții sunt mai apropiați unul de celălalt, cu atât marja de eroare este mai mare. Acest factor este cu atât mai important cu cât se multiplică erorile cauzate de alți factori. La fel, cu cât sateliții disponibili se situează mai spre orizont, decât spre înaltul cerului, cu atât mai slabă va fi precizia poziției. Rezultatul va fi cu atât mai precis , cu cât undele sateliților vor forma între ele un unghi apropiat de 90°.

Multipath – Această eroare provine din faptul că undele se pot reflecta pe o suprafață înainte de a atinge receptorul și astfel afectează timpul necesar pentru a-l atinge, ceea ce provoacă o eroare în calculul poziției. Eroarea este de câțiva metri și variază în mod constant chiar dacă aparatul este imobil.

Zgomotul receptorului (receiver errors) – Această eroare este caracteristică fiecărui aparat. De aceea se întâmplă ca două GPS-uri aflate unul lângă altul să indice poziții diferite. Acest factor poate cauza o variație ce atinge 10 metri.

Condițiile atmosferice – Deși în general este neeglijabil, acest factor poate cauza o variație de la 10 la 20 metri. Interferențele din ionosferă și atmosfera terestră afectează viteza de propagare a undelor.[13]

3.3.5.1.5 Precizia verticală

Atunci când indică poziția, GPS-ul lucrează in două dimensiuni. Pentru a funcționa în trei dimensiuni și astfel, pentru a indica altitudinea, receptorul trebuie să capteze semnalul de la cel puțin un al patrulea satelit. Eroarea indicației de altitudine va fi de aproximativ 30 de metri. Anumite aparate sunt prevăzute cu un altimertu care folosește, mai degrabă decât semnalul sateliților, presiunea barometrică; astfel, ele indică o altitudine mult mai precisă.[13]

3.3.5.1.6 Aplicații cu GPS

a. Localizarea – determinarea unei poziții.

GPS-ul este primul sistem de localizare care oferă date extrem de precise pentru orice punct de pe planetă, pe orice vreme; fie numai pentru atât, aceasta poate fi considerată o utilitate majoră.

b. Navigația – deplasarea de la o locație la alta.

GPS-ul ne ajută sa determinăm exact unde suntem, dar câteodata e mai important să știm cum ajungem undeva. GPS-ul a fost special proiectat pentru a furniza informații de navigație pentru vapoare și avioane. În ziua de azi, vom găsi receptoarele GPS pe vase din întreaga lume, începând cu mici vase de pescuit și terminând cu vapoare, vase de croazieră sau iahturi. Punând la dispozitie aparate mult mai precise de navigație și sisteme precise de aterizare, GPS nu face doar zborul mai sigur, dar îl face și mai eficient; cu o navigație "punct-cu-punct" precisă, GPS economisește combustibil și mărește raza de acțiune a avionului, asigurând piloții că nu se abat de la cea mai directă rută către destinație. De asemenea și elicopterele medicale salvează minute în plus datorită preciziei navigației cu GPS.

Orientarea pe pământ este o artă veche și chiar o știintă. Stelele, busola sau o memorie bună a unor puncte de referință ajută la deplasarea de la o destinație la alta. Chiar și sfatul de la cineva aflat pe traseu ajută la orientare, dar punctele de referință se modifică, stelele își schimba poziția, iar busolele sunt afectate de magneți și vreme. În ziua de astăzi, călătorii, bicicliștii, schiorii, șoferii aplică tehnologia GPS în locul descoperirii traseului cu metode clasice.

c. Urmărirea – monitorizarea deplasării oamenilor și obiectelor.

Dacă navigația este procesul prin care se ghidează "ceva" dintr-un punct în altul, atunci urmărirea este procesul monitorizării lui în timpul deplasării. GPS-ul folosit împreună cu linii de comunicație și computere poate conferi coloana vertebrala pentru sisteme legate de aplicații din agricultură, tranzit greu, distribuție urbană, siguranța publică, urmărirea vehiculelor.

d.Maparea – crearea hărților pământului.

Trăim într-o lume mare și folosirea GPS pentru a supraveghea și mapa precis economisește timp și bani în cele mai multe din aplicații. Maparea este arta și știinta folosirii GPS pentru a identifica locuri și apoi a crea hărți și modele cu tot ce este în lume. Și când spunem totul ne referim la: munți, râuri, păduri și alte forme de relief, animale pe cale de dispariție, minerale prețioase și tot felul de resurse, accidente și dezastre, gunoi și comori arheologice.

e.Sincronizarea – prezentarea unei sincronizări precise.

Cu toate că GPS este cunoscut pentru navigație, urmărire și mapare, el mai este folosit și pentru răspândirea orei precise, a intervalelor orare și a frecvenței. GPS face ca "sincronizarea ceasurilor" să fie ușoară și de încredere.

Sateliții GPS sunt dotați cu ceasuri atomice extrem de precise. Ca sistemul să funcționeze, receptoarele GPS se sincronizează cu aceste ceasuri; aceasta practic înseamnă că fiecare receptor GPS este în esență un ceas atomic.

Astronomi, companii de electricitate, rețele de calculatoare, sisteme de comunicații, bănci, stații de radio și televiziune pot beneficia de această sincronizare precisă. O firmă de investiții bancară folosește GPS pentru a garanta că tranzacțiile se inregistrează în același timp la toate filialele din lume.[12]

3.3.5.1.7 Avantajele folosirii GPS pe smartphone

Ca avantaje ale Smartphone-urilor, putem menționa accesul la o multitudine de aplicații bazate pe GPS, care folosesc o diversitate mai mare de hărti, toate într-un buget mult mai redus decât în cazul GPS-urilor Handheld. O altă facilitate oferită de unele aplicații este opțiunea "Live Map" (nu e nevoie să ai hărți preinstalate pe cardul de memorie, tot ce ai nevoie este de o conexiune de internet pe mobil și poți afla toate detaliile legate de locația în care te găsești). Datele obținute se pot exporta ușor prin Bluetooth, mail sau alte mijloace moderne de comunicare (Facebook, Twitter, etc.)[12]

3.3.6 Planul de actualizare

Google oferă actualizări majore, importante, odată la fiecare șase până la nouă luni. Ultima versiune este Android 4.4 “KitKat”.

Coomparându-l cu sistemul de operare rival, numit iOS, actualizările Android ajung mai greu la dispozitive. Dispozitivile care nu sunt sub marca Nexus, primesc actualizări doar după luni întregi după ce versiunea a fost lansată oficial. Asta se datorează de o parte variațiilor în hardware a aparatelor Android, pentru care fiecare update trebuie schimbat, din moment ce codul sursă oficial Google rulează doar pentru dispozitivele Nexus. Portarea Androidului pe hardware specific este un proces ce consumă timp și resurse pentru producătorii de dispozitive care dau prioritate celor mai noi dispozitive și deseori le amână pe cele mai vechi. Așsadar, smartphone-urile mai vechi nu sunt actualizate atât de frecvent dacă producătorul decide că nu merită timpul investit, indiferent dacă telefonul este capabil să ruleze update-ul.

În 2012, Google a început să separe diferite aspecte ale sistemului de operare (în special aplicațiile de bază) pentru a putea fi actualizate prin Google Play Store. Unul dintre aceste aspecte, Google Play Service, este un proces closed-source de nivel de sistem ce oferă API-uri pentru serviciile Google, instalate automat aproape pe toate dispozitivele ce rulează Android 2.2 și mai nou. Cu aceste modificări, Google poate adăuga noi funcționalități ale sistemului de operare prin Play Services și actualizări de aplicații fără să fie nevoie să distribuie o actualizare pentru întregul sistem de operare. Ca urmare, Android 4.2 și 4.3 au conținut ceva mai puține schimbări vizibile de utilizator și s-au axat mai mult pe modificări mai mici și îmbunătățiri ale platformei.[2]

3.3.7 Nucleul Linux

Android constă dintr-un nucleu bazat pe suportul pe termen-lung al nucleului Linux (LTS). Din ianuarie 2014, versiunile Android actuale sunt construite pe nucleul Linux 3.4 sau mai nou, dar numărul versiunii specifice nucleului depinde de dispozitivul Android și de chipset. Android a folosit diverse nuclee de la primul 2.6.25.

Nucleul Linux de Android are mai multe modificări arhitecturale care sunt implementate de Google în afara ciclului de dezvoltare al nucleului Linux de bază, cum ar fi includerea componentelor ca și Binder, ashmem, pmem, logger, wakelocks și diferite gestionări a out-of-memory (OOM).

Memoria flash pe Android este divizată în mai multe partiții, ca și /system pentru sistemul de operare și /data pentru datele de utilizator și instalări de aplicații. În contrast cu distribuțiile Linux, proprietarii de dispozitive Android nu au acces root la sistemul de operare și partițiile ca și /system sunt read-only.

Android este o distribuție Linux potrivit Fundației Linux, șefului departamentului open-source al Google și multor jurnaliști. Alții, precum inginerul de la Google Patrick Brady, consider că Android nu este Linux în modul tradițional Unix ca și distriuțiile Linux; Android nu include librăria GNU C și multe alte component ce se găsesc în distribuțiile Linux.[2]

3.3.8 Securitatea

Aplicațiile Android rulează într-un sandbox, o zonă izolată care nu are acces la restul resurselor de sistem, doar dacă permisiunile de acces sunt acordate în mod explicit de utilizator când aplicația este instalată. Înainte de instalarea unei aplicații, Play Store afișează toate permisiunile necesare: un joc poate avea nevoie să activeze vibrarea sau să salveze pe un card SD, de exemplu, dar nu trebuie să citească mesaje SMS sau să acceseze lista de contacte. După vizualizarea acestor permisiuni, utilizatorul poate să le accepte sau să le refuze, instalând aplicația doar dacă le acceptă.

Permisiunile “App Ops” pentru aplicații, folosit pentru dezvoltare internă și testare de Google, a fost introdus în versiunea Android 4.3 pentru dispozitivele Nexus. Inițial ascuns, acest aspect a fost descoperit public; a permis utilizatorilor să instaleze o aplicație de gestionare și aprobare sau de refuzare a cererilor de permisiuni în mod individual pe un dispozitiv. Accesul la App Ops a fost mai târziu restricționat de Google începând cu Android 4.4.2 cu o explicație că acest aspect a fost pornit din greșală și nu s-a îndreptat spre utilzatorul de rând; pentru așa o decizie, Google a primit critici de la Electronic Frontier Foundation.

Printre caracteristicile de securitate al sistemului Android se numără:

Sandbox-ul de aplicații Android, ce izolează informațiile de aplicațe și execuția codului de alte aplicații

Un framework de aplicații cu o implementare robustă de funcționalitate securizată cum e criptografia, permisiuni

Tehnologii ca și ASLR, NX, ProPolice, safe_iop, OpenBSD dlmalloc, OpenBSD calloc și Linux mmap_min_addr pentru a mitiga riscurile asociate cu erorile de gestionare a memoriei

Un fișier-sistem encriptat care poate fi pornit pentru a proteja informații despre dispozitive pierdute sau furate

Permisiuni acordate de utilizator pentru a controla informații trimise aplicației [2]

3.3.8.1 Folosirea memoriei interne

Fișierele create pe memoria internă sunt accesibile doar pentru aplicația noastră. Această protecție este implementată de Android și este suficientă pentru majoritatea aplicațiilor.

Pentru a oferi mai multă protecție pentru informații, putem alege să criptăm fișierele locale folosind o cheie care nu este direct accesibilă din aplicație. De exemplu, o cheie poate fi plasată intr-un KeyStore și protejat cu o parolă de user care nu e stocată pe dispozitiv. Acest lucru poate oferi protecție atunci când dispozitivul se pierde fără o criptare de sistem a fișierelor. [14]

3.3.8.2 Folosirea memoriei externe

Fișierele create pe memoria externă, ca și cardurile SD, pot fi citite și scrise global. Pentru că memoria externă poate fi ștearsă de către utilizator și totodată modificată de orice altă aplicație, nu se recomandă stocarea informațiilor importante pe memoria externă.

Iar pentru informații din surse nesigure, se recomandă o validare a datelor de intrare atunci când se manipulează informații din memoria externă. [14]

3.3.8.3 Folosirea permisiunilor

Numărul de permisiuni pe care le cere aplicația trebuie să fie cât mai mic pentru ca dispozitivul și mai ales datele de pe el să fie securizate. Neavând acces la permisiuni sensibile, duce la reducerea riscurilor ca aceste permisiuni să fie folosite într-un mod nedorit și va deveni vulnerabil pentru atacatori. De obicei, dacă o permisiune nu este necesară pentru aplicație să funcționeze, nu o folosim.[15]

3.3.8.4 Folosirea rețelelor

Tranzacțiile în rețea sunt în mod inerent un risc pentru securitate pentru că implică transmiterea de informație care poate fi dăunătoare pentru utilizator. Oamenii sunt din ce în ce mai conștienți de grijile intimității a telefonului mobil, mai ales când dispozitivul execută tranzacții de rețea, deci e foarte important ca implementarea aplicației să fie cât mai bună pentru securitatea utilizatorului.[16]

3.3.8.5 Executarea validării datelor de intrare

Verificarea datelor de intrare este una din cele mai mari probleme de securitate ce afectează aplicațiile, indiferent de platforma pe care rulează. Android are astfel de contramăsuri la nivel de platformă care reduce expunerea aplicațiilor la probleme de validare a datelor de itnrare și ar trebui să folosească toată lumea acest lucru dacă este posibil.

Dacă se folosec informații în interogări care sunt trimise la o bază de date SQL sau un furnizor de conținut, injectarea SQL poate deveni o problemă. Cea mai bună apărare este de a folosi interogări parametrizate. Limitarea permisiunilor la numai-citește și numai-scrie poate reduce, la fel, potențialele daune cauzate de injectarea SQL.[17]

3.3.8.6 Manipularea informațiilor utilizatorului

De obicei, cea mai bună soluție pentru securizarea informației este de a minimiza folosirea API-urilor care accesează informații importante, personale. Dacă avem acces la informațiile unui utilizator și se poate evita stocarea sau transmiterea informației, nu se recomandă stocarea sau transmiterea informației. Dacă aplicația încearcă să acceseze informații personale, se recomandă verificarea dacă informația se trebuie trimisă la server sau dacă operația poate fi executată pe client. [18]

3.3.8.7 Folosirea WebView-ului

Pentru că WebView consumă conținut web ce poate include HTML și JavaScript, folosirea improprie poate introduce probleme de securitate de web obișnuite ca și cross-site-scripting (JavaScript injection). Android include un număr de mecanisme pentru reducerea șanselor de apariție acestor probleme prin limitarea capacității a WebView la funcționalitate minimă necesară de aplicație.[19]

3.3.8.8 Criptografia

Pe lângă posibilitatea de izolare a datelor, abilitatea de criptare full-filesystem și de securizare a canalelor de comunicare, Android mai oferp o gamp largp de algoritmi pentru protejarea informațiilor folosind criptografia.

Pentru criptare, nu se recomandă utilizarea algoritmilor dezvoltați de utilizatori, ci mai degrabă de folosirea acelor algoritmi de criptare care există deja, precum și cei în implementarea AES sau RSA, și folosirea unui generator securizat a numerelor. Folosirea unei chei care nu a fost creată cu un generator securizat de numere va duce șa scăderea puterii algoritmului si va putea primi atacuri offline.[20]

3.3.8.9 Folosirea comunicării interproces (IPC)

Unele aplicații încearcă să implementeze IPC folosind tehnici tradiționale Linux precum socket-uri de rețea și fișiere distribuite. Android încurajează utilizatorii să folosească în schimb funcționalități de sistem Android pentru IPC cum ar fi Intent, Binder sau Messenger cu un Service, și BroadcastReceiver. Mecanismul Android IPC permite utilizatorului să verifice identitatea aplicației conectându-se la IPC și setând metoda de securitate pentru fiecare mecanism IPC.[21]

3.3.8.10 Încărcarea dinamică a codului

Nu este recomandată încărcarea codului din afara APK al aplicației. Facând asta, va crește posibilitatea ca aplicația sa fie compromisă datorită injectării codului. Totodată, adaugă complexitate gestiunii versiunii și testării aplicației. Mai pe scurt, poate face ca verificarea comportării unei aplicații să fie imposibilă, și poate să devină interzisă în unele medii.[22]

3.3.8.11 Securitatea într-o mașină virtuală

Dalvik este mașina virtuală al Android. Dalvik a fost construit special pentru Android, dar multe dintre grijile legate de securizarea codului în alte malini virtuale se întâlnesc și la Android. În general, nu ar trebui ca utilizatorul să se îngrijoreze de probleme de securitate legate de mașina virtuală. Aplicația rulează într-un mediu sandbox securizat, și deci alte procese din sistem nu pot accesa codul sau informațiile private.[23]

3.3.8.12 Securitatea în cod nativ

Android încurajează dezvoltatorii să folosească Android SDK pentru dezvoltarea aplicațiilor, în loc să folosească codul nativ al Android NDK. Aplicațiile construite cu cod nativ sunt mai complexe, mai puțin portabile și cu o șansă mare de a conține erori de corupție a memoriei cum ar fi inundarea buffer-ului. Android este construit pe nucleul Linux iar fiind familiar cu mediul Linux este extrem de folositor dacă utilizatorul dorește să folosească codu nativ.[24]

3.3.8.13 Google Maps

Cu Google Maps Android API, se pot adăuga hărți pe aplicație pe baza datelor Google Maps. API-ul manipulează automat accesul către serverele Google Maps, descărcarea datelor, afișarea hărții și răspunsul la acțiunile hărții. Se pot folosi cereri API pentru a adăuga markere, poligoane, și straturi pe o hartă de bază, și pentru a schimba modul de vedere al utilizatorului pe o anumită parte a hărții. Aceste lucruri oferă informație adițională pentru locații de pe hartă, și permit interacțiunea utilizatorului cu harta. API-ul permite sa adăugăm aceste elemente grafice pe o hartă: markere, polilinii, poligoane etc. [25]

3.3.8.14 Chei API

Consola Google API este o interfață web folosită pentru gestiunea și vizualizarea datelor de trafic, autentificare, informații de facturare pentru API-uri Google care sunt folosite de către proiectul ales. În Console API, un proiect este o colecție de informație având un nume, ce conține: informații de auntentificare, adresa de mail a membrilor echipei, API-urile Google care sunt folosite de aplicație ș.a.m.d. Se pot crea propriile proiecte sau adăugate ca și vizualizator sau editor la proiectele existente create de alți dezvoltatori. În partea de sus a consolei este o listă-cascadă care afișează proiectele la care utilizatorul are acces, cum și comenzi pentru creare și gestiune a proiectelor.

API-urile reprezentate în consola Google API necesită ca cererile să includă un identificator unic de proiect. Acesta permite consolei să lege o cerere la un proiect ales pentru a monitoriza traficul, a aplica cote și gestiona facturări. Google suportă două mecanisme de creare a unui identificator unic de proiect: ID-uri client OAuth 2.0 și chei API.

Un ID client Oauth 2.0 poate genera un jeton de acces pentru o aplicație care folosește protocolu Oauth 2.0 pentru a apela API-uri Google. Jetonul conține un identificator care identifică în mod unic aplicația și permite consolei să atribuie trafic API corespunzător, cote și informații de factuare proiectului din consolă în care API-ul este pornit.

O cheie API este o cheie unică care se generează utilizînd Consola. Atunci când aplicația trebuie să cheme un API care e pornit în proiect, aplicația transmite această cheie în toate cererile API ca și un parametru key=API_key. Dreptul de utilizare al acestei chei nu necesită vreo interacțiune sau consimțământ, nu acordă acces informațiilor de cont și nu este folosit pentru autorizare.

Dacă se folosesc API-uri care necesită date de utilizator, cum ar fi Google Custom Search, atunci cheile API pot fi mai ușor de implementat. Cu toate astea, daca aplicația folosește deja un jeton de acces Oauth 2.0, atunci nu mai este nevoie de o generare de cheie API. De fapt, Google ignoră chei API trimise dacă un jeton de acces Oauth 2.0 este deja asociat cu proiectul corespunzător.

Dacă aplicațiile client nu folosesc Oauth 2.0, atunci trebuie inclusă o cheie API cu toate cererile API. E nevoie de o cheie API/proiect. O cheie API se creează prin alegerea unei dintre opțiunile următoare:

Fig.8 Opțiuni de generare a cheilor API

Consola permite crearea de chei API server, browser Android sau iOS. Odată creată cheia, dezvoltatorul poate resticționa unde poate fi folosită. Următoarele restricții depind de tipul de cheie ales:

Cheile server pot fi restricționate pe baza adresei IP a serverului

Cheile browser pot fi restricționate pe baza a “HTTP referrer”

Cheile Android pot fir restricționate pe bazate numelui de pachete și a aprentei SHA-1

Cheile iOS pot fi restricționate pe baza identificatorului de pachet

Cheile Android și cheile iOS sunt suportate doar de unele API-uri, cum ar fi Google Maps Android API sau respectiv, Google Maps SDK pentru iOS.

Proiectul dezvoltatorului poate prin urmare să aibă componente de tip server împreună cu componente mobile și sau browser, fără teama ca serverul/serverele să fie compromise dacă o cheie browser sau o cheie mobilă este compromisă.

Pentru crearea unei chei API Android este nevoie de amprenta SHA-1 certificat, care se poate afla, accesând din Eclipse meniul Windows -> Preferences -> Android -> Build sau prin rularea comenzii în terminal. [26]

keytool –exportcert –alias androiddebugkey –keystore path-to-debug-or-production-keystore –list –v

Pentru cheile Android și iOS, se adaugă valoarea afișată în secțiunea “API key” a consolei aplicației (de exemplu, ca și un atribut în fișierul AndroidManifext.xml).

Fig.9 Amprenta certificata SHA1

3.3.9 Grafică

Framework-ul Android are o varietate de API pentru rendare grafică pentru 2D și 3D care interacționează cu implementări HAL și drivere grafice, deci e important să se înțeleagă cum funcționează la un nivel mai înalt. Există două moduri în care dezvoltatorii de aplicații pot desena pe ecran: cu Canvas sau OpenGL.

android.graphics.Canvas este un API de grafică 2D și este cel mai folosit API de grafică de către utilizatori. Operațiile Canvas desenează toate View-urile în Android. Înainte de Android 3.0, Canvas folosea întotdeauna librăria Skia 2D pentru a desena (non-hardware).

Introdus în Android 3.0, accelerarea hardware pentru API de Canvas folosește o nouă librărie numită OpenGLRenderer care transformă operații Canvas în operații OpenGL pentru a putea fi executate pe GPU. Dezvotlatorii trebuiau să includă această funcționalitate, dar odată cu Android 4.0, accelerarea hardware Canvas era pornită deja. Prin urmare, un hardware GPU ce suportă OpenGL ES 2.0 este obligatoriu pentru dispozitive Android 4.0.

Cealaltă metodă prin care dezvoltatorii randează grafica este folosind OpenGL ES 1.x sau 2.0 pentru a randa direct pe o suprafață. Android oferă interfețe OpenGL ES în pachetul android.opengl pe care un dezvoltator îl poate apela în implementarea GL cu SDK sau cu API nativ din Android NDK.

Pentru a putea folosi grafică în aplicații este nevoie de:

Driver OpenGL ES 1.x

Driver OpenGL ES 2.0

Driver EGL Driver

Implementare Gralloc HAL

Implementare Hardware Composer HAL

Implementare Framebuffer HAL [27]

3.3.10 Evenimente de intrare

În Android, există mai mult decât o metodă de a capta evenimente de la interacțiunea utilizatorului cu aplicația. Când se dorește să se folosească evenimente în cadrul interfeței grafice, se recomandă să se captureze evenimentele de la obiectul View corespunzător. Clasa View oferă căile necesare pentru așa ceva.

Un auditor de eveniment este o interfață in clasa View ce conține o singură metodă de reapelare. Aceste metode vor fi apelate de framework-ul Android atunci când View-ul la care auditorul a fost înregistrat este activat de interacțiunea dintre utilizator și item ăn interfața grafică.

Printre metodele de reapelare din categoria auditoarelor se numără: onClick(), onLongClick(), onKey(), onTouch() etc. [28]

3.3.11 Licențierea

Codul sursă pentru Android este open source; este dezvoltat în privat de către Google, cu codul sursă lansat public atunci când o nouă versiune a Androidului este lansată. Google publică majoritatea codului (incluzând seturile de software de rețea și telefonie) sub licența Apache versiunea 2.0, care permite modificare și resdistribuire. Licența nu acordă drepturi mărcii “Android”, deci prodcătorii de dispozitive trebuie să o licențieze de la Google prin contracte individuale. Schimbările nucleului Linux asociate sunt lansate sub “copyleft GNU General Public License version 2”, dezvoltat de Open Handset Alliance, cu cocul sursă disponibil public oricând. De regulă, Google colaborează cu producătorii hardware pentru a produce un dispozitiv “pilot” (parte din seriile Nexus) cu o nouă versiune de Android, iar apoi fac codul sursă disponibil după ce dispozitivul a fost lansat. Singura versiune Android a cărei cod sursă nu a fost făcut public imediat după lansarea dispozitivului a fost 3.0 Honeycomb.

În timp ce întreg Androidul ăn sine este software open source, majoritatea dispozitivelor Android vin cu multe sotfware-uri, cum ar fi Google Mobile Services, care include aplicații ca și Google Play Store, Google Search și Google Play Services – un strat software care furnizeazp API-uri integrate cu serviciile oferite de Google. Aceste aplicații trebuie licențiate de la Google de către producătorii de dispozitive, și pot fi instalate doar pe dispozitive care sunt compatibile și respectă alte cerințe. [2]

3.3.12 Utilizarea platformei

Tabelul de mai jos oferă o categorizire a versiunilor Android. Aceasta se bazează pe dispozitivele ce accesează Play Store până în data de 12 august 2014 și deci, exclude derivatele Android care nu accesează Google Play.[2]

Fig. 10 Reprezentarea grafică și sub formă de tabel a folosirii versiunilor Android

3.4 Despre aplicațiile Android

Aplicațiile Android sunt scrise în limbajul de programare Java. Uneltele din SDK-ul Android compilează codul împreună cu orice informație și fișiere de resurse într-un APK: un pachet Android, care este o arhivă cu un sufix .apk. Un fișier APK conține toate componentele unei aplicații Android și este fișierul pe care dispozitivele Android îl folosesc pentru instalarea aplicațiilor.

Odată instalată pe dispozitiv, fiecare aplicație rulează în propriul “sandbox”:

Sistemul de operare Android este un sistem Linux multi-utilizator în care fiecare aplicație reprezintă un alt utilizator

Fiecare sistem asociază fiecărei aplicații un ID unic de utilizator Linux. Sistemul setează permisiunile pentru toate fișierele într-o aplicație astfel încât numai utilizatorul cu ID-ul asociat aplicației va putea să îl ruleze

Fiecare proces are propria mașină virtuală (VM), așa încât un cod al aplicației rulează izolat de alte aplicații

Fiecare aplicațoe rulează în propriul proces Linux. Android pornește procesul când oricare dintre componentele aplicației trebuie executate, apoi oprește procesul când nu mai este nevoie de el sau când sistemul trebuie să își recupereze memorie pentru alte aplicații

Astfel, sistemul implementează “principiul ultimului privilegiu”, care afirmă că fiecare aplicație are acces numai la componente care cer să își facă treaba și nimic mai mult. Acest lucru creează un mediu foarte protejat în care o aplicație nu poate accesa părți ale sistemului pentru care nu îi este dată vreo permisiune.

Chiar și așa, există metode pentru o aplicație să își distribuie informațiile cu alte aplicații și pentru o aplicație să acceseze servicii de sistem:

Se pot face ca două aplicații să aibă același ID de utilizator Linux și atunci sunt capabile să acceseze fișierele una alteia. Pentru a economisi resurse de sistem, aplicațiile cu același ID de utilizator pot să facă să ruleze în același proces Linux și să împartă aceeași VM (aplicațiile trebuie să fie semnate cu același certificat)

O aplicație poate cere permisiune să acceseze informații de dispozitiv cum sunt contactele, mesaje, memoria de stocară externă, camera, Bluetooth, și multe altele. Toate permisiunile trebuie acordate de utilizator în timpul instalării aplicației.[29]

3.4.1 Componente de aplicație

Componentele aplicației reprezintă blocurile de construcție importante ale unei aplicații Android. Fiecare componentă este un punct diferit prin care sistemul poate să intre în aplicație. Nu toate componentele sunt puncte de intrare pentru utilizator și câteva depinde una de alta, dar fiecare există ca și propria entitate și joacă un rol bine definit – fiecare este un bloc de construcție unic care ajută să definească comportamentul general al aplicației.

Există patru tipuri de componente ale aplicației:

Activitățile – un singur ecran cu o interfață grafică. De exemplu, o aplicație de email poate avea o activitate ce afișează o listă de email-uri noi, iar o altă activitate pentru crearea unui email și unul pentru citirea scrisorilor. Chiar dacă activitățile lucrează împreună, fiecare este independentă una de alta. Și așadar, o aplicație diferită poate porni oricare din aceste activități. O activitate se implementează ca o subclasă a clasei Activity.

Servicii – o componentă ce merge în fundal pentru a executa operații de timp îndelungat sau pentru a executa lucru pentru procese de la distanță. Un serviciu nu oferă o interfață grafică. De exemplu, un serviciu poate reda muzica pe fundal în timp ce utilizatorul este într-o altă aplicație sau s-ar putea să extragă informații de pe rețea fără să blocheze interacțiunea utilizatorului cu vreo activitate. O altă componentă, cum ar fi o actvititate, poate porni serviciul și să îl lase să ruleze sau să se lege de eal pentru a putea interacționa cu ea.

Furnizorii de conținut gestionează un set distribuit de informații de aplicații. Se pot stoca informații în fișierul sistem, o bază de date SQLite, pe web, sau oice altă locație de stocare care poate fi accesată de aplicație. Cu ajutorul furnizorului de conținut, alte aplicații pot interoga sau chiar să modifice informațiile. Spre exemplu, Android oferă un furnizor de conținut ce gestionează informațiile de contacte ale utilizatorului. Ca atare, orice aplicație cu permisiunile potrivite poate interoga părți ale furnizorului de conținut pentru a citi și scrie informație despre o anumită persoană.

Receptori de broadcast – niște componente ce răspund la o varietate de anunțuri broadcast. Multe “broadcast” provin din sistem – de exemplu, un broadcast ce anunță că ecranul s-a închis, că nivelul bateriei este scăzut sau că o poză a fost făcută. Aplicațiile pot să creeze broadcasts – de exemplu, să permită altor aplicații să știe că unele informații au fost descărcate pe dispozitiv și sunt libere să fie folosite. Deși anunțurile broadcast nu afișează interfețe grafice, ele pot crea notificări în bara de stare pentru a atenționa utilizatorul când apare se întâmplă vreun eveniment anunțat de broadcast.

O caracteristică unică a sistemului Android este că orice aplicație poate porni o componentă a unei alte aplicații. De exemplu, dacă utilizatorul dorește să captureze o poză cu camera foto a dispozitivului, există probabil o altă aplicație care face asta iar aplicația utilizatorului poate folosi asta, în loce să dezvolte utilizatorul o activitate ce capturează o poză. Se poate pur și simplu porni activitatea din aplicația de camera foto care capturează poze.

Când sistemul pornește o componentă, acesta pornește întregul proces pentru aplicație și instanțiază clasele necesare componentei. Spre exemplu, dacă o aplicație pornește activitatea în aplicația camerei foto, activitatea ce rulează în proces aparține aplicației-cameră, și nu în procesul aplicației. Așadar, spre deosebire de alte aplicații din alte sisteme de operare, aplicațiile Android nu au un singur punct de intrare (funcția main()).[29]

3.4.2 Activarea componentelor

Trei din cele patru componente – activități, servicii și receptori de broadcast – sunt activate de un mesaj asincron numit intent. Intenturile leagă componente individuale una de alta la execuție, dacă componenta aparține aplicației utilizatorului sau alteia.

Un intent este creat cu obiectul Intent, ce definește un mesaj să activeze o componentă specifică sau un tip specific de componentă – un intent poate fi explicit sau respectiv, implicit.

Pentru activități și servicii, un intent este o acțiune ce se execută și poate specifica URI al informației după care să se manifeste. De exemplu, un intent poate transmite o cerere pentru o activitate să afișeze o imagine sau să deschidă o pagină web. În unele cazuri, se poate porni o activitate pentru a primi un rezultat, caz în care, activitatea returnează și ea rezultatul înt-un Intent.

Pentru receptoare broadcast, intentul reprezintă anunțul fiind trimis, afișat.

Celălalt tip de componentă, furnizorul de conținut, nu este activat de intent, ci mai degrabă este activat atunci când e referit de o cerere de la ContentResolver.

Existe mai multe metode pentru activarea celor două tipuri de componente:

Pornirea unei activități, prin transmiterea unui Intent la startActivity() sau startActivityForResult (când dorim ca activitatea să returneze ceva)

Pornirea unui serviciu prin transmiterea unu Intent la startService()

Inițierea unui broadcast transmițând un Intend unei metode ca și sendBroadcast()

Executarea unei interogări unui furnizor de conținut apelând query() pe un ContentResolver[29]

3.4.3 Fișierul Manifest

Înainte ca Android să poată porni o componentă de aplicație, sistemul trebuie să știe dacă componenta există. Acest lucru se face prin citirea fișierului AndroidManifest.xml. Aplicația dezvoltată trebuie să declare toate componentele sale în acest fișier care trebuie să fie la baza aplicației în directorul proiectului de aplicație.

Fișierul manifest mai face o sumedenie de lucruri în afară de declararea componentelor aplicației, cum ar fi:

Identifică orice permisiune de utilizator cerută de aplicație (acces la internet sau acces la contactele utilizatorului)

Declară nivelul minim API necesar de către aplicație, bazat pe versiunea API care folosește aplicația

Declară săecificațiile hardware și software folosite sau cerute de aplicație (de exemplu camera, servicii bluetooth sau ecran multitouch)

Librării API ce sunt necesare, de exemplu librăria Google Maps[29]

3.4.3.1 Declararea componentelor

Fișierul manifest se ocupă cu informarea sistemului despre componentele aplicației. De exemplu, fișierul manifest poate declara o activitate în felul următor:

<?xml version="1.0" encoding="utf-8"?>
<manifest … >
    <application android:icon="@drawable/app_icon.png" … >
        <activity android:name="com.example.project.ExampleActivity"
                  android:label="@string/example_label" … >
        </activity>
        …
    </application>
</manifest>

În elementul <application>, atributul android:icon se referă la resursele pentru o icoană ce se identifică cu aplicația. În elementul <activity>, atributul androi:name indică numele întreg calificat de clasă al subclasei Activity.

Activitățile, serviciile și furnizorii de conținut care sunt incluși în sursă dar nu sunt declarați în fișierul manifest nu sunt vizibili sistemului și deci nu vor putea rula niciodată. În schimb, receptorii de broadcast pot fi ori declarați în fișierul manifest sau creați dinamic în code (ca și obiecte BroadcastReceiver) și înregistrate în sistem prin apelarea metodei registerReceiver().[29]

3.4.3.2 Declararea capacităților componentelor

Pentru pornirea unei activități, serviciu sau receptor broadcast se specifică numele componentei-țintă în intent. Intentul implicit descrie tipul de acțiune ce trebuie executat și permite sistemului să găsească o componentă pe dispozitiv care poate să efectueze acțiunea și să o pornească. Dacă sunt componente multiple care pot efectua acțiunea descrisă de către itnent, atunci utilizatorul selectează cel pe care îl dorește să îl folosească.

Modul în care sistemul găsește componente care pot să răspundă la un intent este prin compararea intentului primit la “filtrele intent” aflate în fișierul manifest al altor aplicații de pe dispozitiv.

Atunci când se declară o activitate în fișierul manifest al aplicației, se pot include și filtre de intent care declară capacitățile activității pentru a putea răspunde obiectelor intent din aplicații.

Declararea unui filtru pentru intent pentru crearea unei activități de creare a unui mail nou:

<intent-filter>
                <action android:name="android.intent.action.SEND" />
                <data android:type="*/*" />
                <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

Se poate seta un filtru să răspundă la intenturi “send” iar dacă o altă aplicație creează un intent cu acțiunea ACTION_SEND și îl trimite la startActivity(), sistemul s-ar putea să ponească activitatea așa încât utilizatorul să poată schița și trimite un email.[29]

3.4.3.3 Declararea cerințelor de aplicație

Există o gamă larga de dispozitive Android și nu toate oferă aceleași tehnologii și capabilități. Pentru a preveni instalarea aplicației pe dispozitive ce nu conțin tehnologii necesare pentru rularea aplicației, este important să se defineascp un profil pentru tipurile de dispozitive pe care le suportă o aplicație prin declararea cerințelor de dispozitive și cerințelor software în fișierul manifest. Multe dintre aceste declarații sunt strict informaționale și sistemul nu le citește, dar servicii externe ca și Google Play le citește pentru a putea furniza filtrare pentru utilizatori când caută aplicații de pe dispozitiv.

De exemplu, dacă o aplicație are nevoie de cameră foto și folosește API de versiune Android 2.1, aceste cerințe trebuie declarate în fișierul manifest astfel:

<manifest … >
    <uses-feature android:name="android.hardware.camera.any"
                  android:required="true" />
    <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="19" />
    …
</manifest>

În acest fel, dispozitivele care nu posedă cameră foto și au Android de versiune mai mică decât 2.1 nu pot instala aplicația de pe Google Play. Cu toate acestea, putem declara că aplicația folosește camera, dar nu are nevoie de ea. Astfel, aplicația trebuie să seteze atributul required pe “false” și să verifice la execuție dacă dispozitivul are cameră foto și să blocheze orice ce are legătură cu camera foto. [29]

3.4.4 Resursele unei aplicații

Aplicația Android este compusă din cod. Ea necesită resurse care sunt separate de codul sursă, cum sunt imaginile, fișierele audio și orice legat de prezentarea vizuală a aplicației. Spre exemplu, trebuie definite animațiile, meniurile, stilurile, culorile și aspectul interfeței grafice cu fișiere XML. Folosind resurse de aplicație, actualizarea caracteristicilor aplicației va deveni mai ușoară, fără să fie necesară o modificare a codului și ajută la optimizarea aplicației pentru o gamă mare de configurații de dispozitive (rezoluții diferite, limbi diferite).

Pentru fiecare resursă inclusă în proiect, uneltele de construire SDK definesc un număr între unic ID, care poate fi folosit pentru a face referință resursei de la codul aplicației sau de la alte resurse definite în XML. De exemplu, dacă aplicația conține un fișier imagine numit logo.png, uneltele SDK generează o resursă ID numită R.drawable.logo, care poate fi folosită pentru a face referintă la imagine și folosită în interfața aplicației.

Cel mai important avantaj al furnizării resurselor separat de codul sursă este posibilitatea dezvoltatorului de a furniza resurse pentru diferite configurații de dispozitive. De exemplu, prin definirea șirurilor de caracter pentru interfața grafică în XML, dezvoltatorul poate traduce șirurile în alte limbi și să salveze acele șiruri în fișiere separate. Apoi, bazat pe setările de limbă ale utilizatorului, aplicația va alege limba potrivită.[29]

3.4.5 Gestiunea cliclului de viață al unei activități

Sistemului Android îi este permis să recicleze componente pentru eliberarea memoriei. O activitate poate fi în stări diferite care sunt descris astfel:

Tabel 1 Stările în care se poate afla o activitate de-a lungul vieții

Utilizatorul nu ar trebui să observe dacă o activitate care încă face parte dintr-o activitate a fost terminată sau nu. Pentru acest lucru, dezvoltatorul are nevoie să stocheze starea activității la momentul potrivit și să îl restabilească. Totodată ar trebui să oprească orice acțiune nenecesară dacă activitatea nu mai este vizibilă pentru salvarea reurselor de sistem.

Când o activitate trece dintr-o stare în alta, este notificată de mai multe metode de reapelare. Toate metodele de reapelare sunt cârlige care se pot suprascrie pentru a realiza sarcina potrivită atunci când activitatea se schimbă. Metodele acestea sunt descrise în codul de mai jos: [29]

public class ExampleActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // The activity is being created.
    }
    @Override
    protected void onStart() {
        super.onStart();
        // The activity is about to become visible.
    }
    @Override
    protected void onResume() {
        super.onResume();
        // The activity has become visible (it is now "resumed").
    }
    @Override
    protected void onPause() {
        super.onPause();
        // Another activity is taking focus (this activity is about to be "paused").
    }
    @Override
    protected void onStop() {
        super.onStop();
        // The activity is no longer visible (it is now "stopped")
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        // The activity is about to be destroyed.
    }
}

Aceste metode definesc întregul ciclu de viață al unei activități. Prin implementarea acestor metode, dezvoltatorul poate monitoriza trei bucle imbricate în ciclul de viață al activității:

Întreaga durată de viață a unei activități are loc între apelarea metodei onCreate() și apelarea metodei onDestroy()

Cliclul de viață vizibil al unei activități ce se întâmplă între apelarea metodei onStart() și apelarea metodei onStop(). În această perioadă, utilizatorul poate vedea activitatea pe ecran și să interacționeze cu ea. De exemplu, onStop() este apelat când o activitate nouă începe și acesta nu va mai fi vizibil. Între aceste două metode, se pot păstra resurse de care va fi nevoie pentru a arăta activitatea utilizatorului.

Durata de viață “foreground” a unei activități are loc între apelarea metodei onResume() și apelarea metodei onPause(). În această vreme, activitatea este în fața tutorur celorlalte activități pe ecran și utilizatorul și așteaptă date de intrare. O activitate poate tranziționa frecvent în și înafara foreground-ului. De exemplu, onPause() este apelat când dispoizitivul este oprit sau când apare un dialog. [30]

Figura următoare ilustrează aceste cicluri și căile pe care le ai o activitate între aceste stări. Dreptunghiurile reprezintă metodele de reapelare care se pot implementa pentru a executa oeprații atunci când activitatea trece dintr-o stare în alta.

Fig. 11 Ciclul de viață al unei aplicații

Atunci când o activitate este stopată sau pauzată, starea activității este reținută; obiectul Activity este ținut în memorie atunci când este pauzat sau stopat – toate informațiile despre membri și starea curentă trăiește încă. Așadat, orice modificare făcută de utilizator în tot acolo. Cu toate acestea, atunci când sistemul distruge o activitate pentru a-și recăpăta memorie, obiectul Activity este distrus și sistemul nu poate pur și simplu să îl reia cu starea lui intactă. În schimb, sistemul trebuie să creeze un obiect Activity dacă utilizatorul navighează înapoi la el. Utilizatorul nu este conștient că sistemul a distrus activitatea și l-a recreat și, deci, probabil se așteaptă ca activitatea să fie exact la fel cum a fost. În această situație, se asigură că informație importantă despre starea activității este reținută prin implementarea unei metode de reapelare adițională care permite utilizatorului să salveze informația despre starea activității: onSaveInstanceState().

Fig. 12 Cele două moduri în care o activitate revine la focus utilizator cu starea intactă

Sistemul apelează onSaveInstanceState() înainte de a face activitatea vulnerabilă distrugerii. Sistemul transmite acestei metode un Bundle în care se poate salva informația de stare despre activitatea ca și perechi nume-valoare, folosind metode ca și putString() și putInt(). Apoi, dacă sistemul omoară procesul aplicației și utilizatorul navighează înapoi către activitate, sistemul reface activitatea și transmite Bundle-ul la onCreate() și onRestoreInstanceState(). Folosind oricare din aceste metode, se pot extrage stările salvate de la Bundle și restabili starea activității. Daca nu există informație de stare care să fie restabilită, atunci Bundle-ul trimite null.

Capitolul 4: PROIECTARE ȘI IMPLEMENTARE

4.1 Arhitectura aplicației

În această lucrare este prezentată o aplicație de localizare și orientare cu GPS pentru autovehicule. Aplicația localizează utilizatorul în momentul curent și în funcție de decizia luată de utilizator, traseul cel mai scurt la o destinație din apropiere va fi desenat pe hartă.

Fig. 13 Arhitectura aplicației

În figura de mai sus este prezentată arhitectura generală a aplicației. Aplicația funcționează astfel: utilizatorul este localizat prin rețea mobilă, WiFi sau GPS, aplicația afișează toate locațiile dintr-o categorie aleasă de utilizator și găsește cea mai scurtă cale spre cea mai apropiată locație.

4.3 Modelare prin diagrame UML

Limbajul de modelare unifica (UML) este un limbaj de modelare cu scop general în domeniul ingineriei software, care a fost proiectat să ofere o cale standard de vizualizare a design-ului sistemului. Se recomandă ca această modelare să se facă înainte de dezvoltarea fizică a programului. Printre diagramele cele mai importante și care vor fi vizate aici, se enumeră:

Diagrama cazurilor de utilizare. Un caz de utilizare iludtrează o unitate de funcționalitate furnizată de sistem. Rolul principat al unei diagrame use-case este de a ajuta echipele de dezvoltare să vizualizeze cerințele funcționale ale unui sistem, incluzând relația “actorilor” (persoanelor ce vor interacționa cu sistemul) cu procesele esențiale, precum și relațiile dintre diferite cazuri de utilizare. Diagramele use-case ilustrează în general grupuri de cazuri de utilizare – ori toate cazurile de utilizare pentru întreg sistemul, ori o parte a unui grup particular de cazuri de utilizare cu funcționalități asociate. [31]

Diagrama claselor este un tip de diagramă de structură statică care descrie structura unui sistem arătând clasele sistemului, atributele lui, metodele și relațiile dintre obiecte. [32]

Diagrama de secvențe arată un flux detaliat pentru un caz de funcționalitate sau doar o pentru o parte a unui caz de funcționalitate. Aceasta arată apelurile făcute între diferitele obiecte în secvența în care se află și pot arăta, la un nivel detaliat, diferitele apeluri spre diferite obiecte.

4.2.1 Diagrama de clase

Fig. 14 Diagrama de clase

Clasa MainActivity extinde clasa Fragment Activity și extinde clasa LocationListener.

Când aplicația pornește, aceasta localizează locația utilizatorului prin tehnologia GPS dacă aceasta este pornită sau prin date mobile dacă nu este. În Anexa 1, s-a setat un listener pe buton, iar în momentul în care acesta este apăsat, se construiește un URL care va fi trimis la serverul Google ca și un request pentru a primi locațiile cerute. URL-ul este construit din linkul Google APIs specificat, urmat de locația utilizatorului, raza în care se va face requestul pentru locații, tipul locațiilor și cheia API. Cheia API necesară pentru încărcarea hărților Google se genearează prin accesarea consolei https://code.google.com/apis/console/ :

Fig. 15 Meniu principal consolă Goole APIs

Din meniul principal, se poate vedea starea API-urilor active. Se alege opțiunea API Access pentru a vizualiza codurile existente,

Fig. 16 Lista cheilor API

Apoi, se creează cheia Android API în funcție de amprenta SHA1 urmată de numele pachetului:

Fig. 17 Cerere cheie API pe baza amprentei SHA1

După această etapă site-ul revine în meniul cu cheile API, cheia nouă apărând în listă dacă amprenta SHA1 și pachetul au fost corect:

Fig.18 Lista cheilor API cu cheia nou creată

Se procedează la fel și pentru o cheie browser, necesară pentru Google Places.

Includerea cheilor în aplicație nu este însa de ajuns, serviciile Google Maps Android v2 și Places API trebuie activate din meniul Services.

Fig. 19 Lista serviciilor Google

În funcție de tipul de locație ales de către utilizator, se vor descărca locațiile corespunzătoare.

În Anexa 2 este prezentată metoda prin care se descarcă de pe serviciul web atât locațiile cât și direcțiile provenite de la serverul Google.

În Anexa 3, se parsează locație și se adaugă toate într-o listă, urmând apoi parsarea locațiilor în obiecte JSON. Se extrag date precum numele locației, vecinătatea și coordonatele de longitudine și latitudine.

După ce locațiile au fost descărcate, parsate și memorate, se vor extrage longitudinile și latitudinile din obiectele JSON pentru a putea trasa căile și pentru a găsi cea mai mică distanță din categoria aleasă (Anexa 4).

Google Maps Directions API furnizează un mod de a retrage informații despre direcții de la back-end spre deosebire de versiunea originală JavaScript acolo unde se pot descărca informațiiloe de la browser. Google oferă rezultatele de rutare sub forma unor polilinii codificate. Astfel, este necesară o metodă de decodificare a poliliniilor (Anexa 5).

Metoda cu care se creează direcțiile între două puncte este afișată în anexa 6. Imediat apoi, se compară distanțele pornind de la poziția curentă și se alege locația cea mai apropiată în funcție de acestea.

Fișierul de bază al oricărei aplicații Android este AndroidManifest.xml. Aici se află toate permisiunile (acces la internet, la diverse tehnologii), este specificată versiunea minimă de Android pe care poate rula, conține coduri API (necesar aici pentru încărcarea hărțlor Google) și alte setări (Anexa 7). Este scris în XML, la fel ca și fișierul din dosarul layout, care modelează modul în care apar elementele pe ecran elementele cu care interacționează utilizatorul (Anexa 8).

4.2.2 Diagrama de secvențe

4.2.3 Diagrama cazurilor de folosire reprezintă o ilustrație a tutoror scenariilor posibile, referitoare la comunicarea între sistem și actorii externi.

Fig. 20 Diagrama Use Case

CAPITOLUL 5: TESTARE ȘI VALIDARE

Testarea este o investigație realizată cu scopul de a oferi informație despre calitatea produsului, de a verifica dacă produsul testat funcționează conform așteptărilor.

Pentru a rula aplicația pe telefon, trebuie instalat driver-ul USB pentru telefon, modul de depanare trebuie pornit iar librăriile necesare incluse:

Fig. 16 Librării necesare pentru rularea aplicației

Meniul principal întâmpină utilizatorul cu harta ce se încarcă, în cazul în care există conexiune WiFi sau rețele mobile active.

Din listă, utilizatorul își poate alege tipul de locații dorit iar apoi prin apăsarea butonului Find, se va găsi cea mai apropiată rută spre cea mai apropiată locație.

Fig. 17 Harta încărcându-se

Fig. 18 Tipuri de locații

Fig. 19 Harta cu locațiile găsite și ruta trasată

Fig. 20 Detalii despre locația aleasă

CAPITOLUL 6: CONCLUZII

Aplicația descrisă mai sus rulează pe sistemul Android, localizează utilizatorul și îl direcționează spre o locație aleasă. Procesul de localizare este îndeplinit cu ajutorul serviciului de localizare Google, dar doar dacă serviciul GPS este oprit pe telefon. Pornirea GPS-ului pe telefon va rezulta cu o localizare mai precisă.

Spre deosebire de alte aplicații, aceasta nu s-a dorit a îndruma utilizatorul spre vreo locație anume, ci către cea mai apropiată din categoria selectată, astfel încât timpii morți pentru luarea deciziei pentru selectarea locației să fie eliminată în favoarea unei direcționări mai rapide în cazul unor urgențe, de exemplu spre locațiile corespunzătoare: spital, benzinarie, stații de autobuz, bănci.

Ca dezavantaj, numărul de locații și localizarea locațiilor în sine nu reprezintă niște date prea exacte. Google Places nu are în baza de date toate locațiile curente la zi iar unele sunt omise.

Dacă utilizatorul are o conexiune de internet mai puțin stabilă, descărcarea locațiilor poate fi împiedicată. Numărul de locații de pe raza analizată de pe hartă poate afecta procesul computațional pentru calcularea traseelor, acesta fiind unul greoi deja. O optimizare al acestui aspect poate fi realizat ca și o extindere a aplicației.

Bibliografie

[1] “What is Java?”

http://searchsoa.techtarget.com/definition/Java

[2] “Android (sistem de operare)

http://ro.wikipedia.org/wiki/Android_(sistem_de_operare)

[3] “What is iOS?”

http://whatisios.org/

[4] „iOS“

http://en.wikipedia.org/wiki/IOS

[5] „Eclipse – software“

http://en.wikipedia.org/wiki/Eclipse_(software)

[6] http://en.wikipedia.org/wiki/Android_Studio

[7] „IntelliJ IDEA“

http://en.wikipedia.org/wiki/IntelliJ_IDEA

[8] „Developing applications for Android in IntelliJ IDEA“

http://wiki.jetbrains.net/intellij/Developing_applications_for_Android_in_IntelliJ_IDEA

[9] „What’s the big IDE? Comparing Eclipse and NetBeans“

http://www.theserverside.com/feature/Whats-the-Big-IDE-Comparing-Eclipse-vs-NetBeans

[10] „Java (programming language)“

http://en.wikipedia.org/wiki/Java_(programming_language)

[11] „How garbage collection works in Java“

http://mrbool.com/how-garbage-collection-works-in-java/28044

[12] „Ce este și cum alegi un GPS”

http://www.demunte.ro/articole/ce-este-si-cum-alegi-un-gps_12

[13] Jean-Marc Lord, Andre Pelletier, “Hărți, busole și GPS”, Editura M.A.S.T., 2012

[14] “Storing Data”

http://developer.android.com/training/articles/security-tips.html#StoringData

[15] „Permissions“

http://developer.android.com/training/articles/security-tips.html#Permissions

[16] „Using Networking“

http://developer.android.com/training/articles/security-tips.html#Networking

[17] „Performing Input Validation“

http://developer.android.com/training/articles/securitytips.html#InputValidation

[18] „User Data“

http://developer.android.com/training/articles/security-tips.html#UserData

[19] „Using WebView“

http://developer.android.com/training/articles/security-tips.html#WebView

[20] „Crypto“

http://developer.android.com/training/articles/security-tips.html#Crypto

[21] „IPC“

http://developer.android.com/training/articles/security-tips.html#IPC

[22] „Dynamic Code“

http://developer.android.com/training/articles/security-tips.html#DynamicCode

[23] „Dalvik“

http://developer.android.com/training/articles/security-tips.html#Dalvik

[24] „Native“

http://developer.android.com/training/articles/security-tips.html#Native

[25] „Google Maps Android API v2 – Google Developers“

https://developers.google.com/maps/documentation/android/intro

[26] „Google APIs Console Help“

https://developers.google.com/console/help/

[27] „Graphics“

https://source.android.com/devices/graphics.html

[28] „Input Events“

http://developer.android.com/guide/topics/ui/ui-events.html

[29] „Android application activity and lifecycle – Tutorial“

http://www.vogella.com/tutorials/AndroidLifeCycle/article.html

[30] „Activities“

http://developer.android.com/guide/components/activities.html#Lifecycle

[31] „UML Basics: An introduction to the Unified Modeling Language“

http://www.ibm.com/developerworks/rational/library/769.html

[32] „Class Diagram”

http://en.wikipedia.org/wiki/Class_diagram

Anexa

Anexa 1

Anexa 2

Anexa 3

Anexa 4

Anexa 5

Anexa 6

Anexa 7

Anexa 8

Bibliografie

[1] “What is Java?”

http://searchsoa.techtarget.com/definition/Java

[2] “Android (sistem de operare)

http://ro.wikipedia.org/wiki/Android_(sistem_de_operare)

[3] “What is iOS?”

http://whatisios.org/

[4] „iOS“

http://en.wikipedia.org/wiki/IOS

[5] „Eclipse – software“

http://en.wikipedia.org/wiki/Eclipse_(software)

[6] http://en.wikipedia.org/wiki/Android_Studio

[7] „IntelliJ IDEA“

http://en.wikipedia.org/wiki/IntelliJ_IDEA

[8] „Developing applications for Android in IntelliJ IDEA“

http://wiki.jetbrains.net/intellij/Developing_applications_for_Android_in_IntelliJ_IDEA

[9] „What’s the big IDE? Comparing Eclipse and NetBeans“

http://www.theserverside.com/feature/Whats-the-Big-IDE-Comparing-Eclipse-vs-NetBeans

[10] „Java (programming language)“

http://en.wikipedia.org/wiki/Java_(programming_language)

[11] „How garbage collection works in Java“

http://mrbool.com/how-garbage-collection-works-in-java/28044

[12] „Ce este și cum alegi un GPS”

http://www.demunte.ro/articole/ce-este-si-cum-alegi-un-gps_12

[13] Jean-Marc Lord, Andre Pelletier, “Hărți, busole și GPS”, Editura M.A.S.T., 2012

[14] “Storing Data”

http://developer.android.com/training/articles/security-tips.html#StoringData

[15] „Permissions“

http://developer.android.com/training/articles/security-tips.html#Permissions

[16] „Using Networking“

http://developer.android.com/training/articles/security-tips.html#Networking

[17] „Performing Input Validation“

http://developer.android.com/training/articles/securitytips.html#InputValidation

[18] „User Data“

http://developer.android.com/training/articles/security-tips.html#UserData

[19] „Using WebView“

http://developer.android.com/training/articles/security-tips.html#WebView

[20] „Crypto“

http://developer.android.com/training/articles/security-tips.html#Crypto

[21] „IPC“

http://developer.android.com/training/articles/security-tips.html#IPC

[22] „Dynamic Code“

http://developer.android.com/training/articles/security-tips.html#DynamicCode

[23] „Dalvik“

http://developer.android.com/training/articles/security-tips.html#Dalvik

[24] „Native“

http://developer.android.com/training/articles/security-tips.html#Native

[25] „Google Maps Android API v2 – Google Developers“

https://developers.google.com/maps/documentation/android/intro

[26] „Google APIs Console Help“

https://developers.google.com/console/help/

[27] „Graphics“

https://source.android.com/devices/graphics.html

[28] „Input Events“

http://developer.android.com/guide/topics/ui/ui-events.html

[29] „Android application activity and lifecycle – Tutorial“

http://www.vogella.com/tutorials/AndroidLifeCycle/article.html

[30] „Activities“

http://developer.android.com/guide/components/activities.html#Lifecycle

[31] „UML Basics: An introduction to the Unified Modeling Language“

http://www.ibm.com/developerworks/rational/library/769.html

[32] „Class Diagram”

http://en.wikipedia.org/wiki/Class_diagram

Anexa

Anexa 1

Anexa 2

Anexa 3

Anexa 4

Anexa 5

Anexa 6

Anexa 7

Anexa 8

Similar Posts

  • Mаsаjul Fаciаl ; Prаctici Si Cаrаcteristici

    CUPRINS INTRODUCERE …………………………………………………………… 3 CАPITOLUL I. Mаsаjul fаciаl ; prаctici si cаrаcteristici……..5 CАPITOLUL II. АSPECTE PRАCTICE АLE TRАTĂRII TENULUI GRАS SEBOREIC ………………………………………………………….18 CONCLUZII ȘI RECOMАNDĂRI ………………………………………………….45 BIBLIOGRАFIE…………………………………………………………………………………47 АNEXE ……………………………………………………………………………………………..48 INTRODUCERE În cаdrul cercetării de fаță, ceeа ce mi-аm propus să investighez este tenul grаs și specificul аcestuiа în rаport cu un аnumit tip de mаsаj…

  • Transporturilor Multimodale

    LUCRARE DE LICENȚĂ TRANSPORTURILE MULTIMODALE. IMPORTANȚĂ ȘI SCOP CUPRINS INTRODUCERE CAPITOLUL I. Noțiuni și trăsături generale privind transporturile 1.1. Noțiuni generale privind transporturile. Istoricul activității de transport 1.2. Obiectul, importanța și particularitățile activității de transport 1.3. Clasificarea și organizarea activității de transport 1.4. Izvoarele dreptului transporturilor CAPITOLUL II. Contractul comercial de transport 2.1. Noțiuni generale…

  • Revolutiile

    Cuprins INTRODUCERE CAPITOLUL I. DELIMITĂRI CONCEPTUALE CAPITOLUL II. SCHIMBAREA REGIMULUI ȘI PROBLEMATICA DEMOCRATIZĂRII II.1. Factori interni II.2. Factori externi CAPITOLUL III. ROLUL MOBILIZĂRII CIVICE III.1. Mișcările civice ale tinerilor III.2. Specificul protestelor III.3. Rolul elitelor CAPITOLUL IV. FENOMENUL (RE)CONSTRUCȚIEI INSTITUȚIONALE IV.1. Tipuri de instituții democratice CAPITOLUL V. CONSECINȚE ALE SCHIMBĂRII REGIMULUI V.1. Elemente comune și…

  • Evaziunea Fiscala In Republica Moldova

    UNIVERSITATEA LIBERĂ INTERNAȚIONALĂ DIN MOLDOVA FACULTATEA „ȘTIINȚE ECONOMICE” CATEDRA „FINANȚE, BĂNCI ȘI CONTABILITAE ” Admis la susținere: Șef catedră „Finanțe, Bănci și Conatbilitate” Dr., conf.univ., I.Balan ___________________________ ”____” _______________ 2016 ȚURCAN TEODOR EVAZIUNEA FISCALĂ ÎN REPUBLICA MOLDOVA ȘI IMPLICAȚIILE ACESTEIA ASUPRA NIVELULUI DE TRAI 364.1 – Finanțe și bănci  TEZĂ DE MASTERAT Conducător științific: Viorica…

  • Perspectivele Politicii de Dezvoltare Rurala Pentru Perioada 2014 2020

    Perspectivele politicii de dezvoltare rurală pentru perioada 2014-2020 3.1 Noutăți ale PNDR pentru 2014-2020 față de perioada precedentă Pentru a putea răspunde cât mai evicient și mai rapid provocărilor referitoare la zonele rurale, politica de dezvoltare rurală a UE a evoluat în mod continuu. PAC reprezintă cea mai recentă reformă, care vine la pachet cu…