Lucrare de licență [302780]

Lucrare de licență

Titlul

lucrării

Cadru didactic îndrumător: Absolvent:

Ș.l.dr.ing. Cătălin DAMIAN Andronachi Andrei

Cuprins

Capitolul I. Introducere 4

I.1. Contextul general al aplicației 4

I.2. Elementele componente ale unei aplicții 6

I.3. Aplicații similare…………………………………………………………………………………………………………. 13

I.4. Descrierea capitolelor ………………………… 18

Capitolul II. Considerente teoretice 19

II.1. Android 19

II.2. Open Source 19

II.3. Caracteristici 20

II.4. Versiuni 21

II.5. Platforma Hardware 24

II.6. Arhitectura sistemului 27

II.7. Android Studio 28

II.8. Emulator Android Studio 31

II.9. Limbaje de programare 32

II.10. Limbajul de programare Java 35

Capitolul III. Partea practica.Aplicatii 39

III.1. Descriere aplicație 39

III.2. Module componente 40

III.3. Descriere secvențe de cod 45

Capitolul IV. Concluzii finale 52

Bibliografie 53

I. Introducere

I.1. Contextul general al aplicației

În ultimii ani industria telefoniei mobile a cunocut o [anonimizat]. [anonimizat] o [anonimizat], telefonul devenind dispozitivul cel mai utilizat pentru accesarea internetului. Astfel, [anonimizat] a [anonimizat] a asculta muzică sau a [anonimizat] a [anonimizat] a [anonimizat] a [anonimizat], sa efectuăm apeluri de conferință și multe alte activități.[1]

Odată cu creșterea numărului dispozitivelor mobile a crescut si cererea de aplicații pentru. Astfel, [anonimizat], [anonimizat], [anonimizat] o mentenanță mai bună.

O [anonimizat], unor dispozitive mobile care rulează pe sisteme de operare specifice (Android, iOS, [anonimizat].). [anonimizat].

Dreptul de autor se extinde asupra formei de exprimare și nu se aplică asupra ideilor. [anonimizat]/[anonimizat] (trademark).

Aplicația mobilă nu este o invenție, [anonimizat], să implice o activitate inventivă și să fie susceptibilă de aplicare industrială. [anonimizat], [anonimizat]: efectul aplicației mobile prin care utilizatorul acesteia poate accesa la distanță sistemul electronic de protecție al mijlocului de transport și datele despre acesta.[2]

Unități vândute:

Figura 1: Telefoane mobile vândute în funcție de sistemul de operare

Utilizare versiuni Android:

Figura 2: Utilizarea versiunilor de Android

Numarul de aplicații:

Figura 3: Comparație intre numarul total de aplicații din Google Play, App Store, Windows Store, Amazon Appstore, Blackberry World în anul 2014

I.2. Elementele componente ale unei aplicții

O aplicație Android este formată din componente software și fișiere de resurse.

Componentele unei aplicații Android pot accesa componentele unei alte aplicații pe baza unei descrieri de sarcină(Intent), astfel se pot crea sarcini executate între

aplicații. Integrarea acestor componente se poate face astfel încât aplicația să ruleze impecabil chiar dacă componentele suplimentare nu sunt instalate sau există componente diferite care îndeplinesc aceeași sarcină.

Componente de bază:

Activităti(Activity): aceste componentele sunt responsabile de prezentarea unei interfețe grafice utilizatorului, înregistrarea și procesarea comenzilor utilizatorului. O aplicație poate avea mai multe componente de tip Activity, una din ele fiind principală. De exemplu o aplicație de e-mail poate avea o singura activitate pentru afișarea email-urilor o activitate pentru a crea un nou email și una de citire a lor.

Fiecare obiect de tip Activity are un ciclu de viata care descrie starea in care se află activitate:

în execuție(running)- activitatea este afișată pe ecran iar utilizatorul interactionează cu activitatea;

întreruptă temporar (paused) – activitatea nu mai este in prim plan, aceasta fiind în fundal și este doar partial vizivilă

oprită(Stopped)- activitatea nu mai este utilizată si nici nu mai este vizibilă;

inexistentă- activitatea este terminată sau distrusă si memoria este eliberată

Ciclul de viata al unei activități:

Figura 4: Ciclul de viață al unei activități

O singura aplicație poate fi afișată in prim plan. Sistemul fiind cel care gestionează stările si tranzițiile, acesta anuntând când se modifică starea activității. Pentru evenimentele de tip tranziție sunt apelate urmatoarele metode:

onCreate(Bundle) – este apelată când activitatea este creată. Bundle oferă posibilitatea de a restabili starea salvată intr-o sesiune anterioara;

onStart() – metoda este apelată când activitatea urmează să apară pe ecran;

onResume() – este apelată când activitatea este vizibila și utilizatorul poate interacționa cu aceasta;

onRestart() – este apelată atunci când activitatea revine in prim-plan;

onPause() – este apelată înainte ca activitatea să fie întreruptă temporar, iar altă activitate să fie reluată;

onStop() – este apelată când activitatea urmează sa fie distrusă sau când o altă activitate ce ocupă tot ecranul urmeaza să intre in execuție;

onDestroy() – apelată când activitatea este distrusa;

onRestoreInstanceState(Bundle) – este apelată atunci când activitatea este initiată cu datele dintr-o stare anterioara;

onSaveInstanceState(Bundle) – este apelată pentru a salva starea curentă a activității înainte ca activitatea să fie ascunsă;

Figura 5: Ciclul de viață al unei activități

Intent: aceste obiecte sunt mesaje asincrone care permit aplicațiilor să solicite funcționalități de la alte componente Android. Este posibilă comunicarea în timpul rulării cu diverse componente aflate fie în interiorul aplicației fie localizate in alte aplicații. O activitate poate apela direct o componenta(intent explicit) sau poate cere sistemului să evalueze componentele înregistrate pe baza datelor din intent(intent implicit).

Servicii: este o componentă care se execută în fundal, fără interactiune directă cu utilizatorul. După ce este pornit un serviciu, acesta iși execută sarcinile chiar dacă componenta care l-a creat inițial este distrusă. Seviciul este folosit atunci când aplicația are de efectuat o operație de lungă durată care nu interacționează cu utilizatorul sau pentru a furniza funcționalități pentru alte aplicații, de exemplu utilizatorul poate asculta muzică chiar dacă acesta este intr-o aplicație diferită.

Furnizorul de conținut(Content Provider): cu ajutorul acesteia aplicația poate furniza date cu alte aplicații.

Receptori de anunțuri(Broadcast Receivers): acesta preia mesaje de tip broadcast. Aceste mesaje sunt trimise de alte aplicații pentru a anunța finalizarea/începerea unei operațiuni, sau de sistem pentru a anunța modificarea parametriilor sistemului(baterie, memorie, semnal etc.).

Fragment: reprezintă un comportament sau o porțiune de interfață cu utilizatorul din cadrul unei activități. Se pot combina mai multe fragmente într-o singură activitate pentru a construi o interfață multi-panou, sau se poate reutiliza un fragment in mai multe activități.

Obiectele de tip fragment au propriul ciclu de viață. Acesta trebuie sa fie tot timpul încorporat intr-o activitate, ciclul de viață al fragmentului fiind afectat în mod direct de ciclul de viață al activității gazdă. Ca și structură este foarte asemănătoare cu cea de tip activity.

Interfață fragmentată pe un ecran mic:

Figura 6: Interfață fragmentată pe un ecran mic

Interfață fragmentată pe ecran lat:

Figura 7: Interfață fragmentată pe un ecran lat

Resurse Android: o aplicție este alcătuită din fișiere ce conțin codul sursă și fișiere cu resurse. Resursele sunt separate de codul sursă și reprezintă o colecție de fișiere video, audio, imagini, text folosite pentru a crea o interfață vizuală cât mai bogată.

Fișierul Manifest: acesta conține informații referitoare la toate componentele, permisiile, serviciile și librăriile utilizate in aplicație.

Structura generala al unui fișier Manifest:

Figura 8: Structura unui fișier Manifest

O permisiune reprezintă o restricție care limitează accesul la date sau la o parte din cod pentru a proteja datele confidențiale.

Procese și fire de execuție: la pornirea unei aplicații se crează automat un proces Linux cu un singur fir de execuție(main threat). În cadrul acestui proces sunt executate toate componentele și instrucțiunile asociate acestora. În cazul în care o componentă este pornită când există deja un proces principal atunci componenta va rula în procesul deja existent. În cazul în care aplicația are de efectuat o operație de lungă durată sau o operație care ar afecta performanțele acesteia se asociază un nou proces care să îndeplinească respectivul set de instrucțiuni, creând astfel fire suplimentare de execuție pentru orice proces. Procesele sunt executate pe o perioadă mai lungă de timp, ele fiind oprite atunci când sistemul are nevoie de memorie sau are de executat procese cu o prioritate mai mare. [3]

I.3. Aplicații similare

DU Recorder

Este una din cele mai bune aplicații Android care îți permite să înregistrezi ecranul. Este o aplicație pe care o poți descarcă gratis fără nici o limitare și fără reclame. Această aplicație te lasă să înregistrezi HD 1080p cu 60 de cadre pe secundă și fără limita de timp, de asemenea oferă o gama largă de modificare a setarilor. Această mai include numeroase caracteristici: buton start/stop, înregistrare de sunet, creare de GIF, editor video etc.

Avantaje:

– gratuitate;

-înregistrare video extrem de personalizabila;

-editor video;

-interfață simplă;

Dezavantaje:

-nu are adăugat un compresor pentru clipurile video HD;

Figura 9: Imagini din interiorul aplicației DU Recorder

Mobizen Screen Recorder

Îți oferă o înregistrare video HD 1080p cu 60 de cadre pe secundă. De asemenea, poți adaugă muzică de fundal și poți edita începutul și sfârșitul înregistrării. Are incorcoporat un editor video ce îți oferă sarcinile de baza al unui editor.

Avantaje:

-înregistrare HD fără limita de timp;

-editor video;

-opțiune de pauză și reluare al înregistrării;

Dezavantaje:

-apariția reclamelor după fiecare înregistrare;

Figura 10: Imagini din interiorul aplicației Mobizen

ADV Screen Recorder

Această aplicație  de înregistrare a ecranului îți oferă 2 moduri: implicit și avansat.

Modul implicit îți oferă înregistrare de baza al ecranului, iar cea avansată îți oferă posibilitatea de a personaliza video-ul în timp ce înregistrezi: poți pune pauză, poți folosi camera, sau să adaugi text în video.

Avantaje:

-are moduri pentru începători și avansați;

-poți creea logo-uri personalizate și lipi pe video;

-utilizarea camerei;

Dezavantaje:

-apariția reclamelor;

-lipsa unor editări importante;

Figura 11: Imagini din interiorul aplicației ADV Screen Recorder

Game Screen Recorder

Este o aplicație gratis și fără reclame ce este concepută special pentru înregistrarea jocurilor. Are o caracteristică importantă pentru a începe înregistrarea în timp ce intrii în joc. Pe lângă această caracteristică îți oferă și posibilitatea să pui pauză înregistrării sau să creezi o introducere videoclipului.

Avantaje:

-detecția automată a jocurilor

-poți creea o introducere separată  înregistrării

-gratis

Dezavantaje:

-nu are editor video

-butonul de înregistrare este prezent în video

Figura 12: Imagini din interiorul aplicației Game Screen Recorder

HD Screen Recorder

HD Screen Recorder îți oferă posibilitatea de a pune parolă înregistrărilor făcute, având un nivel sporit de protecție.De asemenea poți șterge video-urile chiar din aplicație sau poți să împărtășești înregistrare pe internet. Înregistrarea poate fi făcută atât tip portret cât și tip peisaj.

Avantaje:

-adăugarea unei parole de protecție;

-îți da control asupra calității videoclipului;

Dezavantaje:

-nu are un editor propriu;

-apariția reclamelor;

Figura 13: Imagini din interiorul aplicației HD Screen Recordedr

I.4. Descrierea capitolelor

Lucrarea este structurată pe 5 capitole după care este prezentată bibliografia și anexele.

Capitolul 1: Introduce in aplicațiile Android. O scurta descriere al aplicațiilor ce au ca si scop inregistrarea ecranului dispozitivului.

Capitolul 2: Prezintă considerentele teoretice ale lucrării

Capitolul 3: Se prezinta partea practică

Capitolul 4: Se prezintă concluziile finale

Capitolul 5: Este prezentată bibliografia

Considerente teoretice

II.1.Android

Android este o platformă software și un sistem de operare dezvoltat de Google pentru dispozitivele și telefoanele mobile, și este bazat pe o versiune modificată a lui Linux Kernel. De asemenea, Google a dezvoltat sistemul Android și pentru televizoare (Android TV), autovehicule (Android Auto) și ceasuri de mână (Android Wear).

Android Inc. a fost înființată in anul 2003. În anul 2005 aceasta a fost cumpărată de Google, iar in 2007 versiunea beta a sistemului de operare Android. În anul 2008 a aparut prima versiune oficială a sistemului folosită pentru prima dată pe smartphone-ul HTC Dream. De atunci Android a dezvoltat numeroase versiuni, ajungând in prezent la versiunea 8.1 Oreo.

Începând cu anul 2008, când a apărut prima versiune oficială, Android a fost disponibil ca “Open Source”, Google deschizând întregul cod sursa pentru utilizatorii săi.

Android este asociat cu mai multe programe dezvoltate de Google, precum: Gmail, Google Search și cu platforma de aplicații Google Play.

Aceste este cel mai vandut sistem de operare pentru dispozitivele mobile, având in prezent peste 2 miliarde de utilizatori in fiecare luna.[4],[5]

II.2 Open Source

Termenul “Open Source, în dezvoltarea de programe, este descris prin faptul ca deținătorul drepturilor de autor al unui cod sursă, acorda utilizatorilor dreptul de a studia, de a modifica și de a distribui software-ul,sub o licență liberă. Există 4 forme de libertate pentru utilizatorii săi:

Libertatea de a utiliza programul, în orice scop (se mai numește “libertatea 0”);

Libertatea de a studia modul de funcționare a programului, și de a-l adapta nevoilor proprii (“libertatea 1”). „Open source” asigură accesul la tot codul-sursă;

Libertatea de a redistribui copii(“libertatea 2”);

Libertatea de a îmbunătăți programul, și de a pune îmbunătățirile la dispoziția publicului, în folosul întregii societăți (“libertatea 3”). Necesită accesul la codul-sursă;[6]

II.3 Caracteristici

[7]

II.4 Versiuni

[8]

Caracteristici versiuni:

Android Cupcake – Suport pentru tastatura virtuală cu text predictiv și dicționar, suport pentru Widgets(extensii a unei aplicații), înregistrare video și redare, suport pentru Bluetooth, copy/paste în browser, abilitatea de a încarca filmulețe pe Youtube sau de a încarca fotografii pe Picasa;

Android Donut – căutarea de inregistrari și text a fost îmbunătățită, căutarea mai ușoară în Android Market, abilitatea utilizatorilor de a selecta mai multe fotografii pentru ștergere, îmbunatățirea vitezei, suport pentru rezoluțiile excranului WVGA;

Android Eclair – posibilitatea de a adăuga mai multe conturi pentru sincronizare, suport email, abilitatea de a cauta SMS sau MMS, multe îmbunătățiri a camerei, o scriere mai rapidă, îmbunătățire a Google Maps;

Android Froyo – îmbunătățire a vitezei, memoriei și performanței, USB tethering si hotspot pentru Wi-Fi funcționale, posibilitatea de a întrerupe datele mobile, schimbare mai rapidă intre limbile unei tastaturi, suport Adobe Flash;

Android Gingerbread- un design nou si mai simplu, suport pentru rezoluții mai mari, suport pentru telefonia pe internet VoIP, îmbunătățirea funcției copy/paste, introducerea Near Field Communication(NFC), suport pentru mai multe camere inclusiv o cameră frontală, suporturi noi pentru a reda fișiere video/audio, îmbunătățire a utilizării bateriei, utilizarea mai multor senzori, introducerea pentru prima dată a unui “Easter Egg”;

Android Honeycomb – adăugarea System Bar si Action Bar, simplificarea multitasking-ului, o tastatură nouă, posibilitatea deschiderii mai multor ferestre in browser-ul web, acces mai rapid in caracteristicile camerei, posibilitate mai usoara de a identifica si a localiza contactele, Hardware acceleration, suport pentru procesoarele cu mai multe nuclee;

Android IceCreamSandwich – posibilitate mai ușoara de a creea folder, capturi de ecran integrate, posibilitatea de a selecta aplicațiile chiar daca telefonul este blocat, deblocare facială, afișarea utilizării datelor, posibilitate de a înregistra in 1080p, îmbunătățire a camerei, posibilitatea de a închide aplicații prin swipe;

Android Jelly Bean – ecrane principale mai usor de personalizat, tastatură îmbunătățită, Google Now, Android Bam;

Android KitKat – consum redus de memorie, Google Now îmbunătățit, update pentru aplicația Hangouts, interfata de apelare îmbunătățită, aplicații pe tot ecranul, integrarea serviciilor de stocare in Cloud, Cloud Printing de pe telefon, senzori inteligenți, setari globale pentru subtitrare, îmbunătățire a sistemului de deblocare a ecranului;

Android Lollipop – răspuns rapid pentru notificări, suport pentru citire amprente, suport USB-C, backup automat pentru date, display 4K pentru aplicații;

Android Nougat – o interfață mai ușor de utilizat, schimbare rapida intre aplicații, aparitia funcției Doze(minimizează toate resursele bateriei când nu folosești telefonul), posibilitatea de a mari ecranul;

Android Oreo – autonomie mai bună a bateriei, timpi mai mici de pornire, un control mai bun al notificărilor, Google Play Protect, Rescue Protect, funcția Instant Apps;

Android P – îmbunătățire a autonomiei,algoritm nou de luminozitate automată, navigare prin meniu mai ușoară, monitorizarea timpului petrecut pe smartphone, Shush;[9]

II.5 Platforma Hardware

Android a fost proiectat pentru a fi compatibil cu o gamă largă de electronice. Aceasta constituie o caracteristică importantă, întrucat permite producătorilor să conceapa și să integreze elementele necesare dispozitivului Android, făcându-l atractiv atât în rândul programatorilor cât și al consumatorilor.

Fiind o platforma destinată, în principal dezvoltării aplicațiilor Android, s-a avut în vedere, în realizarea ei, conservarea energiei bateriei precum și gestionarea, în mod eficient, a resurselor de memorie.

Majoritatea dispozitivelor mobile au utilizat încă de la început procesoare ARM, cunoscute a fi foarte de puternice, raportat la consumul de energie.

De asemenea, designerii de celulare au realizat o componentă separată care să gestioneze complexitatea comunicării mobile, pentru a nu suprasolicita procesorul.

Pentru a asigura o conexiune la telefonia mobilă, să se poată realiza atât transferul de date cât și de voce se utilizează atât sisteme hardware cât și software. Aceste sisteme fiind modem-ul baseband și radioul.

Din figura 12 rezultă că telefoanele inteligente au 2 tipuri de memorie: memoria cu acces aleator(RAM) și memoria nevolatila NAND. Memoria RAM este folosită de sistem pentru încărcarea , executarea și manipularea diferitelor părți ale sistemului de operare, iar cea flash pentru stocarea sistemului de operare precum și a datelor dorite de utilizator. Cele 2 componente sunt combinate într-o singură componentă, cunoscută sub denumirea de pachet multicip(MCP).

Figura 12: Structura MCP

Una din componentele hardware o constituie sistemul de poziționare globală(GPS). Acesta nu identifică doar locația telefonului, folosindu-se de sateliții GPS, dar oferă și aplicațiilor posibilitatea de a accesa și de a se folosi de aceste informații.

Sistemul de operare Android permite conectarea la internet prin activarea opțiunii Wireless, sau conectarea cu alte telefoane sau dispozitive externe prin activarea opțiunii Bluetooth.

Majoritatea telefoanelor mobile prezintă un card de memorie, cunoscut sub denumirea de card SD(Secure Digital). Acestea sunt tipuri de memorie nevolatila ce utilizează tehnologia flash NAND. Acesta fiind un avantaj Android față de telefoanele Apple care nu au card SD.

Ecranul este interfața sistemului de operare pentru interacțiunea cu utilizatorul. Acesta se află într-o continuă dezvoltare, urmărindu-se creșterea rezoluției, luminozității precum și capacitatea de răspuns la stimuli.

Camera telefonului a cunoscut o imensă dezvoltare în ultimii ani, ajungând ca unele telefoane să aibă o cameră aproape la fel de performantă ca a unui aparat foto. Pe langă funcția de a face poze și de a filma aceasta mai are numeroase setări cum ar fi posbilitatea să citească un cod de bare, să încarce fotografiile direct pe internet, folosindu-se de GPS poate să ofere și informații despre locația unde a fost facută fotografia sau filmulețul.

Tastatura a fost înlocuită cu una virtuală ce încorporează tehnologia touch screen(de a atinge ecranul) și se poate adapta după poziția telefonului. De asemenea, are și suport pentru mai multe limbi și are posibilitatea de a afișa un text predictiv.

O problemă a telefoanelor Android o prezintă durata scurtă de viață a bateriei mai ales că aplicațiile prezente sunt mari consumatoare de energie.

Majoritatea telefoanelor au suport USB(Universal Serial Bus) pentru a asigura conexiunea cu calculatorul pentru a realiza mai multe funcții: încărcarea bateriei, accesarea și scrierea memoriei SD.

Prezintă o serie de senzori printre care putem aminti de accelerometru sau de giroscop, unul din rolurile lor este de a detecta și schimbă poziția ecranului.

Alte componente importante ce s-au dezvoltat de-a lungul timpului sunt difuzorul și microfonul, obținandu-se o calitate cât mai bună a sunetului.[10]

II.6 Arhitectura sistemului

Figura 12 : Arhitectura sistemului Android

Arhitectura sistemul de operare este alcatuit din 5 straturi principale care comunică între ele. Cele 5 straturi sunt: Linux Kernel, Libraries, Android Runtime, Application Framework și Applications[11]

Linux Kernel reprezintă partea care este rezervată sistemului, iar programatorul sau utilizatorul nu vor utiliza acest strat

Figura 13: Stratul Linux Kernel

Native Libraries reprezintă bibliotecile sistemului de operare. Aceste sunt scrise in C sau in C++ și sunt compilate pentru un anumit hardware. În acest strat sunt bibliotecile care gestioneaza bazele de date(SQLite), redarea filmelor(Media Framework) sau afișarea fișierelor HTML(WebKit).

Figura 14: Stratul Libraries

Android Runtime cuprinde mașina virtuală Dalvik și bibliotecile Java.

Figura 15: Stratul Android Runtime

Application Framework este stratul cu care lucreaza direct programatorul. Acesta vine preinstalat în Android, însa serviciile sale pot fi extinse și se pot crea propriile componenete.

Figura 16: Stratul Aplication Frameword

Application reprezintă ceea ce vede utilizatorul și ceea ce el folosește.

Figura 17: Stratul Aplications

II.7 Android Studio

Android Studio este un mediu de dezvoltare al aplicațiilor Android ce a fost construit dupa programul IntelliJ IDEA de la JetBrains. Android Studio este disponibil pentru sistemele de operare Windows, macOs și Linux.

Android Studio înlocuiește Eclipse Android Development Tools(ATD) ca dezvoltator principal de dezvoltare al aplicațiilor Android.

Acesta a fost anunțat pe 16 mai 2013, începand cu mai multe versiuni beta. Prima versiune oficiala a fost lansată în decembrie 2014. Versiunea curenta a aplicației este 3.1.3 lansată in 2018.

Acesta ofera mai multe caracteristici care sporesc productivitatea, cum ar fi:

Android Virtual Device(Emulator) – pentru a rula si depana aplicațiile din Android Studio;

Suport pentru a crea aplicații pentru Android Wear;

Sistem de construcții ce se bazează pe Gradle;

“Memory Monitor” o funcție pentru a oferi informații legate de ocuparea resurselor;

“Code refactoring” pentru remedieri rapide a codului;

Instrumente pentru a vedea performanța, gradul de utilizare, compatibilitatea veriunii și alte probleme;

“ProGuard” pentru a optimiza codul;

O posibilitate largă de modificare a interfeței;

Suport C++ si NDK;

O gamă bogată de aspecte(Layout);

Figura 18: Structura Android Studio

Bara de instrumente: vă permite sa efectuati o gamă largă de acțiuni;

Bara de navigare: vă ajută sa navigați prin proiect și să deschideți fișiere pentru editare;

Spațiul de lucru: spațiul in care se găsește codul;

Bara de ferestre: conține butoanele care vă ajută să extindeți sau să restrângeți ferestrele individuale;

Fereastra de instrumente: ce vă oferă acces la anumite sarcini;

Bara de stare: afișează starea proiectului;

În Android Studio există mai multe moduri de a vizualiza un proiect. Cele mai importante părti ale unei aplicații Android sunt:

fișierele Java: sunt fișierele utilizate cel mai des, deoarece fiecare funcționalitate va fi implementată în clasa corespunzătoare;

directorul res – unde sunt organizate toate resursele unei aplicații;

gradle scripts: verifică faptul că toate elementele necesare proiectului sunt disponibile; asigură asamblarea tuturor dependențelor necesare;

Android Manifest: reprezintă rădăcina fiecărui proiect ce conține detalii esențiale despre aplicație, cum ar fi permisiunile și versiunea acesteia;[12]

Figura 19: Structura unui proiect

II.8. Emulator Android Studio

Android Studio dispune de un emulator care simuleaza numeroase telefoane și tablete Android, Wear OS si Android TV direct pe computer-ul dumneavoastra. Acesta vine cu diferite configurații predefinite pentru diferite tipuri de dispozitive populare. De asemenea transferul de date este mai rapid decat pentru un dispozitiv conectat prin USB la computer.

Emulatorul Android furnizează aproape toate capabilitățile unui dispozitiv real cu Android. Puteti simula apelurile telefonice si mesajele primite, locația dispozitivului, simularea diferitelor viteze de retea, rotatia și alți senzori hardware ai telefonului, sau accesa Google Play si altele.

Fiecare dispozitiv virtual(Android Virtual Device-AVD) funcționează ca un dispozitiv independent cu spațiul său privat de stocare al datelor, versiune Android și multe alte caracteristici hardware.[13]

Figura 20: Emulatorul implicit programului Android Studio

II.9. Limbaje de programare

Un limbaj de programare este o tehnica de comunicare standardizată pentru transmiterea unui set de reguli și intrucțiuni către un computer.

Limbajele folosite pentru programarea unui calculator sunt extrem de asemanătoare limbajelor naturale, fiind compuse din:

cuvinte (rezervate);

punctuație;

propoziții și fraze;

reguli sintactice;[14]

Figura 21: Nivelurile limbajelor de programare

Limbajul mașină este limba nativă al computer-ului. Este limbajul cel mai apropiat de partea hardware. Fiecare computer are un limbaj unic. Un astfel de program al limbajului de programare este alcătuit dintr-o serie de modele binare care reprezintă operații simple ce  sunt realizate de către calculator.

Un limbaj de asamblare este un limbaj de programare, care în locul codului mașînă, folosește o desemnare simbolică a elementelor programului, format din simple abrevieri(ADD, MOV), relativ ușor de citit și interpretat de către om. Un exemplu de astfel de limbaj este Asemble. Pentru a putea fi interpretate de procesor, trebuie întâi redus prin compilare (sau asamblare sau interpretare) la "codul obiect" , în acest scop fiind folosite "compilatoarele", "asambloarele" sau "interpretorii". Programarea în limbaj de asamblare presupune o bună cunoaștere a structurii procesorului și a componentelor sale adiacente.

Limbajele de nivel înalt, de exemplu, C/C++, Java, sunt mai asemanătoare limbajului natural, astfel sunt mai usor de ințeles de catre programator. Limbajele de nivel înalt necesită, de asemenea, o traducere in limba mașinii înainte de execuție. Această traducere este realizată fie prin compilare, fie prin interpretare.[15]

Limbajele de programare au apărut odata cu apariția computer-ului digital în anii ’40.

Primul limbaj de asamblare a apărut la sfârșitul anilor '50, iar primele limbaje de programare au apărut la mijlocul anilor '50 începutul anilor '60, acestea fiind "Fortran" "Cobol" și "Algol"

La începutul anilor ’70 a apărut limbajul “Pascal”, produs de Niklaus Wirth, acesta fiind limbajul ce a dus la evoluția limbajelor de programare datorită deschiderii acordata viitorilor programatori.

În anul 1972, Brian Kernighan și Dennis Ritchie, au conceput un limbaj cu destinație universală, acesta fiind limbajul C.

Iar in 1980 apare o extensie la limbajul C, denumit C++, acesta fiind destinat programării orientate obiect. Iar in 1995 apare limbajul Java, care are o sintaxă și principii asemănătoare limbajului C++. Acesta fiind cel mai utilizat limbaj orientat-obiect la ora actuală. Ca răspuns la Java, Microsoft a introdus limbajul C#.

Pentru programarea web, astăzi cel mai important limbaj este PHP, care este foarte asemănător ca sintaxă cu C/C++.

Un alt limbaj foarte puternic si care poate fi utilizat in prezent pentru învățarea “artei programării”, așa cum o numea Niklaus Wirth, este Python.

Astfel, odată cu dezvoltarea tehnologiei se dezvoltă și limbajele de programare specifice diferitelor domenii de programare (de exemplu, limbaje destinate inteligenței artificiale, limbaje grafice, limbaje de programare pentru Internet etc.).[16]

Limbajele de programare se împart după mai multe categorii:

După paradigma programării

limbaje ezoterice: Brainfuck;

limbaje procedurale: C, Java, Perl;

limbaje funcționale: ML, Haskell;

limbaje pentru programarea logică: Prolog, DATALOG;

limbaje mixte: LISP oferă un amestec heteroclit și netipizat de programare imperativă și programare funcțională;

După nivelul de abstractizare (care printre altele corespunde cu ușurința cu care programele pot fi citite și înțelese de către programatori):

limbaje de generația întâia: limbajele cod-mașină (limbaje mașină);

limbaje de generația a doua: limbajele de asamblare;

limbaje de generația a treia: limbaje de nivel înalt, cum ar fi C-ul (și toate derivatele sale: C++, Java, …), Pascal, Fortran;

limbaje de generația a patra: limbajele neprocedurale, orientate pe rezolvarea unei anumite clase de probleme: SQL;

limbaje de generația a cincea: limbaje utilizate în domenii precum logica fuzzy, inteligența artificială sau și rețelele neuronale: Prolog, LISP;

După vechime

Limbaje din secolul XX: LISP și FORTRAN din anii '50;

Limbaje din ultimul deceniu al secolului XX până în prezent; ex. Haskell, Ruby, Brainfuck, limbajul D;[14]

II.10 Limbajul de programare Java

Java este un limbaj de programare orientat-obiect și este conceput în așa fel incat să aibe cât mai puține dependențe de implementare posibil ce a fost creat de James Gosling, la Sun Microsystems, acuma fiind filială Oracle, în anul 1995. Se dorește să se permită dezvoltatorilor de aplicații sa “scrie o singura dată, să ruleze oriunde” ("Write once, run anywhere"-slogan creat de Sun Microsystems pentru a ilustra beneficiile limbajului de programare Java).[17]

Versiuni Java:

Figura 22: Versiuni Java

În momentul creării s-au avut in vedere 5 obiective principale:

Trebuie să fie simplu,orientat-obiect și familiar;

Trebuie să fie robust și sigur;

Trebuie să aibă o arhitectură neutră și portabilă;

Trebuie executat cu performanță ridicată;

Trebuie să fie interpretabil și dinamic;

Cele mai multe aplicații distribuite fiind scrise în Java, iar noile evoluții tehnologice permit utilizarea sa și pe dispozitive mobile.

Java împrumuta foarte mult din sintaxta limbajului C/C++, dar are un model al obiectelor mai simplu și are mai puține facilități de nivel scăzut decat oricare dintre ele.

Un program corect scris poate rula, fără modificări, pe orice platforma care are instalată o mașina virtuală Java(în engleza Java Virtual Machine, prescurtat JVM). Acest nivel de portabilitate se datorează faptului că sursele Java sunt compilate intr-un format standard, numit cod de octeți(în engleza byte-code).

Codurile de octeti sunt seturi de instructiuni care seamana cu codul scris în limbaj de asamblare si sunt generate de compilator independent de mediul de lucru.

Prin mașina virtuala Java (JVM) vom întelege mediul de executie al aplicaților Java. Pentru ca un cod de octeti să poată fi executat pe un anumit calculator, pe acesta trebuie să fie instalată o masină virtuală Java.[18]

În functie de modul de execuție a aplicațiilor, limbajele de programare se împart in 2 categorii:

Interpretate: instrucțiunile sunt citite linie cu linie de un program(interpretor) și traduse în instrucțiuni mașină.Cel mai cunoscut limbaj de programare este limbajul Basic.

Avantaje:

simplitate;

portabilitate;

Dezavantaje:

viteza de execuție redusă;

Compilate: codul sursă este transformat de compilator într-un cod ce poate fi executat direct de procesor, numit cod mașină.

Avantaje:

execuție extrem de rapidă;

Dezavantaje:

lipsa portabilității;

Java combină soluțiile de mai sus, programele fiind atât interpretate cât și compilate.

Avem un total de 4 platforme Java oferite de Oracle:

Java Card: pentru smartcard-uri;

Java Platform, Micro Edition(Java ME): pentru dispozitivele cu resurse limitate;

Java Platform, Standard Edition(Java SE): pentru PC-uri(Personal Computer);

Java Platform, Enterprise Edition(Java EE): pentru sistemele de calcul mari;[19]

Figura 23: Clasament al limbajelor de programare dupa utilizare

III. Partea practică. Aplicația

III.1. Descriere aplicație

Datorită numarului foarte mare de utilizatori ce dețin un dispozitiv mobil cu Android, am decis să fac o aplicație mobilă ce înregistreaza ecranul unui dispozitiv mobil ce deține acest sistem de operare.

Sunt mai multe avantaje de a utiliza o aplicație pentru a înregistra ecranul:

Pentru a demonstra un proces: de exemplu dacă cineva nu iși amintește cum să încarce un filmuleț pe youtube, nu trebuie să ii explici la telefon sau să te duci personal să ii arați și poti filma direct pe dispozitivul propriu si apoi să îi trimți înregistrarea;

Pentru a înregistra o eroare sau un bug într-o aplicație: poți înregistra ce se întâmplă cu aplicația, fiind un mod mult mai ușor decat să încerci să explici exact ce se întampla;

Pentru a demonstra funcționarea unei aplicații sau pentru a arăta noile sale funcții: de exemplu daca actualizați o aplicație poți face un video cu noile actualizări sau daca o aplicație e nou creată poți arăta utilizatorilor cum funcționează;

Pentru a face o recenzie unei aplicații, unui document, unui filmuleț sau unei imagini: de exemplu, în loc să scrii recenzia, poți să te înregistrezi;

Pentru a te înregistra când joci un joc video;

În consecință o aplicație de a înregistra ecranul o poți folosi atât pentru divertisment, atunci când te înregistrezi în timp ce te joci, fie în scop informativ, atunci când faci un tutorial.

Avantajele utilizării aplicației prezentate:

puțin spațiu de memorie utilizat;

o utilizare simplă datorată interfeței minimaliste utilizate;

lipsa reclamelor;

gratuitatea;

înregistrarea fără limită de timp ci doar de memorie;

Dezavantajele utilizării aplicației prezentate:

lipsa unui editor video;

claritatea video-ului si al sunetului nu se poate schimba;

lipsa protecției aplicației;

lipsa unor setări mai avansate, cum ar fi: afișarea gesturilor, un temporizator înainte de a începe înregistrarea, un mecanism de oprire a înregistrării fără a fi nevoit să intrii în ea(de exemplu prin scuturarea telefonului);

Pentru a utiliza aplicația trebuie doar să o deschizi și să apeși butonul “Înregistreaza” și confirmi că vrei să începi.După ce treci de acest pas,apeși butonul de “Home” și înregistrezi ce dorești. Dupa ce termini de înregistrat intrii înapot în aplicație și apeși același buton care acuma e “Stop”.

III.2. Module componente

Ca orice aplicație Android, această aplicație are urmatoarele module componente:

Directorul ”Java” ce conține clasa/clasele utilizate in proiect:

Clase: o clasă este un concept de bază al programării orientate pe obiecte, domeniu in care reprezintă structura care definește caracteristicile abstracte ale unui lucru (obiect), printre care caracteristicile acestuia (atributele sale, câmpuri sau proprietăți), precum și comportamentele acestui lucru (lucrurile pe care le poate face, sau metode, operații sau proprietăți). Se poate spune că o clasă este schița care descrie natura unui lucru

Aplicația este construită dintr-o singură clasă, în care se gasesc toate metodele utilizate in crearea aplicației. Această clasă se numește “MainActivity”, ce este creată în momentul creării proiectului.

Directorul “res” ce se împarte in mai multe directoare:

Drawable- în care se găsește fișierul ”btn_toggle.xml”, ce conține codul pentru a schimba culoarea butonului de comutare în momentul când acesta este apăsat sau nu.

Culoarea butonului înainte de a apăsa butonul de înregistrare-“Înregistrare”

Culoarea butonului în momentul când înregistreaza-“Stop”

Layout(“Aspect”)- un aspect definește structura unei interfețe. Acesta, ca și în cazul claselor pot fi mai multe sau doar una singură, fiind cazul aplicației prezentate. În aplicație folosim un singur aspect, cel implicit ce se crează in momentul începerii unui proiect nou, fiind denumit “activity_main.xml”. Acest aspect este format dintr-un “VideoView” care este situat pe tot ecranul și prin care putem vizualiza înregistrarea dupa încheierea acesteia și dintr-un buton de comutare, care are 2 stări: prima stare in care butonul nu este apăsat,aplicația fiind in modul de așteptare, butonul afișează textul “Înregistrează” pe un fundal verde, acest fundal este dat de fișierul din directorul “drawable” și a doua stare în care butonul este apăsat iar aplicația este in modul de a înregistra ecranul, în momentul de față butonul afișează textul “Stop” pe un fundal roșu, dat de același fișier “drawable”.

Un director “mipmap” în care avem poza cu “iconița” de start al aplicației, care dupa adăugarea pozei in directorul “ic_launcher” o poți modifica în mai multe forme și dimensiuni . Această poză poți sa o descarci de pe internet sau o poți crea singur cu un program de editare, cum ar fi Photoshop.

Directorul Gradle Scripts verifică faptul că toate elementele necesare proiectului sunt disponibile; asigura asamblarea tuturor dependențelor necesare

Directorul “manifest” care conține “Android Manifest.xml” ce conține descrierea aplicației, ce activități, servicii include sau ce permisiuni necesită aplicația pentru a rula.

III.3. Descriere secvențe de cod

În prima parte sunt declarate variabilele cu care lucram:

sunt date 2 coduri aleatorii pentru a cere permisiunea de a folosi aplicația;

Utilizarea claselor MediaProjectionManager, MediaProjection, MediaProjectionCallback, MediaRecorder, VirtualDisplay pentru a permite aplicației sa înregistreze atât video cât și audio;

VideoView pentru a putea reda înregistrarea făcută imediat după ce este oprită înregistrarea;

marimea ecranului și orientarea video-ului prin delarațiile DISPLAY_WIDTH, DISPLAY_HEIGHT, ORIENTATION;

Urmeaza apoi inițierea butonului de comutare, al mărimii display-ului și al clasei MediaRecorder

Urmeaza partea în care, la apăsarea butonului de comutare, se cere permisiunea de a utiliza aplicația.

Dacă butonul este apăsat va începe să înregistreze, în caz contrar nu se va intâmpla nimic, interfața aplicației va rămâne neschimbată.

În momentul când se va apăsa butonul aceasta va începe să înregistreze atât video cât și audio, dacă i se acordă permisiunea.

Sunt date informații despre modul cum să înregistreze atât video cât și audio, de exemplu înregistrarea să fie făcută cu 30 de cadre pe secundă sau claritatea sunetului să fie AMR_NB.

În momentul în care utilizatorul aproba cererea MediaProject este gata să înceapă să înregistreze și să salveze fișierul în memoria telefonului.

În momentul când se va întrerupe înregistrarea, butonul va trece înapoi în prima stare și va permite sa pornesti o noua înregistrare

IV. Concluzii finale

Această tema prezintă 4 capitole, fiecare capitol este format din mai multe sub-capitole.

Primul capitol prezitntă 5 sub-capitole prezentându-se o scurtă descriere al aplicației, împreuna cu câteva date despre numerice despre utilizarea sistemului Android si al limbajelor de programare,o descriere despre elementele unei aplicații, o enumerare al aplicațiilor similare și unde pot fi folosite acest gen de aplicații și o scurtă descriere al capitolelor.

Al doilea capitol cuprinde partea teoretică, ce are un total de 10 sub-capitole. Acest capitol începe cu o scurtă istorie al sistemului de operare, împreuna cu versiunile, caracteristicile sale, arhitectura sa, și informații hardware al telefoanelor cu Android. De asemenea mai conține informații despre mediul de programare Android Studio împreuna cu emulatorul său. Și cateva informații despre limbajul de programare Java.

Al treilea capitol prezintă partea practică împreuna cu sub-capitolele sale în care se descrie aplicația cu modulele sale componente și descrierea codului.

Bibliografie

http://blog.teamgrowth.net/index.php/mobile-application-development/a-brief-introduction-to-mobile-application-development

https://www.bizlaw.md/2017/07/15/aplicatiile-mobile-obiecte-ale-proprietatii-intelectuale/

https://ocw.cs.pub.ro/courses/eim/laboratoare/laborator02

https://en.wikipedia.org/wiki/Android_(operating_system)

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

https://en.wikipedia.org/wiki/Open-source_software

https://en.wikipedia.org/wiki/List_of_features_in_Android

https://ro.wikipedia.org/wiki/Lista_versiunilor_Android

https://en.wikipedia.org/wiki/Android_version_history#Android_1.5_Cupcake_(API_3)

https://profs.info.uaic.ro/~adiftene/Licenta/Licenta2012_SiriteanuAlexandra.pdf

https://ocw.cs.pub.ro/courses/eim/laboratoare/laborator01

https://developer.android.com/studio/intro/

https://developer.android.com/studio/run/emulator

https://ro.wikipedia.org/wiki/Limbaj_de_programare

https://thebittheories.com/levels-of-programming-languages-b6a38a68c0f2

https://programare.tech/blog/articole/evolutia-limbajelor-de-programare

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

https://ro.wikipedia.org/wiki/Java_(limbaj_de_programare)

https://conspecte.com/Programare-Java/ce-este-java.html

Similar Posts