Referat Android
Referat Android
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 [Link] a fost scris pt ca un device sa poata rula mai multe VM [Link] Dalvik executa fisiere in formatul .dex care este optimizat pt folosirea eficienta a [Link] 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,[Link] 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 [Link] mai comune API grafice se pot gasi in drawable [Link] 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 [Link] sarcini grafice sunt cel mai bine realizate cu diverse [Link] 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 [Link],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 [Link] 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 [Link],orice joc video ar trebui desenat in Canvas-ul [Link] 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 [Link] de asemenea sa obtii un Canvas cu [Link](),cand lucrezi cu un obiect [Link] sa creezi un nou Canvas,trebuie sa definesti Bitmapul pe care desenul va fi [Link] este mereu necesar pt un [Link] sa setezi un Canvas asa:
Bitmap b = [Link](100, 100, [Link].ARGB_8888); Canvas c = new Canvas(b);
Acum Canvasul tau va desena in Bitmapul [Link] recomandat sa iti desenezi grafica finala prin Canvasul oferit de [Link]() sau [Link](). 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 [Link] 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 [Link] 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 [Link] 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/[Link]) care defineste text_a si text_b in [Link] aplicatie include de asemenea si un fisier de resurse default( res/values/[Link]) care include o definire pt text_a dar nu si pt text_b: Aceasta aplicatie ar putea sa nu compileze fara o [Link] 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/[Link] 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 [Link] nu va rula.
Pt a preveni aceasta situatie fii sigur ca un fisier res/values/[Link] exista si ca defineste fiecare string [Link] 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 [Link] sigur ca o resursa default este definita pt [Link] asemenea fi sigur ca fisierul string default este [Link] 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/[Link] 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/[Link].
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 [Link].text_a 2 fisiere de resurse relevante sunt disponibile: res/values-mcc404/[Link] care include text_a in limba default a aplicatiei,in acest caz engleza. res/values-hi/[Link] 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/[Link] in engleza,chiar daca device-ul este setat pe [Link] 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/[Link]).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 [Link] 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 [Link] 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 [Link] 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/[Link] care sa includa numai stringurile care sunt diferite atunci cand aplicatia va rula in [Link] 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 [Link] [language code];setprop [Link] [country code];stop;sleep 5;restart
De exemplu,ca sa testezi in franceza canadiana: setprop [Link] fr;setprop [Link] CA;stop;sleep 5;start Acest lucru va face emulatorul sa se [Link] ce ecranul Home reapare, relanseaza aplicatia si aceasta va rula cu noua locatie
Daca testul este cu succes,repeta pt celelalte tipuri de [Link] exemplu, daca o aplicatie are un fisier de layout numit res/layout-land/[Link] dar nu are un fisier numit res/layout-port/[Link] 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 [Link] 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 [Link] 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 [Link] ca res/drawable/[Link] aplicatia nu este localizata,va afisa steagul englez. 3)Deschide [Link](in directorul src/) si adauga urmatorul cod in metoda onCreate() (dupa setContentView)
// assign [Link] to the button, loading correct flag image for current locale Button b; (b = (Button)findViewById([Link].flag_button)).setBackgroundDrawable([Link] rces().getDrawable([Link])); // build dialog box to display when user clicks the flag [Link] builder = new [Link](this); [Link]([Link].dialog_text)
.setCancelable(false) .setTitle([Link].dialog_title) .setPositiveButton("Done", new [Link]() { public void onClick(DialogInterface dialog, int id) { [Link](); } }); final AlertDialog alert = [Link](); // set click listener on the flag to show the dialog box [Link](new [Link]() { public void onClick(View v) { [Link](); } });
Sfat:In Eclipse,foloseste CTRL-Shift-O pt a gasi si a adauga pachetele lipse proiectului tau,apoi salveaza fisierul [Link] Codul introdus face urmatoarele: Atribuie steagul corect [Link] acum,nici o resursa nu este definita in afara de cele default,astfel ca acest cod va atribui continutul res/drawable/[Link] icon-ului pt steag,idiferent de [Link] 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 [Link] vom localiza textul dialog;AlertDialog va afisa mereu dialog_text care este localizat in res/values/[Link]. Structura proiectului este acum urmatoarea:
Sfat: Daca vei dori sa rulezi aplicatia pe un device si nu doar pe emulator,deschide [Link] 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 [Link] adauga cateva informatii specifice locatiei pt Germania,Franta,Canada,Japonia si Statele [Link] 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/[Link]. 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 [Link] res/values/ res/values-de/ res/values-fr/ res/values-fr/ (res/values/) res/values-ja/ (res/values/) Location of [Link] 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 [Link] 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 [Link] 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 [Link] ca aplicatia nu are un director res/drawable-de-rCH/ cu un fisier [Link],sistemul va folosi default,care este steagul UK localizat in res/drawable/[Link] folosita va fi [Link] steagului Germaniei elvetienilor nu este idea,dar pt moment vom lasa acest lucru [Link] diferite moduri in care poti imbunatati comportamentul aplicatiei in caz de doresti: Foloseste un default icon [Link] 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 [Link] in campul File. In lista din stanga selecteaza Language,si click pe sageata din dreapta:
Un nou fisier, res/values-de/[Link] apare acum printre fisierele proiectului. 4)Repeta acesti pasi pt codurile de limba fr si [Link] proiectul va avea urmatoarele fisiere:
res/values-de/[Link] res/values-fr/[Link] res/values-ja/[Link]
5)Adauga textul de locatie pt aceste noi [Link] acest lucru,deschide fisierul res/values-<qualifier>/[Link] 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 [Link] icon-urile necesare la proiect: 1)Salveaza un icon pt steagul Germaniei ca res/drawable-de-rDE/[Link] 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/[Link] 3) Salveaza un icon pt steagul Canadei ca res/drawable-fr-rCA/[Link] 4)Salveaza icon-ul pt steagul Canadei inca o data,de aceasta data in res/drawable-enrCA/[Link] (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/[Link] 6) Salveaza un icon pt steagul Statelor Unite ca res/drawable-en-rUS/[Link] 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 [Link] 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 [Link],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):