Documente Academic
Documente Profesional
Documente Cultură
Specialitatea:
Informatică
Teză de master
Dezvoltarea aplicațiilor
mobile Android cu Xamarin
A efectuat:
st. gr. C2I2 Ion Cojucovschi
Conducător ştiinţific:
dr. conf. Andrei Braicov
Chişinău, 2018
Cuprins
Introducere ………………………………………………………………… 3
.................................................................
Bibliografie ………………......................................................................... 62
Concluzii ..................................................................................................... 63
Cuvinte-cheie .............................................................................................. 64
1. Aplicatii native:
● IOS in Objective-c sau Swift
● Android in Java
● Windows Phone in C# .Net
In continuare vom descrie fiecare dintre aceste tipuri de aplicatii pentru a vedea
care este totusi difrerenta dintre ele, care sunt mai eficiente, si care dintre ele pe viitor
ar putea pedomina in lumea aplicatiilor mobile.
Aplicatiile native
Aceste aplicații sunt dezvoltate exclusiv pentru un singur sistem de operare
mobil, deci sunt "native" pentru o anumită platformă sau dispozitiv. Aplicația
construită pentru sisteme precum iOS, Android, Windows Phone, Symbian,
Blackberry nu poate fi utilizată pe o altă platformă decât cea proprie. Cu alte cuvinte,
nu veți putea utiliza aplicația Android pe iPhone sau invers.
Principalul avantaj al aplicațiilor native este performanța ridicată și asigurarea
unei experiențe bune pentru utilizatori, pe măsură ce dezvoltatorii folosesc interfața UI
a dispozitivelor. În plus, accesul la o gamă largă de API-uri care nu limitează
utilizarea aplicațiilor. Aplicațiile native sunt accesibile în mod distinct din magazinele
de aplicații de acest gen și au tendința clară de a ajunge la clienții vizați.
Cu toate acestea, acest tip de aplicație este costisitor de dezvoltat deoarece este
legat de un tip de sistem de operare, forțând compania care creează aplicația să facă
versiuni duplicate care funcționează pe alte platforme. Unele aplicații native au costuri
mai mari comparativ cu alte tipuri de aplicații - datorită necesității de a crea duplicate
de aplicații pentru alte platforme, de suport și întreținere separat pentru diferite tipuri
de aplicații, rezultând un preț mai mare pentru produse.
Aplicații hibride
Acestea sunt construite folosind tehnologii web multi-platforme (de exemplu,
HTML5, CSS și Javascript). Așa-numitele aplicații hibride sunt în principal aplicații
de pe site-uri deghizate într-un ambalaj nativ. Aplicațiile posedă argumente pro și
contra obișnuite atât ale aplicațiilor mobile native, cât și ale aplicațiilor web mobile.
Aplicațiile hibride pe mai multe platforme sunt rapide și relativ ușor de
dezvoltat - un avantaj clar. Baza unică de coduri pentru toate platformele asigură o
întreținere la preț redus și actualizări ușoare. Utilizați API pe scară largă, cum ar fi
giroscop, accelerometru, geolocație.
Pe de altă parte, aplicațiile hibride nu au performanță, viteză și optimizare
globală în comparație cu aplicațiile native, de exemplu. De asemenea, există anumite
probleme de proiectare din cauza incapacității aplicației de a arăta în același mod pe
două sau mai multe platforme.
Principalul avantaj al aplicațiilor hybrid este reutilizarea codului pe diferite
platforme, spre exemplu dacă utilizam platforma care creează aplicații pe baza
tehnologiilor web, atunci codul HTML(design) si JavaScript poate fi reutilizat si pe
alta platforma (OS), iar dacă utilizam spre exemplu Xamarin atunci cross-codul poate
atinge 70-80% din tot codul aplicației, spre exemplu aici design codul nu poate fi
reutilizat, cu toate ca se poate de fîcut share la design-cod, doar ca acesta reduce
considerabili performanta aplicației.
Aplicațiile Web
Acestea sunt aplicații software care se comportă într-un mod similar cu
aplicațiile native. Aplicațiile Web utilizează un browser pentru a fi difuzate și sunt de
obicei scrise în HTML5, JavaScript. Aceste aplicații redirecționează un utilizator la
adresa URL și oferă opțiunea de "instalare" creând pur și simplu un marcaj în pagina
lor.
Aplicațiile web necesită, de regulă, minimum de memorie a dispozitivului. Pe
măsură ce toate bazele de date personale sunt salvate pe un server, utilizatorii pot
accesa de pe orice dispozitiv ori de câte ori există conexiune la internet. Acesta este
motivul pentru care utilizarea de aplicații web cu conexiune slabă ar avea ca rezultat o
experiență nefavorabilă a utilizatorului. Dezavantajul este accesul a puținelor API-uri
pentru dezvoltatori, cu excepția localizării și a altelor.
Aplicațiile Web au devenit foarte populare când HTML5 și-a făcut apariția și
oamenii și-au dat seama că pot obține funcționalități asemănătoare nativului în
browser. Astăzi, deoarece tot mai multe site-uri folosesc HTML5, distincția dintre
aplicațiile web și paginile web obișnuite a devenit neclară.
Xamarin Studio
În momentul lansării sale în februarie 2013, Xamarin Studio a fost un IDE
independent pentru dezvoltarea aplicațiilor mobile pe Windows și MacOS, ca parte a
Xamarin 2.0, bazat pe proiectul open source MonoDevelop. Pe lângă un program de
depanare, Xamarin Studio include completarea codului în C #, un constructor UI
Android pentru crearea de interfețe utilizator fără XML și integrarea cu Xcode
Interface Builder pentru proiectarea aplicațiilor iOS.
Pe Windows Xamarin Studio este acum depreciat și a fost înlocuit cu Xamarin
pentru Visual Studio. Pe macOS Xamarin Studio este încă în dezvoltare, dar a fost
rebrand 2016 ca Visual Studio for Mac.
Xamarin.Mac a fost creat ca un instrument pentru dezvoltarea aplicațiilor
tehnologiei Apple utilizând limbajul de programare C #. Xamarin.Mac, ca și în cazul
Xamarin.iOS și Xamarin.Android, oferă dezvoltatorilor până la 90% din reutilizarea
codurilor pe Android, iOS și Windows. Xamarin.Mac oferă dezvoltatorilor C #
posibilitatea de a construi aplicații de Cocoa complet native pentru Mac OS X și
permite aplicații native care pot fi puse în Mac App Store.
RoboVM
În octombrie 2015, Xamarin a anunțat că a achiziționat RoboVM-ul suedez
pentru platforma de dezvoltatori Java asemănător ofertelor sale, motivul declarat de
Xamarin pentru achiziție a fost că dacă ar dezvolta o platformă bazată pe Java de la
bază până la finalul produsului final asemanatoare cu RoboVM, astfel incat au
dobândit compania, în consecința RoboVM operează independent de echipa Xamarin.
RoboVM permite dezvoltatorilor să construiască aplicații Java pentru iOS și Android
cu UI-uri native, performanțe native și toate aplicațiile Java au acces complet la API-
urile fiecărei platforme de dezvoltatori.
apoi faceți click pe Install. Acestea pezintă resursele minime pentru a lucra cu Mediul
Visual Studio Xamarin.
De asemeni puteți găsi mai explicit pașii de instalare a Xamarin pe Visual
Studio pe următorul link: https://developer.xamarin.com/guides/cross-
platform/getting_started/installation/windows/
sau Xamarin Studio pe linkul:
https://developer.xamarin.com/guides/android/getting_started/installation/windows/
Dezvoltatorii pot folosi Visual Studio, pentru a construi aplicații Xamarin, care
vizează și iOS și Android ca toate platformele Windows diferite. Cu toate acestea,
dezvoltarea iPhone și iPad necesită, de asemenea, un Mac conectat la PC printr-o rețea
locală. Acest Mac trebuie să aibă instalat Xcode, precum și Xamarin Studio, un mediu
de dezvoltare integrat bazat pe OS X care vă permite să dezvoltați iPhone, iPad, Mac
OS X și aplicații Android pe Mac. Xamarin Studio nu vă permite să dirijați
platformele Windows.
Avantajul dirijării mai multor platforme cu un singur limbaj de programare
provine din capacitatea de a partaja codul între aplicații, asta economisește timpul,
reduce efortul de creare a aplicației și reduce din utilizarea mai multor resurse.
Înainte ca codul să poată fi partajat, o aplicație trebuie bine structurată în acest
scop. În special din moment ce a accelerat utilizarea pe scară largă a interfețelor
grafice ale utilizatorilor, programatorii au înțeles importanța separării codului
aplicației în straturi funcționale. Poate că diviziunea cea mai utilă este între interfața
utilizator-cod și modelele și algoritmii de date. Aplicația populară MVC (Model-
View-Controller) arhitectura formalizează această separare a codului într - un model
(datele de bază), vizualizarea (reprezentarea vizuală a datelor) și Controlorul (care
gestionează datele de la utilizator).
MVC își are originile din anii 1980. Cea mai recenta arhitectura care are
pornirile de la MVC este MVVM care efectiv a modernizat arhitectura MVC bazata pe
GUI-uri (Graphical User Interface) moderne. MVVM separa codul în Model(datele
model), View(interfața utilizatorului, incluzând input-urile vizuale) și
ViewModel(acesta este managerul care formează relațiile dintre Model și View).
Când un programator dezvoltă o aplicație care țintește mai multe platforme,
arhitectura MVVM ghidează dezvoltatorul în separarea codului specific fiecărei
platforme (adică ajuta la crearea legăturii între View-codul care interacționează cu
API-urile platformei, acestea fiind specifice fiecărei platforme și codului independent
adică cel scris pentru Model și ViewModel).
Adesea acest cod independent de platformă trebuie să acceseze fișiere sau rețea
sau să utilizeze colecții sau threading. În mod normal acest lucru ar putea fi considerat
ca poate fi îndeplinit de API-urile sistemului de operare dar acestea pot fi executate și
de biblioteca .NET Framework iar dacă .NET este disponibil pe fiecare platformă
atunci acest cod este efectiv independent de platformă.
Partea aplicației care este independentă de platformă poate fi izolată și pusă în
contextul unui proiect nou de tip Proiect de Asset Shared (SAP)-care constă pur și
simplu din cod și alte fișiere și materiale accesibile din alte proiecte sau poate fi
izolată intr-un proiect de tip Portable Class Library (PCL), care cuprinde tot codul
comun într-o bibliotecă namic-link (DLL) care poate apoi să fie menționate de alte
proiecte.
Următoarea diagramă ilustrează interconexiunile dintre Visual Studio sau
Xamarin Studio și librăriile Xamarin și API-urile platformei. În a treia coloana este
prezentat pentru oricare proiect bazat .NET Windows Platform:
INTRODUCERE ÎN XAMARIN
Pe data de 28 mai 2014 Xamarin introduce Xamarin.Forms, care vă permite să
scrieți codul de interfață utilizator care pot fi compilate pentru dispozitivele IOS,
Android și Windows. Din motive ca deja exista o legătura strânsa intre noul proiect
Xamarin bazat pe limbajul C# si tehnologiile .NET, proiectul Xamarin a avut un
startup destul de reușit, pentru ca deja putea utiliza nenumăratele biblioteci disponibile
aplicațiilor .NET, iar pasul de intrare în aceasta platforma de creare a aplicațiilor era
destul de mic pentru cunoscătorii tehnologiilor .NET.
XAMAL support
Mai jos voi prezenta fișierul XAML pentru screenshot-urile de mai sus:
Într-un program real fiecărui obiect i se poate atașa un eveniment aceasta
realizându-se prin intermediul codului C#. Aici acestea nu au atașat nimic, cu scopul
prezentării cât mai simple a noțiunilor de bază.
Permisiuni în Xamarin.Android
Aplicațiile android se executa în propriul spațiu de stocare și din motive
de securitate nu au acces la anumite resurse de sistem sau hardware pe
dispozitiv. Utilizatorul trebuie să acorde în mod explicit permisiunea aplicației
înainte de a putea utiliza aceste resurse. De exemplu, o aplicație nu poate
accesa GPS-ul pe un dispozitiv fără permisiunea explicită a utilizatorului.
Android va arunca o Java.Lang.SecurityException dacă o aplicație încearcă să
acceseze o resursă protejată fără permisiune.
Permisiunile sunt declarate în AndroidManifest.xml de către
programator atunci când este dezvoltată aplicația. Android are două fluxuri de
lucru diferite pentru a obține consimțământul utilizatorului pentru acele
permisiuni:
1. Pentru aplicațiile care vizează Android 5.1 (nivel 22 API) sau mai
mic, cererea de permisiune a apărut la instalarea aplicației. Dacă
utilizatorul nu a acordat permisiunile, aplicația nu va fi instalată.
Odată ce aplicația este instalată, nu există nicio modalitate de
revocare a permisiunilor decât prin dezinstalarea aplicației.
2. Începând cu Android 6.0 (nivel 23 API), utilizatorii au primit mai
mult control asupra permisiunilor; aceștia pot acorda sau revoca
permisiuni atât timp cât aplicația este instalată pe dispozitiv.
Această captură de ecran afișează setările de permisiune pentru
aplicația Google Contacts. Acesta afișează diferitele permisiuni și
permite utilizatorului să activeze sau să dezactiveze permisiunile:
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
/>
2. Grafic, accesând opțiunea Properties din Solution Explorer, apoi selectam opțiunea Android
Manifest, după cum este prezentat în screen-ul următor:
§ 2. Structura aplicației
Readabook este o aplicație user-app adică fiecare utilizator trebuie sa fie
înregistrat pentru a avea acces la aplicație. Pentru mai multe detalii despre structura
aplicație cititorii pot descarca aplicația de pe următorul link
https://mega.nz/#!JgtGhb7T!kcDl0wO4xZ9JHyrEJI49GobB1_GVRyt7KB3oUrtUY
4U . Accesarea acestui link se va face de pe un device ANDROID care va cere
permisiunea de a descarca un fișier în format .apk, după descărcare utilizatorul
trebuie sa activeze opțiunea de instalare a aplicațiilor android din resurse
necunoscute, care se afla în setări. După instalarea aplicației utilizatorul trebuie sa-și
creeze un cont readabook pe următorul link http://readabook.16mb.com/register ,
trebuie de menționat ca utilizatorul nu poate utiliza aplicația dacă contul sau nu este
activat.
În desenul de mai jos sunt afișate opțiunile principale a aplicației la care orice
utilizator are acces.
Cu aceasta problema se ocupa doua librarii una care face legătura intre
obiectele xml și cele din activitate iar alta care face legătura dinte obiectele din
activitate și cele din ViewModel, deci în continuare voi prezenta doar modul în care
se creează aceasta legătura intre obiecte:
[CrossView(nameof(NameOfViewModel.ObjectName))]
[InjectView(Resource.Id.object_id_in_xml)]
[InjectView(Resource.Id.object_id_in_xml)]
Foarte des putem obține crash-uri din motiv ca obiectul din xml nu-i
corespunde obiectului din clasa activitate cu alte cuvinte pentru fiecare obiect xml
exista o clasa C# care ii corespunde lui. Mai jos o sa afișam corespondenta dintre
unele clase C# și unele obiecte xml:
LinearLayout <LinearLayout/>
RelativeLayout <RelativeLayout/>
View <View/>
ScrollView <ScrollView/>
Text-containere
TextView <TextView/>
EditText <EditText/>
ImageView <ImageView/>
Button <Button/>
ProgressBar <ProgressBar/>
A doua librărie are un rol mai specific aceasta implementează obiectele care
sunt valabile pentru arhitectura android în proiectul “cross” (proiectul comun pentru
toate celelalte proiecte destinate unui anumit SO), deci sa afișam codul care ne
permite crearea legăturii intre obiectele din cross și cele din proiectul nostru android:
[CrossView(nameof(NameOfViewModel.ObjectName))]
var
somedata=Request(RestConstants.GetBooksForCategory+"/"+model.category,
Method.GET,
return somedata;
ICategoryContent somevalue =
BooksManager.Instance._curentCategory;
var response =
RequestFactory.ExecuteRequest<MResponse<IList<Booklist>>>(RestCalls.Instance
.GetBooksFromCategory(somevalue));
Sa vedem ce format JSON primim noi atunci când se executa prima metoda,
cea care primește datele prin intermediul api-urilor:
Fisierul libvudroid.so este librărie care este adaptata pentru toate tipurile de
procesoare întâlnite pentru care SO Android se poate instala. De aceia în folderul lib
denumirile celorlalte foldere indica SO pentru ce tip de procesor este librăria data,
astfel ca android va alege librăria destinata tipului sau de procesor.
Librăria data are funcția de a converti fișierele pdf în imagini, de aceia faptul
ca aceasta interpretează fiecare pagina ca imagine, face posibila afișarea textului mai
clar, iar zoom-ul devine o funcție ușor de implementat din motiv ca odată ce lucram
cu imagini acestea au metode speciale care permit acest lucru. Saltul de la o pagina
la alta este posibil doar încărcând cartea din nou în containerul ce o afișează, de aceia
ca folosirea metodelor asincronice ce fac acest lucru, încarcă memoria, și asta face ca
aplicația sa-și oprească activitatea.
Un alt subiect ce tine de asigurarea vizualizării fișierelor pdf este, cum găsesc
toate fișierele cu extensia .pdf din device, pentru ca ANDROID nu are nici o metoda
care ar putea face asta, este necesar sa o cream noi. Mai jos este afișat exemplu cum
putem extrage adresele fișierelor cu o anumita extensie:
public List<LocalBook> GetAllBooksListFromDevidce(File
parentDir, string PathToParentDir)
if (fileName.ToLower().EndsWith(".pdf"))
inFiles.Add(new LocalBook
{ Id=BookCounter,
Name = fileName,
});
BookCounter++;
}else{
if (file.IsDirectory)
{ inFiles.Union(
GetAllBooksListFromDevidce(file, PathToParentDir + "/" +
fileName));
return inFiles;
}
Aceasta metoda creează o lista de fișiere, folderele făcând parte tot din aceasta
categorie, după fiecare listă se verifica dacă elementele ei se termine cu stringul
“.pdf” și dacă da atunci acest element este adăugat într-o noua lista în cazul nostru se
numește inFile. După cum va dați seama cu aceasta aplicație putem ușor sa extragem
orice tip de fișier care se afla în device, muzica, poze, fișiere txt, careva date
personale.
https://github.com/IonCojucovschi/Thesis
Codul sursa pentru site-ul ReadAbook.16mb.com îl găsiți pe următorul link:
https://github.com/IonCojucovschi/sitephp
Bibliografie
1. C# in a Nutshell. Joseph Albahary, Ben Albahary;
2. C# in Depth. John Skeet;
3. Creating Mobile Apps with Xamarin.Forms. Charles Petzold;
4. Enterprize Application Patterns using Xamarin.Forms. David Britch;
5. Head first Design Patterns. Eric Freeman, Elizabeth Freeman;
6. https://docs.microsoft.com/en-us/xamarin/#pivot=platforms&panel=Android ;
7. https://docs.microsoft.com/en-us/xamarin/android/app-fundamentals/index ;
8. https://docs.microsoft.com/en-us/xamarin/cross-
platform/troubleshooting/component-nuget?tabs=vswin ;
Cuvinte-cheie
Cross-platforma, aplicație, pattern, moștenire, design, implementare, Run-
Time, Mono Android, activitate, servicii, api, JSON, librărie, customizare,
mentenanță, sistem de operare, permisiuni, … .