Documente Academic
Documente Profesional
Documente Cultură
Android este un software pentru dispozitive mobile, care include un sistem de operare i aplicaii cheie. SDK-ul Android ofer instrumentele i API-urile necesare pentru a ncepe dezvoltarea de aplicatii pe platforma Android folosind limbajulde programare Java.
Arhitectura Android
Aplicatii
Android va fi livrat cu un set de aplicaii de baz, inclusiv un client de e-mail, program de SMS, calendar, hri, browser,agenda de contacte i altele. Toate aplicatiile sunt scrise folosind limbajul de programare Java.
Biblioteci
Android include un set de biblioteci C / C++ utilizate de ctre diferite componente ale sistemului Android. Aceste capaciti sunt aduse dezvoltatorilor prin intermediul Android application framework. Cateva din bibliotecile de baz sunt enumerate mai jos: System C:o implementare derivata din BSD a bibliotecii standard C (libc), speciala pt device-urile Linux Biblioteci media:bazate pe OpenCORE-ul PacketVideo ;acestea suporta redarea si inregistrarea a celor mai populare formate audio si video,precum si imagini,incluzand MPEG4,H.264,MP3,AAC,AMR,JPG,PNG Surface Manager:gestioneaza accesul la display si compune perfect layere grafice 2D si 3D de la diferite aplicatii LibWebCore:un engine modern care da putere atat browserului Andorid cat si continutului web incorporat SGL:engine-ul de grafica 2d biblioteci 3D:implementari bazate pr OpenGL ES 1.0 API;bibliotecile folosesc ori accelerare hardware 3D(unde exista) sau software-ul optimizat 3D de rasterizare SWLite:un engine puternic si simplu de baza de date disponibil pt toate aplicatiile
Android Runtime
Android include un set de biblioteci core care furnizeaza aproape toata functionalitatea bibliotecilor core ala limbajului de programare Java. Fiecare aplicatie Android ruleaza in procesul ei separat cu propria instanta de masina virtuala Dalvik.Dalvik a fost scris pt ca un device sa poata rula mai multe VM eficient.VM Dalvik executa fisiere in formatul .dex care este optimizat pt folosirea eficienta a memoriei.VM este bazat pe registrii si ruleaza clase compilate de un compiler Java care au fost transformate in .dex de catre tool-ul dx.
Vmul Dalovik se bazeaza pe kernel Linux pt functionalitati de baza precum fire de executie si gestionare memoriei mici.
Kernelul Linux
Android se bazeaza pe Linux vs 2.6 pt servicii de sisteme core cum ar fi securitatea,gestionarea memoriei,gestionarea proceselor,retea,drivere.Kernelul este si un strat bstract intre hardware si restul software-ului.
Grafica
Grafica Android este bazata pe o biblioteca speciala 2D si OpenGl ES 1.0 pt grafica performanta 3D.Cele mai comune API grafice se pot gasi in drawable package.APIurile OpenGL sunt disponibile la Khronos OpenGL ES package,plus cateva Android OpenGL utilities. Cand pornim un proiect,este foarte important sa stim care vor fi cerintele grafice.Diverse sarcini grafice sunt cel mai bine realizate cu diverse tehnici.De exemplu,grafica si animatiile pt o aplicatie aproape statica ar trebui implementate diferit de grafica si animatiile pt un joc interactiv 3D. Acum vom discuta cateva optiuni pe care le avem pt a desena in Android si ce sarcini sunt cel mai bine adecvate. Cand desenam grafica 2D,avem 2 optiuni: a)Desenarea animatiilor si a graficii intr-un View object din layout;astfel desenele si animatiile sunt procesate de catre procesul View b)Desenarea graficii direct intr-un Canvas.Astfel,se apeleaza clasa draw() sau una din metodele precum drawPicture().Astfel se controleaza si animatia. Optiunea a) este alegerea cea mai buna atunci cand vrem sa desenam grafica simpla care nu se schimba dinamic sau nu face parte intr-un joc performant.De exemplu,se poate desena in View cand dorim sa afisam o grafica statica sau o animatie predefinita intr-o aplicatie statica. Optiunea b) este mai buna atunci cand aplicatia are nevoie de re-desenare dinamica.Fundamental,orice joc video ar trebui desenat in Canvas-ul sau.Sunt mai multe moduri de realizare: in acelasi fir de executie ca si UI Activity,unde se creaza o componenta View in layout,se apeleaza invalidate() si apoi se proceseaza apelul onDraw().
Sau,intr-un fir de executie separat,unde se gestioneaza SurfaceView si se efectueaza desenul in Canvas cat de repede este capabil firul de executie (nu e nevoie de o cerere invalidate() ).
Desenare in Canvas
Cand scrieti o aplicatie in care vrei sa efectuezi un desen mai special si/sau animatii controlate complexe,ar trebui sa desenezi in Canvas. Acesta este o interfata care va contine toate apelurile de tip draw. Desenul este efectuat pe o baza Bitmap,plasat intr-o fereastra. In cazul in care desenezi prin metoda onDraw(),este nevoie doar sa iti plasezi desenul in Canvas.Poti de asemenea sa obtii un Canvas cu SurfaceHolder.lockCanvas(),cand lucrezi cu un obiect SurfaceView.Ca sa creezi un nou Canvas,trebuie sa definesti Bitmapul pe care desenul va fi realizat.Bitmapul este mereu necesar pt un Canvas.Poti sa setezi un Canvas asa:
Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(b);
Acum Canvasul tau va desena in Bitmapul definit.Este recomandat sa iti desenezi grafica finala prin Canvasul oferit de View.onDraw() sau SurfaceHolder.lockCanvas(). Clasa Canvas are setul ei de metode grafice pe care le poti utiliza precum drawBitmap(..),drawRect(..),drawText(..)si altele.
Localizare
Android va rula pe multe device-uri in multe regiuni.Pt a ajunge la majoritatea utilizatorilor,aplicatia ta trebuie sa foloseasca text,fisiere audio numere,grafica in moduri apropiate de regiunile unde aceasta va fi folosita. Acest document descrie cele mai bune metode de localizare a aplicatiilor Android. Principiile se aplica fie ca utilizezi Eclipse sau orice alt IDE. Este o practica buna sa folosesti resursele framework Android pt a separa aspectele de localizare ale aplicatiei cat de mult e posibil fata de nucleul Java: Poti sa iti pui continutul interfetei cu utilizatorul al aplicatiei in fisiere resursa dupa cum este descris in acest document Comportamentul interfetei cu utilizatorul este condus de codul Java.De exemplu, daca utlizatorul introduce date ce necesita sa fie formatate sau sortate diferit in functie de locatie,atunci ar trebui sa utilizezi Java pt manipularea programata.
Tutorialul Hello L10N te trece prin pasii pt a crea o simpla aplicatie de localizare care foloseste resurse specifice locatiei in modul in care este descris in acest document
daca lipseste un string necesar aplicatiei,atunci aceasta nu va rula si va aparea o eroare.Exemplul urmator ilustreaza ce poate sa se intample cand textul default este incomplet. Ex: Un cod de aplicatie Java atribuie doua string-uri,text_a si text_b.Aceasta aplicatie include si un fisier de resurse de localizare(res/values-en/strings.xml) care defineste text_a si text_b in engleza.Aceasta aplicatie include de asemenea si un fisier de resurse default( res/values/strings.xml) care include o definire pt text_a dar nu si pt text_b: Aceasta aplicatie ar putea sa nu compileze fara o problema.Un IDE precum Eclipse nu va evidentia vreo eroare daca o resursa lipseste Cand aplicatia porneste pe un device cu locatia setata pe English,aplicatia ar putea rula fara vreo eroare,pt ca res/values-en/strings.xml contine ambele stringuri necesare. Totusi utilizatorul va primi un mesaj de eroare si un buton de Force Close cand aceasta aplicatia va fi rulata pe un device setat pe o limba alta decat engleza.Aplicatia nu va rula.
Pt a preveni aceasta situatie fii sigur ca un fisier res/values/strings.xml exista si ca defineste fiecare string necesar.Situatia se aplica la toate tipurile de resurse nu doar pt stringuri.
res/anim/
res/xml/
res/raw/
In codul tau,examineaza fiecare referinta catre o resursa Andorid.Fii sigur ca o resursa default este definita pt fiecare.De asemenea fi sigur ca fisierul string default este complet.Un fisier string localized poate sa contina un subset de stringuri,dar fisierul de stringuri default trebuie sa le contina pe toate.
De remarcat faptul ca daca device-ul e setat pe limba japoneza,Android va cauta title in res/values-ja/strings/xml.Dar pt ca nu exista un asemenea string inclus in acel fisier, Android va alege default si va incarca title in engleza de la res/values/strings.xml.
Daca aplicatia ruleaza pe un device care are configurata ca limba cea japoneza,Andoid va incarca desenele din res/drawable-ja/ chiar daca device-ul ar astepta folosirea unui stylus Exceptie:Singurele calificative care prevaleaza peste locatie in selectia unui proces ar fi MCC si MNC(codul mobil de tara si codul mobil de retea)
Ex: Sa presupunem ca avem urmatoarea situatie: Codul aplicatiei apeleaza R.string.text_a 2 fisiere de resurse relevante sunt disponibile: res/values-mcc404/strings.xml care include text_a in limba default a aplicatiei,in acest caz engleza. res/values-hi/strings.xml care include text_a in Hindi Aplicatia ruleaza pe un device care are urmatoarea configuratie: Cardul SIM este conectat la un retea mobila in India(MCC404) Limba este Hindi.
Android va incarca text_a din res/values-mcc404/strings.xml in engleza,chiar daca device-ul este setat pe Hindi.Asta din cauza ca,in selctia proceselor de resurse,Android prefera MCC peste limba. Procesul de selectie nu este intotdeauna atat de simplu precum acest exemplu sugereaza.
res/layout-de/main.xml).Totusi,acest lucru va face aplicatia ta mai greu de intretinut.E mai bine sa creezi un singur layout mai flexibil. O alta situatie tipica este o limba care necesita ceva diferit in layout.De exemplu ai putea avea un formular de contact,care include 2 campuri de nume cand aplicatia ruleaza in japoneza,dar 3 campuri de nume cand aplicatia ruleaza alte limbi.Vei putea sa rezolvi situatia in 2 moduri: Creeaza un layout cu un camp pe care il poti programa enable/disable in functie de limba,sau Fa layout-ul principal sa includa un alt layout acel camp.Al doilea layout ar putea sa aibe configuratii diferite in functie de diferite limbi.
Pt a face acest lucru poti crea un fisier mic numit res/values-en-rGB/strings.xml care sa includa numai stringurile care sunt diferite atunci cand aplicatia va rula in Anglia.Pt restul stringurilor aplicatia le va folosi pe cele default,definite in res/values/strings/xml.
Testarea pe un emulator
Vezi emulatorul Android
2) Ruleaza emulatorul 3) Din linia de comanda a computerului gazda,ruleaza comanda: adb shell sau daca ai un device atasat,specifica emulatorului adaugand optiunea e adb e shell 4) La promptul adb #,ruleaza comanda: seprop persist.sys.language [language code];setprop persist.sys.country [country code];stop;sleep 5;restart
De exemplu,ca sa testezi in franceza canadiana: setprop persist.sys.language fr;setprop persist.sys.country CA;stop;sleep 5;start Acest lucru va face emulatorul sa se restarteze.Dupa ce ecranul Home reapare, relanseaza aplicatia si aceasta va rula cu noua locatie
Daca testul este cu succes,repeta pt celelalte tipuri de configuratie.De exemplu, daca o aplicatie are un fisier de layout numit res/layout-land/main.xml dar nu are un fisier numit res/layout-port/main.xml seteaza apoi emulatorul sau device-ul pe orientare tip portret si vezi daca aplicatia va rula.
Hello,L10N
In acest tutorial,vom crea o aplicatie Hello,L10N care foloseste frameworkul Android pt a incarca selectiv resurse.Apoi vom localiza aplicatia prin adaugarea resurselor in directorul res/. Acest tutorial foloseste practicile descrise in tutorialul de localizare anterior.
LinearLayout-ul are 2 obiecte TextView care vor afisa textul locatiei si un Button ce va afisa imaginea steagului.
Acest cod furnizeaza text in engleza britanica pt orice string folosit.Cand vom localiza aplicatia,vom furniza text alternativ in germana,franceza si japoneza pt unele stringuri. 2)Adauga un desen pt steag in folderul res/drawable ptrin salvarea flag.png ca res/drawable/flag.png.Cand aplicatia nu este localizata,va afisa steagul englez. 3)Deschide Hello10N.java(in directorul src/) si adauga urmatorul cod in metoda onCreate() (dupa setContentView)
// assign flag.png to the button, loading correct flag image for current locale Button b; (b = (Button)findViewById(R.id.flag_button)).setBackgroundDrawable(this.getResou rces().getDrawable(R.drawable.flag)); // build dialog box to display when user clicks the flag AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(R.string.dialog_text)
.setCancelable(false) .setTitle(R.string.dialog_title) .setPositiveButton("Done", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.dismiss(); } }); final AlertDialog alert = builder.create(); // set click listener on the flag to show the dialog box b.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { alert.show(); } });
Sfat:In Eclipse,foloseste CTRL-Shift-O pt a gasi si a adauga pachetele lipse proiectului tau,apoi salveaza fisierul HelloL10N.java Codul introdus face urmatoarele: Atribuie steagul corect butonului.Pana acum,nici o resursa nu este definita in afara de cele default,astfel ca acest cod va atribui continutul res/drawable/flag.png icon-ului pt steag,idiferent de locatie.Odata ce vom adauga noi steaguri pt diferite locatii,codul va atribui uneori diferite alte steaguri. Creaza un obiect AlertDialog si seteaza un senzor de click astfel cand un utilizator apasa butonul,se va afisa AlertDialog.Nu vom localiza textul dialog;AlertDialog va afisa mereu dialog_text care este localizat in res/values/strings.xml. Structura proiectului este acum urmatoarea:
Sfat: Daca vei dori sa rulezi aplicatia pe un device si nu doar pe emulator,deschide AndoridManifest.xml si adauga: android:debuggable=true in interiorul elementului <aplication>.Pt informatii despre setarile device-ului ca sa ruleze aplicatii de pe sistemul tau,vezi capitolul Developing in a Device
Planificarea localizarii
Primul pas in localizarea unei aplicatii este sa planifici cum va interpreta diferite locatii. In aceasta aplicatie,locatia default este Regatul Unit.Vom adauga cateva informatii specifice locatiei pt Germania,Franta,Canada,Japonia si Statele Unite.Tabelul 1 arata planificarea pt cum va arata aplicatia in diferite locatii:
United Kingdom
Germany
France
Canada
Japan
United States
Other Location
British English text; British flag (defau lt) German text forapp_n ame, tex t_aand t ext_b; British flag French text forapp_n ame, tex t_aand t ext_b; British flag
Germ an
Frenc h
Japan ese
Precum in tabelul de sus,planul contine 5 icon-uri de steaguri aditionale fara de cel englez,deja in res/drawable/.De asemenea contine 3 seturi de stringuri text in plus fata de cele din res/values/strings.xml. Tabelul 2 arata unde e nevoie de stringurile si steagurile necesare si specifica care dintre ele vor fi incarcate si in ce locatii. Locale Code Default de-rDE fr-rFR fr-rCA en-rCA ja-rJP en-rUS Language / Country English / United Kingdom German / Germany French / France French / Canada English / Canada Japanese / Japan English / United States Location of strings.xml res/values/ res/values-de/ res/values-fr/ res/values-fr/ (res/values/) res/values-ja/ (res/values/) Location of flag.png res/drawable/ res/drawable-de-rDE/ res/drawable-fr-rFR/ res/drawable-fr-rCA/ res/drawable-en-rCA/ res/drawable-ja-rJP/ res/drawable-en-rUS/
Sfat:Un calificativ de folder nu poate specifica o regiune fara limba.Avand un folder numit res/drawable-rCA/,de exemplu,va impiedica aplicatia de la compilare. In timpul rularii,aplicatia va selecta un set de resurse bazat pe locatia setata pe device-ul utilizatorului.In cazurile in care resursele specifice locatiei nu sunt disponibile, aplicatia le va folosi pe cele default. De exemplu,sa presupunem ca limba unui device este setata pe germana si locatia pe Elvetia.Pt ca aplicatia nu are un director res/drawable-de-rCH/ cu un fisier flag.png,sistemul va folosi default,care este steagul UK localizat in res/drawable/flag.png.Limba folosita va fi germana.Afisarea steagului Germaniei elvetienilor nu este idea,dar pt moment vom lasa acest lucru asa.Sunt diferite moduri in care poti imbunatati comportamentul aplicatiei in caz de doresti: Foloseste un default icon generic.In aceasta aplicatie ar putea sa fie o imagine ce il reprezinta pe Shakespeare.
Creaza un folder res/drawable-de/ care include un icon pe care aplicatia il va folosi de fiecare data cand limba este setata pe germana,dar cand locatia nu este Germania.
2)Selecteaza L10N pt campum Project si tasteaza strings.xml in campul File. In lista din stanga selecteaza Language,si click pe sageata din dreapta:
Un nou fisier, res/values-de/strings.xml apare acum printre fisierele proiectului. 4)Repeta acesti pasi pt codurile de limba fr si ja.Acum proiectul va avea urmatoarele fisiere:
res/values-de/strings.xml res/values-fr/strings.xml res/values-ja/strings.xml
5)Adauga textul de locatie pt aceste noi fisiere.Pt acest lucru,deschide fisierul res/values-<qualifier>/strings.xml si schimba codul dupa cum urmeaza:
File
res/valuesde/strings.x ml
res/valuesfr/strings.x ml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Bonjour, Localisation</string> <string name="text_a">Irai-je te comparer au jour d't?</string> <string name="text_b">Tu es plus tendre et bien plus tempr.</string> </resources>
res/valuesja/strings.x ml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="text_a">< /string> <string name="text_b"></stri ng> </resources>
Localizarea imaginilor
Dupa cum este aratat si in tabelul2,aplicatia are nevoie de inca 6 foldere de desene,fiecare continand un icon flag.png.Adauga icon-urile necesare la proiect: 1)Salveaza un icon pt steagul Germaniei ca res/drawable-de-rDE/flag.png in spatiul de lucru al aplicatiei. De exemplu: deschide imaginea salveaz-o in your-workspace/HelloL10N/res/drawable-de-rDE/
2)Salveaza un icon pt steagul Frantei ca res/drawable-fr-rFR/flag.png 3) Salveaza un icon pt steagul Canadei ca res/drawable-fr-rCA/flag.png 4)Salveaza icon-ul pt steagul Canadei inca o data,de aceasta data in res/drawable-enrCA/flag.png (trebuie sa existe 2 foldere separate,unul pt fiecare limba din Canada reprezentata in aplicatie) 5) Salveaza un icon pt steagul Japoniei ca res/drawable-ja-rJP/flag.png 6) Salveaza un icon pt steagul Statelor Unite ca res/drawable-en-rUS/flag.png Daca folosesti Eclipse,da un refresh proiectului (F5).Noul folder res/drawable<qualifier>/ ar trebui sa apara in fereastra proiectului.
Odata ce ai adaugat resursele de stringuri si imagini pt locatii,esti pregatit sa rulezi aplicatia si sa ii testezi corectitudinea.Sa schimbi locatia unui device sau in emulator, foloseste aplicatia Settings(Home > Menu > Settings > Locale&text >Select locale). Depinzand dupa cum un device este configurat,ar putea sa nu ofere locatii alternative in aplicatia Settings,sau ar putea sa ofere doar cateva.Emulatorul,pe de alta parte,va oferi toate locatiile care sunt disponibile sistemului Android. Ca sa setezi emulatorul pe o locatie care nu este disponibila,foloseste aplicatia Custom Locale,care este in tab-ul Aplicatii:
Pt o lista a locatiilor disponibile pe diferite versiuni de Android,vezi documentatia platformei,listate in Downloadable SDK Conponents in tabul SDK. Ruleaza aplicatia pt fiecare locatie cunoscuta,plus o locatie necunoscuta. Urmeaza unele rezultate pe care poti sa le obtii:\ Locale: German/Germany:
French/Canada:
Japanese:
Romansh/Switzerland (locatie speciala rm_CH,nu este cunoscuta de aplicatia HelloL10N,asa ca se vor folosi resursele default):