You are on page 1of 42

12.3.2020.

Subtitle

Uvod u Android
12.3.2020.

Sadržaj predavanja
Subtitle

• Nepoznanice o Androidu
• Razvoj i karakteristike OS-a
• Arhitektura Android sustava
• Virtualni strojevi ART i Dalvik
• Razvoj aplikacija
• Potrebni alati
12.3.2020.

Što je Android?
Subtitle
• Android – programsko okruženje za pokretne uređaje
bazirano na otvorenom kodu
• Početak razvoja:
• studeni 2007. godine
• Google i OHA (engl. Open Handset Alliance)

• Karakteristike sustava:
• otvorena platforma
• automatsko upravljanje životnim ciklusom aplikacije
• brz i jednostavan razvoj aplikacija
• kompatibilnost s većinom sadašnjeg i budućeg hardvera
• široki spektar primjene:
• mobilni uređaji, televizori, pametni satovi, automobili…
12.3.2020.

Zašto je Android popularan?


Subtitle
12.3.2020.

Zašto je Android popularan?


Subtitle

Više na: https://en.wikipedia.org/wiki/Android_version_history


12.3.2020.

Zastupljenost verzija
Subtitle
Version Codename API Distribution
2.3.3 - 2.3.7 Gingerbread 10 0,3%
4.0.3 - 4.0.4 Ice Cream Sandwich 15 0,3%
4.1.x 16 1,2%
4.2.x Jelly Bean 17 1,5%
4.3 18 0,5%
4.4 KitKat 19 6,9%
5.0 21 3,0%
Lolipop
5.1 22 11,5%
6.0 Marshmallow 23 16,9%
7.0 24 11,4%
Nougat
7.1 25 7,8%
8.0 26 12,9%
Oreo
8.1 27 15,4%
9 Pie 28 10,4%
Na dan 09.03.2020.
12.3.2020.

U drugom mjesecu 2012:


Subtitle
12.3.2020.

U drugom mjesecu 2013:


Subtitle
12.3.2020.

U drugom mjesecu 2014:


Subtitle
12.3.2020.

U drugom mjesecu 2015:


Subtitle
12.3.2020.

U drugom mjesecu 2016:


Subtitle
12.3.2020.

U drugom mjesecu 2017:


Subtitle

Više na: https://developer.android.com/about/dashboards/index.html


12.3.2020.

U drugom mjesecu 2018:


Subtitle

Više na: https://developer.android.com/about/dashboards/index.html


12.3.2020.

U drugom mjesecu 2019:


Subtitle

Više na: https://developer.android.com/about/dashboards/index.html


12.3.2020.

Trenutno:
Subtitle

Više na: https://developer.android.com/about/dashboards/index.html


12.3.2020.

Cijela povijest:
Subtitle

Više na: http://en.wikipedia.org/wiki/Android_version_history


12.3.2020.

Third party statistika i dalje postoji!


Subtitle

Više na: https://www.androidpolice.com/2019/12/18/pornhub-does-what-google-wont-


releases-android-version-stats-for-2019/
12.3.2020.

Arhitektura Androida
Subtitle
Korisničke aplikacije
pisane u programskom
jeziku Java
Sloj aplikacijskog okvira
pisan u programskom
jeziku Java
Android okruženje –
Dalvik Virtual
Machine/ART
Izvorne programske
biblioteke pisane u
jezicima C i C++
Linux jezgra 4.9
12.3.2020.

Virtualne mašine
Subtitle
Najčešće
• Java – JVM – Java virtual machine (Stack bazirana)
• .NET – CLR – Common language runtime (Stack bazirana)
• Android – Dalvik i ART (Registarski bazirane)
Implementiraju
• Kompajliranje izvornog koda u neki od „bytecodova”
• Strukture podataka koje sadrže instrukcije i operande
• Call stack za pozive funkcija
• „Instruction pointer” koji pokazuje na sljedeću instrukciju koja se mora izvršiti
• Virtualni CPU
• Dohvaća sljedeću instrukciju
• Dekodira operande
• Izvršava instrukciju
12.3.2020.

Battle of virtual machines


Subtitle

• Registar je najbrža memorija u procesoru


• Mašina ima manje upita prema sporijem RAM-u
• Stack je memorija izvan procesora (sporija je) do
koje se dolazi pop i push metodama
• Stack virtualnu mašinu je puno jednostavnije
napisati i manje je podložna pogreškama
12.3.2020.

Battle of virtual machines


Subtitle
Stack bazirane
• Memorijska struktura u kojoj se nalaze operandi je stack
• Operacije se izvode na način da se podaci pop naredbom vade iz memorije,
procesuiraju i nakon toga push naredbom stavljaju nazad u LIFO
• Zbog push i pop naredbi, 4 linije instrukcija je potrebno napraviti kako bi se izvršila
operacija zbrajanja
POP 20
POP 7
ADD 20, 7, result
PUSH result

• Prednosti Stack bazirane virtualne mašine:


• Operandi su adresirani implicitno od strane stack pointera
• Virtualna mašina ne mora eksplicitno znati adresu operanda
• Sve aritmetičke i logičke operacije se obavljaju „pushanjem” i „popanjem” operanada i
rezultata na stack
12.3.2020.

Battle of virtual machines


Subtitle
Registarski bazirane
• Memorijska struktura u kojoj se nalaze operandi su registri na procesoru
• Nema push-a i pop-a, već instrukcije sadrže adrese registara operanada
• Zbog navedenog, zbrajanje se izvršava pomoću jedne naredbe
ADD R1, R2, R3

• Za razliku od stack VM-a, potrebno je eksplicitno odrediti adrese operanda (u ovom primjeru
R1, R2 i R3)
• Prednosti Registarski bazirane virtualne mašine:
• Nema nepotrebnog „pushanja” i „popanja”
• Mogućnosti dodatne optimizacije (npr. često korištene podizraze je moguće pohraniti u registar
nakon prvog izračuna i ponovo koristiti)
• Mane se svode na veličinu instrukcije (potrebno je navesti eksplicitno operande)
12.3.2020.

Dalvik VM
Subtitle
Dalvik == grad na Islandu

Dalvik == Dalvik Virtual Machine


12.3.2020.

Dalvik i ART VM
Subtitle

• Dalvik i ART su virtualne mašine


• Vrte većinu aplikacija na Androidu (Osim ako nije
native)
• Mogućih ih je usporediti s JVM-om (Java
virtualna mašina)
• Dalvik i ART su optimiziraniji od JVM-a
12.3.2020.

Dalvik i ART VM
Subtitle

Dalvik i ART su napravljeni da rade


• Na polaganom procesoru
• S malo RAM memorije
• Na OS-u bez swap memorije
• A sve to napaja baterija
12.3.2020.

Još o Dalvik-u i ART-u


Subtitle
Registarski bazirani
• (JVM je stack baziran)

Izvršavaju .dex datoteke (dalvik executable), a ne .class kao


JVM
• Bolja prilagodba za low power procesore

Podržava višestruko instanciranje za razliku od JVM-a


• To znači da se svaki program vrti u zasebnom procesu
• Moguće je „ubiti” jedan proces bez utjecaja na ostale
• (za razliku od JVM-a)
12.3.2020.

Under the hood


Subtitle
Ako želimo saznati kako se Dalvik i ART instanciraju, moramo krenuti od početka…
Na boot-anje Androida:
1. Boot loader učita kernel u memoriju
2. Kernel pokreće init program koji je „roditelj”
svim ostalim procesima
3. Zygote proces kreira instancu Dalvika ili ART-a
koja će biti „roditelj” svim ostalim instancama
Dalvika ili ART-a
4. Zygote također namješta BSD read socket i
sluša dolazeće zahtjeve
5. Kada dođe novi zahtjev za Dalvik ili ART VM
instancom, Zygote raščlani roditeljski proces i
šalje ga aplikaciji djetetu na raspolaganje

Više o BSD socketima: http://en.wikipedia.org/wiki/Berkeley_sockets


12.3.2020.

Under the hood


Subtitle
Zato što Dalvik i ART koriste Dalvik
bytecode, za isti je kreiran poseban
kompajler koji pretvara Java byte code u
Dalvik byte code
Taj proces obavlja DEX compiler koji
.class datoteke pretvara u .dex datoteke
koje su optimizirane za Dalvik ili ART VM
12.3.2020.

ART vs Dalvik
Subtitle
ART posjeduje ahead-of-time kompajliranje, dok Dalvik
koristi just-in-time kompajliranje
To zapravo znači da ART kompajlira aplikaciju prilikom
instalacije, dok je Dalvik kompajlira prilikom izvođenja
• Dulje trajanje baterije zbog manje kompajliranja
• Bolje performanse tijekom izvođenja aplikacije
• Sporija instalacija
Oba VM-a koriste dex datoteke
Odex datoteke (optimizacijske datoteke Dalvika) zamijenjene
su ELF datotekama (Executable and Linkable Format)
• ART pokreće samo ELF datoteke nakon kompajliranja
12.3.2020.

ART vs Dalvik
Subtitle
12.3.2020.

Razvoj aplikacija
Subtitle
Android studio
• Baziran na IntelliJ Idea razvojnom okruženju

Upute i download:
https://developer.android.com/studio/index.html
12.3.2020.

Android emulator
Subtitle
AVD – Android Virtual Device
• služi emulaciji stvarnog uređaja
• najslabija karika Android SDK
• brzina mu nije najbolja strana
• Ne posjeduje zamjenu za neke
komponente stvarnih uređaja

Alternativa (nije savršena):


• GENYMOTION
• http://www.genymotion.com/
12.3.2020.

Upoznavanje
Subtitle

Izrada AVD-a

Pokretanje AVD-a

Izrada aplikacije
12.3.2020.

Gradle
Subtitle
• Pojavio se u svijet Androida s Android studiom
• Build sustav
• Open source
• Groovy jezik je baza (Maven i Ant imaju xml konfiguraciju)
• Teško je reći da je neki build sustav bolji od drugoga
12.3.2020.

Gradle
Kako radi na Androidu?
Subtitle
• Postoje tri datoteke:
12.3.2020.

Gradle
Subtitle
• settings.gradle datoteka
• pokazuje koji poddirektoriji će biti sadržani u build-u

• Primjer datoteke:
include ':app'

• include indicira da je ‘app’ poddirektorij jedini podprojekt


• Kada bi dodali dodatni projekt (npr. biblioteku), on bi također morao
stajati unutar ‘include’ klauzule
12.3.2020.

Gradle
Subtitle
• build.gradle datoteka (na razini cijelog projekta, „top level”)
• Dodavanje Gradle distribucije

• Primjer datoteke:
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.1'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
12.3.2020.

Gradle
build.gradle
Subtitle datoteka
• Gradle ne uključuje Android funkcionalnost po standardnim
postavkama (ili kako bi rekli defaultu)
• Google pruža plugin za Gradle za jednostavnu konfiguraciju
• U datoteci je opisano da se plugin skida s jcenter i google repozitorija
• Ostali repozitoriji su isto uključeni (npr. mavenCentral)

• Sekcija allprojects indicira da svi projekti koriste google i jCentar kao


repozitorij
• Gradle omogućava i posebne taskove
• clean je dodan i u kombinaciji s delete omogućava brisanje build direktorija
12.3.2020.

Gradle
Subtitle
• build.gradle datoteka (na razini projekta – app direktorij)
• Konfiguracija projekta

• Primjer datoteke:
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
buildToolsVersion "28.0.1"

defaultConfig {
applicationId "hr.android.osmi"
minSdkVersion 19
targetSdkVersion 28
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.facebook.fresco:fresco:0.9.0'
}
12.3.2020.

Gradle
build.gradle
Subtitle datoteka
• Apply dodaje Android plugin na build system
• BuildTypes podešava tipove builda projekta
• Dependencies govori o čemu ovisi projekt
• Prva linija govori da sve biblioteke moraju biti jar datoteke
• testCompile značu da će junit testno okruženje biti podešeno
• Compile znači dohvat biblioteke s repozitorija
12.3.2020.

Gradle
Subtitle

Pregled Gradle datoteka


12.3.2020.

finish();
Subtitle

● pitanja?

MAPP VVG

You might also like