Proiect SOA - ERASMUS Pulsestst.elia.pub.ro/news/SOA/Teme_SOA_12_13/StateAnaMaria...CAP 1.Ce este...

26
Universitatea „Politehnica” din Bucureşti Facultatea de Electronică, Telecomunicaţii şi Tehnologia Informaţiei Proiect SOA - Android OS - Profesor coordonator: Student: Stancescu Stefan State Ana-Maria Master IISC 2012

Transcript of Proiect SOA - ERASMUS Pulsestst.elia.pub.ro/news/SOA/Teme_SOA_12_13/StateAnaMaria...CAP 1.Ce este...

Universitatea „Politehnica” din Bucureşti

Facultatea de Electronică, Telecomunicaţii şi Tehnologia Informaţiei

Proiect SOA

- Android OS -

Profesor coordonator: Student:

Stancescu Stefan State Ana-Maria Master IISC

2012

Cuprins

CAP 1.Ce este Android OS si cum s-a dezvoltat.Scurt istoric .......................................................................... 3

1.1Arhitectura Android OS,Kernel, librarii .................................................................................................. 4

1.2Runtime si Aplicatii Framework ,Procese,Fire de executie(Threads) ...................................................... 7

CAP2.Procese,Fire de executie(Threads) ........................................................................................................ 10

2.1Executia proceselor ................................................................................................................................ 10

2.2Realizarea firelor de executie(threads) ................................................................................................. 11

2.3Metode pentru Thread-safe .................................................................................................................... 12

CAP3. Modalitatea de stocare a datelor la Android OS .................................................................................. 13

3.1Baza de date ........................................................................................................................................... 13

3.2Tipuri de fisiere si preferences ............................................................................................................... 13

3.3Network .................................................................................................................................................. 15

CAP4.Evolutie Android OS-variante .............................................................................................................. 16

Android 2.3.3 Gingerbread...................................................................................................................... 16

Android 4.0.3 Ice Cream Sandwich ........................................................................................................ 17

Android 4.1/4.2 Jelly Bean ...................................................................................................................... 17

4.1Dezvoltare software ............................................................................................................................... 17

4.1.1Exemplu de aplicatie dezvoltata si instalata-AccelerometerPlay .................................................. 17

4.2Comparatie cu un alt OS ........................................................................................................................ 22

Concluzii ..................................................................................................................................................... 25

Bibliografie ................................................................................................................................................. 26

CAP 1.Ce este Android OS si cum s-a dezvoltat.Scurt istoric

Android-ul este un sistem de operare bazat pe Linux, destinat în primul rând pentru

dispozitive touchscreen mobile, cum ar fi smartphone-urile si tabletele.

Initial, acest sistem de operare a fost dezvoltat de Android Inc. , fiind mai apoi preluat de Google

si lansat in 2007, in colaborare cu Open Handset Alliance:un consortiu de companii de hardware,

software si telecomunicatii, dedicate pentru ridicarea la un alt nivel(mult mai avansat) a “open

standards” pentru telefoanele mobile inteligente.[1]

Fiind un sistem de operare open source foarte flexibil si permisiv, ofera posibilitatea unei

distributii libere si totodata, a imbunatatirii lui , atat de catre utilizatori de telefoane mobile

inteligente, cat si de producatorii de astfel de device-uri(tablete, smartphone-uri).[1]

Acesti factori au permis ca Androidul sa devina una dintre cele mai utilizate platforme

astazi, de catre smartphone-uri, fiind una dintre alegerile preferate in ceea ce priveste software-ul,

de companiile ce au nevoie de un sistem de operare low-cost , customizabil, si usor de folosit

pentru dispozitivele high-tech pe care acestea le dezvolta.[1]

Ca rezultat, în ciuda faptului că a fost proiectat că în primul rând pentru telefoane și tablete

, au fost dezvoltate aplicații suplimentare pe televizoare, console de jocuri și alte electronice.

Caracterul deschis al Android-ului a încurajat o mare comunitate de dezvoltatori sa utilizeze codul

sursă pentru a dezvolta proiecte, la care se adauga noi caracteristici pentru utilizatorii avansați sau

sa utilizeze Android pe dispozitive care au beneficiat initial de alte sisteme de operare.[1]

Android este o stivă software pentru dispozitive mobile, care include un sistem de operare,

middleware și aplicații-cheie.SDK-ul Android oferă instrumente și API-uri necesare pentru a

dezvoltarea de aplicații pe platforma Android folosind limbajul de programare Java.

Dintre facilitatile pe care le poate oferi acest sistem de operare putem mentiona:

• Application Framework ce permite refolosirea si inlocuirea componentelor;

• Mașină virtuală Dalvik optimizata pentru dispozitive mobile

• Browser-ul integrat bazat pe open source WebKit engine

• Grafica optimizata bazata pe o biblioteca grafica de 2D customizată,grafică 3D, bazata pe

OpenGL ES 1.0

• SQLite pentru stocarea de date structurate

• Suport media formatele audio , video și de imagine cunoscute (MPEG4, H.264, MP3, AAC,

AMR, JPG, PNG, GIF)

• GSM Telephony

• Bluetooth, EDGE, 3G, WiFi și (hardware dependent)

• Camera, GPS, busola, accelerometru și (hardware dependent)

• Mediu de dezvoltare bogat, incluzand un emulator de dispozitive, instrumente pentru depanare,

precum și un plug-in pentru Eclipse IDE[1]

1.1 Arhitectura Android OS,Kernel, librarii

Arhitectura Android poate fi observata in figura urmatoare:

Cand vorbim de arhitectura Android OS , ne gandim la faptul ca acest sistem de operare

este o stiva software de layere(straturi),unde fiecare layer este un grup alcatuit din mai multe

componente de program.Pentru a intelege mai bine aceasta arhitectura,ea trebuie parcursa de la

baza catre varf.[2]

Practic,arhitecura cuprinde urmatoarele straturi:

•Applications layer(aplicații scrise în Java, executate în Dalvik)

• Framework services and libraries layer(scris cea mai mare parte în Java)

•Applications and most framework code executed in a virtual machine layer

•Native libraries, daemons and services layer(scrise în C sau C + +)

•Kernel-ul Linux, care include drivere pentru hardware, retea, accesul la de fișierul de sistem și

comunicarea inter-proces.[2]

Kernel(de extins-de scris mai mult despre kernel 2.6 si 3.0)

Android constă dintr-un strat ce are ca baza kernel-ul Linux 2.6 și Linux Kernel 3.x ( pt

varianta Android 4.0 ), cu middleware, biblioteci și API-uri scrise în C și aplicații software ce

rulează pe un application framework, care include biblioteci Java bazate pe Apache Harmony.

Întregul sistem de operare Android este construit deasupra stratului de bazaLinux Kernel 2.6, cu

unele modificări suplimentare arhitecturale efectuate de către Google.[3]

Nucleul Linux include multitasking real, memorie virtuală, biblioteci partajate, demand loading,

executabile partajate copy-on-write, gestiunea memoriei corectă, și rețele TCP/IP.

Astăzi, Linux este un nucleu monolitic cu încărcare de module. Device drivere și extensii de

nucleu rulează tipic în inelul 0, cu acces total la hardware, deși unele rulează în spațiul utilizator.

Spre deosebire de nucleele monolitice standard, device driver-ele se configurează ușor ca module,

și se încarcă sau se descarcă în timpul rulării sistemului. Tot spre deosebire de nucleele monolitice

standard, device driver-ele pot fi pre-empted în anumite condiții. Acest din urmă feature a fost

adăugat pentru a trata întreruperile hardware corect, și pentru a îmbunătăți suportul

pentru multiprocesare simetrică. Procesul de pre-empty ameliorează latența, crescând viteza de

răspuns și făcând Linux mai potrivit pentru aplicații de timp real.[3]

Acest OS folosește mașina virtuală Dalvik ce beneficiaza de compilator just-in-time, pentru

a rula Dalvik DEX-cod (Dalvik executabil), care este de obicei tradus din Java bytecode.[3]

Principala platforma hardware utilizata de Android este arhitectura ARM. In urmatoare figura este

ilustrat kernelul Linux folosit de Android OS:

Cea mai noua varianta 3.3 este prezenta pe device-urile ce folosesc Android 4.0, respectiv 4.1,

kernelul fiind imbunatatit in principal pentru bug-fixing.Cele mai importante schimbari fata de

versiunile anterioare sunt:

Btrfs

Suport pentru restriping între diferite niveluri RAID, echilibrarea îmbunătățită și instrumente de

depanare.

Open vSwitch

Implementarea avansata a unui switch de rețea, cu suport specializat complet, pentru mediul

virtual.

Teaming network interface

Inlocuirea bonding-driverului, ce oferă conexiune de rețea rapidă și stabilă.

Byte Queue Limits and Per-cgroup TCP buffer limits

Limitele configurabile pentru buffere pentru a preveni problemele de latență excesive.

Network priority control group

Interfata Administrator pentru stabilirea priorității traficului in aplicații.

Enhanced ext4 online resizing

Redimensionarea Ioctl mai rapidă și mai flexibilă, astefl incat Kernelul poate efectua toate

activitățile de resizing.

Support for Texas Instruments C6X architecture

Suport pentru cele mai recente multi-core-uri DSP Texas Instruments.

EFI boot support

Stub-ul de boot poate fi acum executate direct de către EFI firmware-ul.

Librarii

In materie de librarii, Android include un set de biblioteci C / C + + utilizate de diferitele

componente ale sistemului. Acestea sunt expuse dezvoltatorilor prin intermediul application

framework-ului.Acest layer(al librariilor) permite device-ului echipat cu Android OS sa lucreze cu

diferite tipuri de date.

Cele mai inportante librarii sunt:

System C library - BSD-derivata din standardul C(libc) ,a fost imbunatatita pentru

embedded Linux-based devices

Media Libraries – bazata pe PacketVideo's OpenCORE; librariile suporta playback si

inregistrarea formatelor audio si videa cunoscute,dar si a formatelor de imagine, incluzand

MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG

Surface Manager - gestionează accesul la subsistemul de afișare și straturile 2D și 3D din

mai multe aplicații

LibWebCore – un engine web browser modern,ce aduce impreuna Android browser si

embeddable web view

SGL – engine pentru support grafic 2D

3D libraries – implementare bazata pe OpenGL ES 1.0 APIs; librariile fie utilizeaza

hardware 3D acceleration,fie 3D software rasterizer

FreeType - bitmap si vector de redare font

SQLite- un motor de baze de date relaționale disponibil pentru toate aplicațiile

1.2Runtime si Aplicatii Framework ,Procese,Fire de executie(Threads)

Runtime

Runtime-ul la Android este realizat cu ajutorul a doua functiuni: Dalvik Virtual Machine și

biblioteci Core Java.

Dalvik Virtual Machine

Acesta este un tip de JVM utilizat în dispozitivele Android pentru a rula aplicații, fiind

optimizat pentru medii cu putere de procesare si memorie mica.

Spre deosebire de JVM, Dalvik Virtual Machine nu execută fișiere cu extensia .class, ci

fisiere cu extensia .dex .Acestea provin din fisiere cu extensia .class, dar sunt mai eficiente in

mediile cu resurse putine.O unealta numita dx este folosita pentru a converti fisierele Java cu

extensia .class in fisiere cu extensia .dex.Multiple fisiere cu extensia .class pot fi incluse intr-un

singur file cu extensia .dex.Pentru a economisi spatiul, variabilele de tip string de date si

constantele sunt incluse o singura data intr-un fisier output cu extensia .dex.De asemenea , o masina

Dalvik poate converti si un Java bytecode, intr-un set alternativ de instructiuni, utilizat de aceasta.

Un fișier .dex necomprimat provenit dintr-un file de tip .class este de obicei cu câteva procente mai

mic în dimensiuni, decât o arhiva Java, provenita din acelasi file. [4][5]

Executabile Dalvik pot fi modificate din nou, atunci când sunt instalate pe un dispozitiv

mobil. În scopul de a obține optimizări suplimentare, un octet poate fi schimbat în anumite tipuri de

date, structuri simple de date și biblioteci de funcții putand fi legate în linie, astfel incat empty class

objects pot fi scurt-circuitate.[4][5]

Dalvik VM permite crearea de instante multiple ale masinii virtuale simultan,oferind securitate ,

izolarea instantei, managementul memoriei si suport pentru threading.

Fiind optimizata pentru cerințele de memorie scazute, Dalvik are unele caracteristici specifice care

o diferențiază de alte masini virtuale standard:

-masina virtuala a fost “subtiata” pentru a utiliza mai puțin spațiu;

-pool-ul a fost modificat pentru a utiliza numai pe indices pe 32 de biți simplificarea interpretarii;

Standardul Java bytecode executa instrucțiuni ale stivei pe 8 biti. Variabilele locale trebuie să fie

copiate din/in stivă operandulului cu instrucțiuni separate. Dalvik folosește în schimb propriul set t

de instrucțiuni pe 16 biti care lucrează direct cu variabilelor locale.Variabila locală este frecvent

aleasa prin intermediul unui "virtual register field" , pe 4 biti. Acest lucru reduce numărul de

instrucțiuni folosite și creste viteza de interpretare.[5]

Mai mult decât atât, în conformitate cu Google, proiectarea Dalvik permite unui dispozitiv sa

execute mai multe instanțe de VM mai efficient decat JVM.

Bibliotecile Core Java

Aceste biblioteci sunt diferite de cele Java SE si Java ME.Totusi, aceste biblioteci oferă cele mai

multe dintre funcționalitățile definite în bibliotecile Java SE.Ele reprezinta un subset derivat din

implementarea Apache Harmony Java.[5]

Aplicatii Framework

Acestea sunt blocuri cu care cererile noastre interacționează direct. Aceste programe

gestioneaza funcțiile de bază ale telefonului, cum ar fi managementul resurselor, managementul

apelurilor de voce, etc.

Prin furnizarea unei platforme de dezvoltare deschise, Android ofera dezvoltatorilor posibilitatea de

a construi aplicații extrem de bogate și inovatore. Acestia au acces la hardware-ul dispozitivului,

informația de localizare, executația serviciilor de background,setarea de alarme, notificări.

Cele mai importante blocuri ale application framework sunt:

•Activity Manager:Gestioneaza activitatea ciclul de viață al aplicațiilor

•Content Providers: Administreaza schimbul de date între aplicații

•Telephony Manager:Gestioneaza toate apelurile vocale

•LocationManager: managementul locatiei, folosind GPS sau cell tower.

•Resource Manager: Gestionarea diferitelor tipuri de resurse pe care le folosesc aplicatiile

Aplications layer-este stratus de varf al arhitecturii Android,continand aplicatii precum:

•SMS client app

•Dialer

•Web browser

•Contact manager

Procese, Fire de executie

In general, in momentul in care una dintre componentele unei anumite aplicatii trebuie sa

fie executata, sistemul de operare porneste un proces Linux, cu un singur fir de executie pentru

rularea componentei.Implicit, fiecare componenta in parte , va rula in acel proces prin intermediul

unui fir de executie.Modul in care este realizata rularea unui proces, respectiv un thread este tratata

detaliat in capitolul urmator.

CAP2.Procese,Fire de executie(Threads)

2.1Executia proceselor

Executia unei componente anume a unei aplicatii, este controlata de fisierul

manifest.Elementele componente — <activity>, <service>, <receiver>, and <provider> au cate un

atribut de proces care specifica procesul in cazul in care o componenta a aplicatiei trebuie sa

ruleze. Aceste atribute pot fi setate astfel încât fiecare componentă se fie executată în propriul

proces, sau mai multe componente sa imparta acelasi proces.Pot fi de asemenea setate astfel incat

aceleasi componente sa ruleze in acelasi process, dar pentru aplicatii diferite. Elementul

<application> de exemplu, are un atribut de proces, ce stabileste o valoare implicită aplicabila

tutror componentelor.[4]

Toate componentele sunt instanțiate în firul principal al procesului specificat, și apelurile de

sistemului pentru acea componentă sunt expediate de la aceast thread. Nu sunt create threaduri

separate pentru fiecare instanță. În consecință, metodele care răspund la aceste apeluri - metode,

cum ar fi View.onKeyDown ce raporteaza acțiunile utilizatorului si notificările despre ciclul de

viață se execută întotdeauna în firul principal al procesului.[4]

Sistemul de operare poate sa decida oprirea unui proces la un moment dat, atunci cand

memoria este scazuta si ceruta de alte procese vitale pentru utilizator.Astfel, un proces este reluat in

momentul in care, este nevoie din nou de anumite componete ale aplicatiei.

Inainte de a decide ce proces sa opreasca, Android ia in calcul ce proces este mai important pentru

utilizator, astfel ca , este mai usor sa inchida un proces care nu e vizibil pe ecran , decat unul

existent acolo.[4]

Sistemul Android încearcă să mențină un proces pentru o anumita aplicatie cat mai mult timp

posibil, dar elimina procesele aflate prea mult timp in executie , recuperand astfel memoria pentru

procese noi sau pentru procesele mai importante. Pentru a determina ce procese sa păstreze in

executie, si pe care sa le opreasca, sistemul de operare face o ierarhizare a lor, in functie de

compenentele implicate in process si de starea acestora.

Astfel, procesele cu cea mai mica importanță sunt eliminate primele, apoi cele cu

următoarea in ordinea importantei, și așa mai departe, după cum este necesar , pentru a recupera

resursele sistemului.[4]

Exista o ierarhie a importantei proceselor pe 5 niveluri:

Foreground process:

Un proces aflat in derulare pentru o aplicatie curenta.Acesta e considerat va fiind in

foreground daca indeplineste una din urmatoarele conditii:

-gazduieste o Activity cu care userul interactioneaza;

-gazduieste un Service legat de Activity-ul cu care interactioneaza userul;

-gazduieste un Service care ruleaza in foreground-acest serviciu este apelat prin metoda

startForeground() ;

-gazduieste un Service care executa una dintre lifecycle callbacks (onCreate(), onStart(), sau

onDestroy()).

-Gazduieste un BroadcastReceiver executat prin metoda onReceive()[4]

Visible Proces

Un proces care nu are nici o componentă in foreground, dar poate afecta ceea ce utilizatorul

vede pe ecran. Un proces este considerat a fi vizibil dacă oricare dintre următoarele condiții sunt

adevărate:

- găzduiește o Activity care nu se află în foreground, dar este încă vizibila pentru utilizator (apelata

de metoda onPause () ). Acest lucru s-ar putea să apară, de exemplu, în cazul în care activitatea de

foreground a început un dialog, care permite ca activitatea anterioară sa fie văzuta în spatele ei.

- găzduiește un Service care este legat in foreground de Activity.

Un proces vizibil este considerat extrem de important și nu va fi oprit decat dacă acest lucru este

necesar pentru a menține toate procesele din foreground in executie.[4]

Service process

Este un proces ce execută un serviciu care a fost apelat cu metoda Startservice () și nu se

încadrează în nici una dintre cele două categorii superioare. Deși procesele de servicii nu sunt direct

legate cu orice vede utilizatorul acestea realizeaza în general, lucruri de care utilizatorul este

interesat (cum ar fi redarea de muzică în fundal sau descărcarea de date pe rețea), astfel încât

sistemul le păstrează în funcțiune cu excepția cazului în care nu exista suficientă memorie pentru a

le menține împreună cu toate informațiile generate de procesele vizibile si cele de foreground .[4]

Background process

Un proces ce deține o activitate care nu este vizibila pentru utilizator (apelata prin metoda

onStop ()). Aceste procese au un impact direct asupra experienței utilizatorului, iar sistemul le

poate opri in orice moment pentru a recupera memorie pentru procesele foreground, cele vizibile,

sau procesul de servicii. De obicei, există mai multe procese de background in executie, astfel ca,

acestea sunt păstrate într-o lista LRU (cel mai recent utilizate)pentru ca sistemul de operare sa se

asigure că procesul care a fost cel mai recent utilizat de user este ultimul care urmează să fie oprit.

Dacă o activitate isi implementeaza metodele pentru lifecycle corect, și salvează starea curenta,

oprirea procesului ei nu va avea un efect vizibil asupra experienței utilizatorului, pentru că atunci

când utilizatorul navighează înapoi la activitate, aceasta isi restabilește starea.[4]

Empty process

Este un proces care nu deține componente active ale aplicației.Singurul motiv pentru a

menține acest tip de proces în viață este pentru scopuri de cache, pentru a imbunatati timpul de

pornire data viitoare cand o componentă trebuie să ruleze.Sistemul opreste de multe ori aceste

procese, în scopul de a echilibra resursele generale ale sistemului de cache între proces și cache-ul

subadiacent al kernel-ului.[4]

2.2Realizarea firelor de executie(threads)

Desi exista posibilitatea rularii unui singur proces pentru o anumita aplicatie, la un moment

dat, va exista in background un thread in executie pentru aplicatia respectiva.Tinand cont ca ,

pentru dispozitivele touch actuale este important ca interfata cu userul trebuie sa raspunda rapid la

actiunile acestuia,threadul care gazduieste o anumita activitate, trebuie sa nu raspunda in acelasi

timp si de o aplicatie consumatoare de timp , cum ar fi downloadul.

De aceea, orice activitate de acest gen trebuie transferata catre un alt thread.[4]

Threadurile sunt create in cod folosind standard Java Threads objects. Android oferă o

serie de clase pentru gestionarea firelor de executie - Looper pentru a rula o buclă într-un

thread,Handler –utilizat pentru prelucrarea mesajelor, și HandlerThread pentru înființarea unui

thread, cu o buclă.[4]

2.3Metode pentru Thread-safe

Când un apel la o metodă implementată într-un obiect IBinder provine din același proces ca

și IBinder, metoda este executata în threadul apelantului.

Totusi,atunci cand apelul provine de la un alt proces,metoda este executata intr-un thread ales

dintr-un pool de threaduri pe care sistemul de operare il mentine in acelasi process cu IBinder,

nefiind executat in firul principal al procesului.[4]

De exemplu,in timp ce metoda de servicii onBind() va fi apelata din threadul principal al procesului

servicii,metodele implementate in obiectul pe care onBind() il returneaza vor fi apelate din

threadurile existente in pool.Tinand cont ca un serviciu poate avea mai mult de un client, mai multe

threaduri pot “angaja” aceeasi metoda IBinder in acelasi timp.Deci , aceste metode trebuie sa fie

implementate astfel incat sa fie thread-safe.[4]

In mod similar,un content provider, poate primi cereri de date ce provin din procese diferite.

Desi clasele ContentResolver si ContentProvider ascund detaliile despre cum interprocesul de

comunicare este realizat, metodele content provider ce raspund la aceste cereri- metodele query(),

insert(), delete(), update(), and getType() sunt apelate dintr-un pool de threaduri in procesul content

providerului, nu in threadul principal.De asemenea, aceste metode trebuie sa fie implementate astfel

incat sa fie thread-safe.[4]

Comunicarea interproces

Android oferă un mecanism pentru inter-comunicare (IPC), folosind Remote Procedure

Calls (RPC), în care o metodă este apelata de către o activitate sau o componentă a unei aplicații,

dar executata la distanță (într-un alt proces), returnand orice rezultat înapoi la apelant.

Aceasta presupune descompunerea unei metode de apelare și a datelor sale la un nivel pe care

sistemul de operare il poate înțelege, transmitand apelul de la procesul și spațiul de adrese local la

procesul și spațiul de adrese de la distanță , apoi reasambland apoi apelul acolo. Valorile returnate

sunt apoi transmise în direcția opusă. Android oferă tot codul pentru a efectua aceste operațiuni

IPC.Pentru a efectua IPC, cererea trebuie să fie legata de un serviciu, folosind bindService ().[4]

CAP3. Modalitatea de stocare a datelor la Android OS

Comparativ cu alte sisteme de operare , Android OS are o modalitate diferita de stocare a

datelor:fiecare tip de data, inclusiv fisierele, sunt destinate fiecarei aplicatii in parte.

Beneficiaza totusi, si o modalitate prin care datele corespunzatoare unei aplicatii specifice pot si

expuse si celorlalte aplicatii-prin intermediul content providerului.

Un content provider este o componentă opțională a unei aplicatii, care permite accesul

pentru operatiile de citire/scriere pentru datele aplicatie datele aplicației. Content providerii

implementeaza o sintaxa standard pentru solicitarea și modificarea datelor, precum și un mecanism

standard pentru citirea datelor returnate. Android furnizează un număr de content provideri pentru

tipurile de date standard, cum ar fi imagine, audio, și fișiere video și informații de contact

personale.

Indiferent dacă se doreste sau nu exportarea datele aplicației pentru alte aplicatii, este

necesara o modalitate de stocare. Android oferă următoarele patru mecanisme pentru stocarea și

regăsirea datelor: Preferences, Fișiere, Baze de date, Network,Internal storage, external storage.[

3.1Baza de date

API-ul Android contine suport pentru crearea și utilizarea bazelor de date SQLite. Fiecare

bază de date este asociata aplicației care o creează.Obiectul SQLiteDatabase reprezintă o bază de

date ce contine metode pentru a interacționa cu acesta - de interogări și gestionarea a datelor. Pentru

crearea unei baza de date, se apeleaza rutina SQLiteDatabase.create () și, de asemenea, subclasa

SQLiteOpenHelper.[9]

In ceea ce priveste suportul pentru sistemul de baze de date SQLite, Android dispune de

funcții de gestionare al bazei de date ce permit să stocare de colecții complexe de date arhivate în

obiecte. De exemplu, Android definește un tip de date pentru informațiile de contact; aceasta este

alcătuită din mai multe campuri, inclusiv un nume și prenume (siruri de caractere), o adresă și

numere de telefon (de asemenea, siruri de caractere), o fotografie (imagine bitmap), precum și alte

informații.[9]

Android permite navigarea in baza de baze de date cu ajutorul tool-ului SQLite3 , ce

permite să răsfoiți conținutului, executarea de comenzi SQL, precum și alte funcții utile privind

bazele de date SQLite.

Toate bazele de date, SQLite și altele, sunt stocate pe dispozitiv folosind pathul / date / date /

nume_pachet / baze de date.[9]

3.2Tipuri de fisiere si preferences

Ca modaliate de stocare, datele pot fi retinute direct pe dispozitivul mobil sau pe un

dispozitiv removable. In mod implicit, alte aplicații nu pot accesa aceste fișiere.

Pentru a citi date dintr-un fișier, se apeleaza Context.openFileInput () și se trece numele și pathul

fișierului. Returnează un obiect standard Java FileInputStream.

Pentru a scrie într-un fișier, se apeleaza Context.openFileOutput () cu numele și pathul

fisierului. Returnează un obiect FileOutputStream. Apelarea acestor metode nu funcționeaza decat

pentru fișierele locale.[9]

Preferences reprezinta un mecanism pentru a stoca și a prelua perechi de tipuri de date

primitive de tip key-value. Acesta este de obicei folosit pentru a stoca preferințele in aplicații, cum

ar fi un mesaj de salut implicit sau un font de text care urmează să fie încărcate atunci când o

aplicatie este pornita. Se poate apela Context.getSharedPreferences () pentru a citi și a scrie valori.

Se pot atribui pentru setul de preferințe, sau partaja cu alte componente în aceeași aplicație, cu

Activity.getPreferences . [9]

Un exemplu de stabilire a preferințelor utilizatorului pentru apăsare de tastă pentru modul

silențios al unui calculator:

import android.app.Activity;

import android.content.SharedPreferences;

public class Calc extends Activity {

public static final String PREFS_NAME = "MyPrefsFile";

. . .

@Override

protected void onCreate(Bundle state){

super.onCreate(state);

. . .

// Restore preferences

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);

boolean silent = settings.getBoolean("silentMode", false);

setSilent(silent);

}

@Override

protected void onStop(){

super.onStop();

// Save user preferences. We need an Editor object to

// make changes. All objects are from android.context.Context

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);

SharedPreferences.Editor editor = settings.edit();

editor.putBoolean("silentMode", mSilentMode);

// Don't forget to commit your edits!!!

editor.commit();

}[9]

}

Un alt exemplu de stocare a datelor (stocare interna-direct pe dispozitivul mobil) este

urmatorul.Acesta arata cum se creeaza , respective scrie, un fisier extern pentru internal storage:

String FILENAME = "hello_file";

String string = "hello world!";

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);

fos.write(string.getBytes());

fos.close();

Se mai poate vorbi si de stocare externa a datelor.Acest tip de stocare e ilustrat in exemplul

urmator, unde este aratat modul in care poate fi verificata disponibilitatea unui mediu de stocare

extern:[9]

boolean mExternalStorageAvailable = false;

boolean mExternalStorageWriteable = false;

String state = Environment.getExternalStorageState();

if (Environment.MEDIA_MOUNTED.equals(state)) {

// We can read and write the media

mExternalStorageAvailable = mExternalStorageWriteable = true;

} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {

// We can only read the media

mExternalStorageAvailable = true;

mExternalStorageWriteable = false;

} else {

// Something else is wrong. It may be one of many other states, but all

we need

// to know is we can neither read nor write

mExternalStorageAvailable = mExternalStorageWriteable = false;

}

3.3Network

Stocarea datelor pe web se poate face folosind network serverul propriu.Android ofera o

modalitate de expunere a datelor private, altor aplicatii prin intermediul content

providerului.Astfel, se poate folosi reteaua pentru a stoca si prelua date folosind propriile servicii

web.Pentru a face operatiuni de retea se folosesc urmatoarele clase:

java.net.*

android.net.*

CAP4.Evolutie Android OS-variante

Android OS a trecut printr-un număr de actualizări de la lansarea sa inițială. Aceste

actualizări pentru sistemul de operare de bază rezolva de obicei bug-uri și a adăuga noi

caracteristici.In tabelul de mai jos este ilustrata evolutia sistemului de operare incepand cu

versiunea Cupcake.

In momentul actual cele mai utilizate versiuni ale Android OS sun Gingerbread,Ice Cream

Sandwich si Jelly Bean.

Android 2.3.3 Gingerbread

Android 4.0.3 Ice Cream Sandwich

Android 4.1/4.2 Jelly Bean

4.1 Dezvoltare software

Kit de dezvoltare software

SDK-ul Android include un set cuprinzător de instrumente de dezvoltare . Acestea includ un

program de depanare, biblioteci, un emulator de receptor (bazat pe QEMU), documentație, mostre

de cod, și tutoriale. Platformele suportate în prezent de dezvoltare includ arhitectura - x86

,calculatoare pe care rulează Linux (orice distribuție Linux desktop modernă), Mac OS X 10.4.8

sau o versiune ulterioară, Windows XP sau Vista.

Cerințele includ, de asemenea, Java Development Kit, Apache Ant, și Python 2.2 sau o

versiune ulterioară.Mediul IDE este Eclipse (3.2 sau o versiune ulterioară);foloseste Android

Development Tools (ADT) Plugin, deși ca dezvoltator poti folosi orice editor de text pentru a edita

fișiere XML, Java și apoi instrumentele din linia de comandă pentru a crea, construi și depana

aplicații Android, precum și de control.

Google a participat, de asemenea, în Android Market, oferind mai multe aplicații pentru

serviciile sale. Aceste aplicații includ Google Voice pentru serviciul Google Voice, Scoreboard,

Sky Map , Finance, Maps Editor, Places Directory , Google Goggles care face search by image, My

Tracks, o aplicatie pentru jogging. Telefoanele Android care includ " Google Experience" au, de

asemenea, Google Search, Google Calendar, Google Maps, Google și Gmail integrate.

Bibliotecile scrise în C și în alte limbaje pot fi compilate în cod mașină ARM și instalate cu ajutorul

kit-ului Android Development. Clasele fi apelate din codul Java care rulează sub Dalvik VM

folosind apelul System.loadLibrary, care face parte din standardul de clase Java Android.

Debuggerul ADB da un shell root care permite codului ARM sa fie uploadat si

executat.Acest cod poate fi compilat utilizand GCC pe un calculator standard.Biblioteca grafică pe

care Android o utilizează pentru a arbitra și a controla accesul la acest dispozitiv se numește Skia

Graphics Library (SGL), și a fost lansata sub licență open source . Skia are backend, atât pentru

win32 și Cairo, permițând dezvoltarea de aplicatii cross-platform, și este motorul grafic care stă la

baza browserul Google Chrome web.

4.1.1Exemplu de aplicatie dezvoltata si instalata- AccelerometerPlay

Android software development este procesul prin care noi aplicații sunt create pentru

sistemul de operare Android. Aplicatiile sunt de obicei dezvoltate în limbajul de programare Java

folosind Android SDK, dar si alte instrumente de dezvoltare sunt disponibile.[13]

Aplicatiile standard pentru Android se scriu in limbaj Java si sunt compilate in bytecode

Dalvik, ceea ce le ofera o viteza medie de executie si acces la cele mai multe biblioteci ale

sistemului. Pentru dezvoltarea unor astfel de aplicatii este nevoie de Android SDK. In urma

compilarii rezulta pachete .apk care pot fi instalate de dispozitiv sau pot fi rulate in dispozitive

virtuale (AVD).[13]

Aplicatii pot fi dezvoltate si folosind Android NDK (Native Development Kit), care este un

set de tooluri pentru crearea de biblioteci din cod C/C++ si pentru incorporarea acestora in pachete

.apk. Este recomandata utilizarea NDK nu doar pentru programatorul care are o preferinta pentru

C/C++, ci doar acolo unde APIul clasic nu ofera functionalitatile necesare.[13]

O alta modalitate de a implementa aplicatii este suita HTML5 + AJAX + CSS. Diversitatea

platformelor mobile creste si crearea unei aplicatii presupune dezvoltarea pentru mai multe

platforme simultan. Rularea in browser a unei aplicatii AJAX este o forma de a contracara aceasta

fragmentare. Nu toate aplicatiile sunt insa potrivite pentru aceasta forma de dezvoltare, fiind uneori

limitata in termeni de functionalitate si performanta.[13]

Componentele unei aplicatii standard:

Componentele sunt elementele de baza ale unei aplicatii. Ele reprezinta puncte de interactiune cu

aplicatia, din partea utilizatorului sau a sistemului, a altor aplicatii etc. Exista patru tipuri de

componente:[13]

Activitati (Activity): fiecare ecran al interfetei utilizator este creat printr-o activitate. Spre

exemplu, un joc ar putea avea o activitate pentru meniul principal, o activitate pentru

fereastra de optiuni, una pentru ecranul de joc etc. Activitatile sunt independente, in sensul

ca o alta aplicatie poate apela oricare din activitatile aplicatiei dezvoltate de noi, daca

dorim acest lucru. O activitate este implementata ca subclasa a clasei Activity

Servicii (Service): serviciile sunt componente care ruleaza in fundal, pentru interactiunea cu

alte procese sau pentru a desfasura actiuni indelungate, fara interactiune cu utilizatorul.

Spre exemplu un serviciu poate derula muzica pentru joculetul nostru. Un serviciu este

implementat in cod sub forma unei subclase a clasei abstracte Service.

Furnizori de continut (Content providers): un furnizor de continut este folosit pentru a

gestiona datele, publice sau private, folosite de aplicatie. El scrie si citeste din sisteme de

fisiere, baze de date SQLite, in retea etc. si poate fi apelat de catre alte aplicatii pentru a

furniza date, daca dorim acest lucru. Un furnizor de continut este implementat ca subclasa

a clasei abstracte ContentProvider.

Receptori de broadcast (Broadcast receivers): un receptor de broadcast este o componenta

ce raspunde la anunturile de interes general din sistem (e.g. anunt ca ecranul a fost stins, ca

bateria este aproape descarcata etc.). Receptorii de broadcast nu au interfata cu utilizatorul,

insa pot crea notificari si pot semnala alte componente ale aplicatiei. Un receptor de

broadcast este implementat ca subclasa a clasei abstracte BroadcastReceiver.[13]

Pentru dezvoltarea de aplicatii standard Android sunt necesare: mediul Android SDK si de

programare Eclipse si pluginul ADT.

Un exemplu de aplicatie dezvoltata si instalata folosind unelte de dezvoltare SDK este

AccelerometerPlay.

Aplicatia este structurata astfel:

src: contine fisierele sursa ale aplicatei

gen: contine fisiere sursa generate automat

Android #.#: contine, sub forma de jar, pachetele de baza ce se vor link-edita cu sursele

noastre, conform selectiei de target facuta la crearea aplicatiei

assets: contine resurse care sunt folosite prin cai relative

res: contine resurse (precum imagini, stringuri etc.) pentru care se genereaza IDuri unice

pentru a fi folosite

alte fisiere de configurare: contin setarile proiectului; AndroidManifest.xml

O parte din codul sursa present in fisierul AccelerometerPlayActivity.java este urmatoarul:[12]

/*

* Copyright (C) 2010 The Android Open Source Project

*

* Licensed under the Apache License, Version 2.0 (the "License");

* you may not use this file except in compliance with the License.

* You may obtain a copy of the License at

*

* http://www.apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*/

package com.example.android.accelerometerplay;

import android.app.Activity;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.BitmapFactory.Options;

import android.hardware.Sensor;

import android.hardware.SensorEvent;

import android.hardware.SensorEventListener;

import android.hardware.SensorManager;

import android.os.Bundle;

import android.os.PowerManager;

import android.os.PowerManager.WakeLock;

import android.util.DisplayMetrics;

import android.view.Display;

import android.view.Surface;

import android.view.View;

import android.view.WindowManager;

/**

* This is an example of using the accelerometer to integrate the device's

* acceleration to a position using the Verlet method. This is illustrated

with

* a very simple particle system comprised of a few iron balls freely moving

on

* an inclined wooden table. The inclination of the virtual table is

controlled

* by the device's accelerometer.

*

* @see SensorManager

* @see SensorEvent

* @see Sensor

*/

public class AccelerometerPlayActivity extends Activity {

private SimulationView mSimulationView;

private SensorManager mSensorManager;

private PowerManager mPowerManager;

private WindowManager mWindowManager;

private Display mDisplay;

private WakeLock mWakeLock;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// Get an instance of the SensorManager

mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

// Get an instance of the PowerManager

mPowerManager = (PowerManager) getSystemService(POWER_SERVICE);

// Get an instance of the WindowManager

mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

mDisplay = mWindowManager.getDefaultDisplay();

// Create a bright wake lock

mWakeLock =

mPowerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass()

.getName());

Codul sursa complet se va regasi in anexa 1.

Directorul aplicatiei mai contine doua subdirectoare: res/ si src/ si fisierul de configurare

AndroidManifest.xml ilustrat in exemplul urmator:[12]

<?xml version="1.0" encoding="utf-8"?>

<!-- Copyright (C) 2010 The Android Open Source Project

Licensed under the Apache License, Version 2.0 (the "License");

you may not use this file except in compliance with the License.

You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software

distributed under the License is distributed on an "AS IS" BASIS,

WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

See the License for the specific language governing permissions and

limitations under the License.

-->

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

android:versionCode="1"

android:versionName="1.0"

package="com.example.android.accelerometerplay">

<application android:icon="@drawable/icon"

android:label="@string/app_name">

<activity android:name=".AccelerometerPlayActivity"

android:label="@string/app_name"

android:screenOrientation="portrait"

android:theme="@android:style/Theme.NoTitleBar.Fullscreen">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

<uses-sdk android:minSdkVersion="5"></uses-sdk>

<uses-permission android:name="android.permission.VIBRATE"></uses-permission>

<uses-permission android:name="android.permission.WAKE_LOCK"></uses-

permission>

</manifest>

Aplicatia instalata si rulata pe sistemul Android arata astfel:

4.2 Comparatie cu un alt OS

Pentru a putea face o evaluare corecta a evolutiei acestui sistem de operare este necesara

realizarea unei comparatii intre el si un alt OS.

De aceea am ales sa compar doua variante lansate de Google si Apple:Ice Cream Sandwich si iOS

5.[10][11]

iOS 5 vs Android 4.0: Interfata

Diferența evidentă în interfața Android 4.0 este adăugarea de butoane de meniu pe ecran

(Înapoi, Acasă și Apps recente), in pe partea de jos a ecranului.De asemenea , adaugat si optiunea

pentru resizable widgets sau posibilitatea de organizare a aplicatiilor in foldere prin dragging-ul

uneia deasupra celuilalt. [10][11]

În schimb, la iOS 5 se vad foarte puține schimbări, într-adevăr, la interfața. Singura

schimbare notabilă pentru iOS este legata notificările din ecranul Lock Notifications, și adăugarea

de Notifications Center, care se realizeaza prin tragerea în jos din partea de sus, la fel ca

notificările de la sistemul Android . [10][11]

iOS 5 vs Android 4.0: Multitasking

Multitaskingul este un alt domeniu în care Android 4.0 aduce caracteristici din Android 3.0

intalnit la teblete pe dispozitivele mai mici. Atingerea butonului Running Apps va aduce in prim

plan o lista vizuală a aplicațiilor utilizate recent ,afisand si tumbnailul care arata ultima data a

folosirii aplicatiei respective. [10][11]

In mod similar, la iOS 5 avem de-a face cu un buton Home cu dublu-tapping, ce aduce in prim

plan, in partea de jos a ecranului, o bara Multitasking cu ultimele aplicatii utilizate.De asemenea, ca

si in cazul Android-ului exista posibilitatea de tap and hold, pentru a elimina din lista aplicatia care

nu ne mai intereseaza sa fie deschisa. [10][11]

Diferența notabila in cee ce priveste multitaskingul la cele doua sisteme de operare este “dedesubt”.

Aplicațiile Android sunt capabile de ceva asemanator cu une PCcand vine vorba de multitasking,

în timp ce iOS forțează toate aplicațiile care nu sunt utilizate în prezent sa se inchida, cu excepția

cazului în care se utilizeaza una dintre funcțiile de backgroung specifice,careia sistemul de operare

creat de care Apple ii permite sa ruleze.

Abordarea Android oferă mai multă libertate și flexibilitate atât utilizatorilor cat și dezvoltatorilor,

în timp ce abordarea Apple este proiectata pentru a preveni orice probleme de performanță cu

aplicațiile, și pentru a conserva durata de viață a bateriei.

iOS 5 vs Android 4.0: Customizare

Customizarea a fost intotdeauna unul dintre punctele forte Android, si noua interfață este

consistenta la acest capitol pentru telefoane mobile și tablete,detinand, imagini de fundal vii

,tweaks si custom launchers. Widget-urile redimensionabile sunt un alt mare avantaj aici, permițând

controlarea modului in care se pot vedea informatii-un control mult mai bun ca oricand.

Personalizare pe iOS, in schimb, nu este asa de încurajata ca pe Android. Exista

posibilitatea modificarii fundalului ecranelor Home si Lock, dar asta e tot.

iOS 5 vs Android 4.0: Web browsing, messaging and social networking

In majoritatea testelor de benchmark Ipad2 care ruleaza pe iOS s-a dovedit a fi cel mai

rapid,tabletele care utilizau Android 3.0 fiind la fel de rapide aproape.In cazul telefoanelor insa, Ice

Cream Sandwich s-a dovedit a fi mult mai rapid in ceea ce priveste browsing-ul, gratie

procesoarelor dual-core, si mai nou, quad core existente pe telefoanele actuale. [10][11]

Ambele sisteme de operare (Ice Cream Sandwich si iOS 5 ) beneficiaza de o scara larga de

optinul de email,webmail account settings, si suport Exchange incorporat.iOS 5 adauga mesageria

prin internet cu ajutorul iMessage to iPhones and iPads,ce permite transmiterea de mesaje gratuite,

poze si video altor utilizatori de iOS.Totodata beneficiaza si de functia FaceTime videocalling care

este tot built-in. [10][11]

Android 4.0 adauga mai multe carateristici Google+ , incluzand mesajele si Google

Hangout, care sunt similare cu iMessage si FaceTime calling prezente la iOS 5. [10][11]

iOS 5 vs Android 4.0: Applicatii

iOS 5 a introdus cateva aplicatii noi pe device-urile Apple ca Reminders app pentru taskuri

si o noua cale de organizare a aplicatiilor in Newsstand. La acest capitol,App store de la Apple e

inca in top, dar nici android Market nu se lasa mai prejos.In ceea ce priveste camera foto, ambele

sisteme de operare beneficiaza de abilitati ce se concentreaza pe viteza .Android are un editor foto,

ce se concentreaza pe reducerea timpului de fotografiere, si de asemenea o aplicatie ce adauga

efecte de timp real ,incluzand abilitatea de a inlocui backgroundul imaginii in timpul capturii video.

[10][11]

iOS 5 vs Android 4.0: Specialities

Fiecare dintre cele doua sisteme de operare beneficiaza de o specialitate ce nu se gaseste la

celalalt:iOS 5 de Siri virtual assistant,iar Android 4.0 de Google Navigation, Gmail app, Google

Goggles, Google Translate etc. [10][11]

iOS 5 vs Android 4.0: Updates

In cazul update-urilor la Android au fost dintotdeauna probleme, deoarece a exista un delay

intre lansarea noului software si updatarea acestuia pe telefoanele mobile.In cazul iOS-ului insa,

datorita dispozitivelor putine care suporta acest sistem de operare , aceasta problema aproape ca nu

exista.Intotdeauna s-a stiut exact ce telefon, respectiv ce tableta suporta noul sistem de operare.

[10][11]

Concluzii

Este greu de precizat care dintre cele doua sisteme de operare este mai bun, pentru ca

fiecare dintre cele doua beneficiaza de facilitati pe care celalalt sistem nu le are.

iOS are un sistem foarte bun de aplicatii ,cu pretul lipsei customizarii insa.Androidul beneficiaza de

un sistem de multitasking mult mai flexibil, dar nu are anumite peformante pe care iOS le poate

atinge.Desi beneficiaza de flash, se incarca mult mai greu decat iOS.

De aceea , alegerea unuia dintre sisteme depinde atat de nevoile fiecarui utilizator in parte, cat si de

ce performante ne dorim sa atinga device-ul pe care ruleaza unul din sisteme.

In testele de benchmark s-a dovedit ca diferentele intre iOS si Android sunt destul de mici, dar

fiecare are anumite segmente pe care este lider.

Bibliografie

[1] http://en.wikipedia.org/wiki/Android_(operating_system)

[2] http:/www.android-app-market.com/android-architecture.html

[3] http://elinux.org/Android_Architecture#Overview_presentations-

[4] http:/developer.android.com/guide/components/processes-and-threads.html

[5] Http://en.wikipedia.org/wiki/Dalvik_(software)

[6] http://www.android.com/branding.html

[7] http://developer.android.com

[8] http://developer.android.com/guide/index.html

[9] http://developer.android.com/guide/storage

[10] http://www.roughlydrafted.com/inside-googles-android-and-apples-iphone-os-as-software-

markets/

[11] http://www.techradar.com/news/phone-and-communications/mobile-phones/mobile-

computing/tablets/ios-5-vs-android-4-0-ice-cream-sandwich-1035481

[12]

http://docs.huihoo.com/android/3.0/resources/samples/AccelerometerPlay/src/com/example/androia

/accelerometerplay/AccelerometerPlayActivity.html

[13] http://cs.curs.pub.ro/wiki/si/lab/2012/android1#programarea_pentru_android