În Tutoriale

Dezvoltarea primei aplicații Android

Hello Android

În primele două articole ale seriei dedicate platformei Android, am încercat să aflăm câte ceva despre arhitectura ei, despre sistemul de operare și despre mediul de dezvoltare. Acum a venit momentul să vedem cum putem dezvolta o aplicație.

Aplicația pe care o avem în vedere este una foarte simplă și este menită să ilustreze două concepte de bază: Activity și Intent, precum și modul în care aceastea interacționează. Ea va avea două ecrane, primul reprezentând un pas de login, iar al doilea va afișa un mesaj de bun-venit, precum și numele utilizatorului. Pentru că scopul principal este să vedem cum se folosesc componentele de Android și care este procesul de dezvoltare, nu vom lua în considerare aspecte precum autentificarea efectivă a utilizatorului.

Înainte de a începe, trebuie spus că articolul de față necesită cunoștințe de bază în limbajul Java. Este recomandat ca sistemul de operare să fie bazat pe UNIX (Ubuntu sau MacOS X), dar și Windows poate fi folosit fără nicio problemă. În plus, este necesar să aveți JDK-ul de Java instalat, cel puțin versiunea 1.6.

Aplicația va fi dezvoltată pentru versiunea 2.2 pentru a acoperi o plajă cât mai mare de telefoane. Ea va rula însă pe orice telefon care are versiunea mai nouă de 2.2, inclusiv 4.0 și tablete.

Configurarea mediului de dezvoltare

Primul pas pentru a putea începe este să ne pregătim mediul de dezvoltare. Software Development Kit-ul (SDK) Android este livrat sub forma unui utilitar prin intermediul căruia putem descărca versiunile necesare de API, precum și diverse add-on-uri. Acesta poate fi găsit pe site-ul oficial, aici.

În continuare, dezarhivați arhiva într-un director ușor de accesat, de exemplu: ~/Development/SDK/Android. Executați apoi în terminal comanda android care v-a pornit
utilizatorul aflat în subdirectorul tools.

De aici, putem selecta versiunile de API pe care dorim să le instalăm. Pentru aplicația din acest articol, aveți nevoie de cel puțin versiunea 2.2. Puteți oricând reveni la acest utilitar și instala sau dezinstala versiuni după necesități. Pachetele vor fi descărcate și instalate în directorul platforms. Pentru verificare, din linia de comandă, dacă totul a decurs bine, se poate rula comanda android list targets, care va afișa lista de versiuni disponibile.

Configurarea IDE-ului

Acum că avem instalat SDK-ul de Android, trebuie să pregatim editorul de cod. Pentru dezvoltare, vom folosi un Integrated Development Environment (IDE) și recomand IntelliJ Idea 12, care poate fi descarcăt gratuit, în varianta Community Edition, pentru Windows și UNIX de aici. În continuare, trebuie să configurăm editorul, iar primul pas îl reprezintă JDK-ul. Pentru a-l adăuga, va trebui să deschideți File -> Project Structure și la Platform Settings/SDKs să adaugați JDK-ul instalat în sistem.

Tot aici, vom putea să adăugăm și SDK-ul de Android, pentru versiunile dorite. Pentru a adăuga o versiune de SDK, trebuie să alegem de pe disc directorul care conține versiunea respectivă. Acestea sunt situate în directorul unde a fost instalat SDK-ul, în subdirectorul platforms. După cum spuneam, avem nevoie de cel puțin versiunea 2.2, adică API level 8. Toate cele necesare vor fi detectate automat, dar trebuie totuși să ne asigurăm că build target-ul este setat pe versiunea de Android dorită.

Configurarea emulatorului

Am terminat de configurat partea ce ține de platformele de dezvoltare, dar cum rămâne cu testarea?

Diversitatea telefoanelor și a tabletelor bazate pe Android este foarte mare și de multe ori este dificil de testat pe mai multe variante de echipamente fizice. De aceea, Google ne pune la dispoziție un emulator de Android care ne permite să simulăm orice fel de device fizic și unde putem să configurăm în voie specificațiile așa-numitelor AVD-uri (Android Virtual Device).

Pentru a crea un emulator, trebuie să folosim programul dedicat, care se poate porni din Idea de la Tools -> Android -> AVD Manager. Odată ajunși acolo, putem configura oricâte device-uri dorim.

Din fereastra de configurare a unui emulator putem specifica toate detaliile telefonului: versiunea pe care să o ruleze, dimensiunea ecranului, tipul procesorului, spațiul de pe SDCard și așa mai departe. Este recomandat ca AVD-urile create să imite device-urile fizice deja existente, specificatii tehnice complete putând fi găsite pe site-urile producătorilor, pe GSMArena.com sau Wikipedia.

Pentru acest articol este recomandat să configurați un emulator care să simuleze un telefon Nexus One. Specificațiile pentru acest telefon le puteți găsi aici.

Cei care au un telefon sau o tabletă cu Android pot să le folosească pentru testarea aplicației prin intermediul USB. Este necesar ca telefonul să accepte instalarea de aplicații din Unknown Sources (setare accesibilă în Settings -> Applications) și USB Debugging (accesibilă în Settings -> Developer Options) să fie activat. Dacă totul a decurs bine, atunci când e legat prin USB la calculator și rulăm în command line adb devices, telefonul trebuie să apară în lista de device-uri disponibile.

Crearea unui proiect

Am reușit să pregătim editorul pentru a putea începe dezvoltarea unei aplicații și am creat un AVD pentru a o putea testa. A venit momentul să creăm proiectul care va conține sursele aplicației.

SDK-ul aduce cu sine mai multe tool-uri care pot fi utilizate direct din linia de comandă și terminal. Pentru simplitate, vom folosi IDE-ul pentru a crea proiectul. Începem de la File ->New Project. Aici trebuie să introducem câteva date. În primul rând, alegem tipul de proiect din lista din stânga și apoi introducem numele proiectului, calea unde acesta va fi stocat și alegem versiunea platformei. În cazul de față, alegem versiunea 2.2.

Următorul pas este să introducem câteva date care țin de dezvoltarea efectivă a aplicației. Aici vom specifica numele ei, numele package-ului, precum și denumirea activity-ului principal al aplicației. În secțiunea Target Device, putem alege cum dorim să rulăm aplicația pentru teste: în emulator sau pe un telefon conectat prin USB. Vom alege emulatorul și din lista de AVD-uri, NexusOne. După un click pe Finish, IDE-ul va crea proiectul.

Structura unui proiect

Înainte de a începe să scriem cod, este bine să aruncăm o privire asupra structurii unui proiect. Android este adeptul paradigmei “convension over configuration”, care favorizează folosirea de convenții de denumire sau locație pentru a avea acces la resursele necesare. Acest mod de organizare oferă posibilitatea generării automate a identificatorilor de resurse și reduce numărul de fișiere de configurare necesare.

Să vedem câteva dintre directoarele mai importante:

  • assets– aici sunt plasate de obicei orice fel de fișiere care sunt folosite în aplicație, cum ar fi fișiere audio în format MP3, font-uri non-standard în format TTF sau baze de date înformat DB.
  • gen– acest director conține clase generate de SDK, care fac resursele accesibile în cadrul codului sursă. Foarte importantă aici este clasa R, care conține o serie de constante care au exact denumirea fișierului sau a identificatorului și au o valoare unică pentru resursa aferentă.
  • libs– aici pot fi plasate bibliotecile Java adiționale pe care dorim să le folosim în proiect, în format JAR.
  • res– poate cel mai important director din proiect, după cel de surse, acesta conține o serie de subdirectoare dedicate resurselor de UI. El conține, în general, fișiere XML și imagini PNG.
  • drawable– este un subdirector care conține toate elementele grafice ce sunt folosite în aplicație. Acestea pot fi atât imagini, în general PNG-uri cu transparență, dar și XML-uri ce definesc forme. De exemplu, dacă dorim să avem în aplicație un cerc roșu, nu este necesar să avem o imagine rasterizată, el putând fi creat și din XML specificând diversele atribute necesare (rază, culoare, etc…).
  • layout– este un alt subdirector extrem de important pentru că, practic, conține toate fișierele care definesc interfața cu utilizatorul. Fișierele XML de aici specifică, pentru fiecare ecran în parte și pentru fiecare componentă, modul în care sunt așezate pe ecran.
  • values– în acest subdirector sunt plasate fișierele care definesc diferite valori folosite de aplicație. Poate cel mai folosit fișier de aici este strings.xml, care oferă posibilitatea de a defini textele ce apar în aplicație și care sunt disponibile apoi în codul sursă prin intermediul identificatorilor. Această abordare, combinată cu convențiile de denumire, simplifică foarte mult procesul de internaționalizare a unei aplicații.
  • src– directorul care conține sursele Java ale aplicației; nu cred ca are nevoie de explicații.

Putem crea directoare aditionale după nevoi, atât în cadrul proiectului, precum și în cadrul directorului de resurse, iar în aplicații de mari dimensiuni, acest lucru va fi chiar necesar.

Ne oprim aici pentru moment, urmând ca în partea a doua să vorbim despre Activity-uri, Intent-uri și să vedem, efectiv, codul sursă care face ca aplicația să prindă viață.

Sursă imagine