Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
Odsek za računarsku tehniku i računarske komunikacije
Projektovanje namenskihračunarskih struktura 1
Nativni sloj Androida
Arhitektura Androida
2020 2
App0 App1 App2 App3 App4
Application layer
Activity manager
Frameworks layerWindow manager
Content providers
View systemNotification
manager
Package manager
Resource manager
XMPP service
Surface manager
Runtime layer
OpenGL/ES
SGL
Media framework
Freetype
SSL
SQLite
Webkit
libc
Libraries Android runtime
CoreLibraries
Dalvik Virtual Machine (DVM)
Kernel layer
Display driver
USB driver
Mouse driver
Keyboard driver
Ethernet driver
WiFi driver
Flash memory driver
Audio drivers
Binder (IPC) driver
Power management
Hardware
Java
C, C
++, n
ativ
e co
de
Ass
emb
ler,
C
Graphics Audio Camera GPS ...
Hardware Abstraction Layer (HAL)
Izvršni sloj
Nativne biblioteke
Sistemski servisi i sistemske aplikacije
Virtuelna mašina
Podsistem za reprodukciju multimedijalnog sadržaja
2020 3
Menadžer graf. površinama
Radni sloj
OpenGL/ES
SGL
Multimedijalni podsistem
Freetype
SSL
SQLite
Webkit
libc
Biblioteke u izvršnom sloju Jezgro za izvršavanje Android aplikacija
Osnovne biblioteke
Dalvik Virtuelna Mašina (DVM)C
, C+
+, i
zvrš
ni k
od
Nativne biblioteke
Bionic Libc
Uslužne biblioteke (Webkit, Media Framework, SQLite)
Nativni serveri (Surface Manager – SurfaceFlinger, Audio Manager –AudioFlinger)
Hardware Abstraction Libraries (Graphics, Camera, Bluetooth, GPS, Radio, WiFi,...)
2020 4
Bionic Libc
Šta je Bionic?o Sistemska C biblioteka koja je deo svakog C programa
o Bionic je prilagođena libc implementacija, optimizovana za korišćenje u integrisanim sistemima
o Bionic je zamena za glibc, koji je GPL licenciran
Motivacijao Licenca je presudna (GPL izvan user-space)
o Mala veličina
… ali nije sve implementirano!
Mogući problemi sa kompatibilnošću
o Poboljšane performanse
Brži kod, racionalnija upotreba memorije
Manja veličina
Optimizovan za namenske sisteme
2020 5
Bionic Libc - Prednosti
BSD licenca koja ne zahteva otvaranje izvornog koda
Minimalna implementacija najbitnijih funkcija glibc
Brži prolaz kroz funkcijske pozive
Veoma brza, minimalna i prilagođena pthread implementacija
Ključna komponenta svih nativnih biblioteka
2020
Surface manager
OpenGL/ES ...
Media framework
Freetype SSL
SQLite Webkit libc
Libraries
Audio manager
6
Bionic Libc - Nedostaci
Ne podržava POSIX pravila
Sav izvorni kod se prevodi i vezuje za Bionic
Nije 100% usaglašena sa standardnom Gnu bibliotekom (glibc) – mada poseduje veliki broj sličnosti (prebacivanje programske podrške sa Linux distribucija je moguće bez većih problema)
2020 7
Nativne biblioteke - Webkit
Web prikazivač je ključna web komponenta u Android
Živi svoj život, koristi se u mnogim drugim platformama
Podrška CSS, Javascript, DOM, AJAX support
Zasnovan na open source WebKit pretraživaču: http://webkit.org
Veoma kompleksna komponenta (puno linija koda) sa puno zavisnosti (eksterne biblioteke)
2020
Surface manager
OpenGL/ES ...
Media framework
Freetype SSL
SQLite Webkit libc
Libraries
Audio manager
8
Nativne biblioteke – Media Framework
Mutimedijalni aspekt Androida je veoma značajan
Baziran na PacketVideo OpenCORE platformi
o Froyo Stagefright, MooPlayer, ExoPlayer
Podrška za standardne audio i video formate
Podrška za hardware/software plug-ins dekodere (open-max interface)
Podrška za DRM (Digital Rights Management)
2020
Surface manager
OpenGL/ES ...
Media framework
Freetype SSL
SQLite Webkit libc
Libraries
Audio manager
9
Nativne biblioteke - SQLite
U sistemu i aplikacijama postoji potreba za struktuiranim skladištenjem podataka
Odabran je SQLite zbog:
o Licence (Public Domain, javno dobro)
o Lagana transakciona baza podataka
o jednostavnosti uključivanja (2 datoteke: zaglavlje i izvorni fajl) i upotrebe
o Zgodna za namenske sisteme – nema ozbiljne memorijske zahteve
2020
Surface manager
OpenGL/ES ...
Media framework
Freetype SSL
SQLite Webkit libc
Libraries
Audio manager
10
Sistem datoteka
2020 11
Sistem datoteka nasleđena od Linux
o Organizacija
o Prava pristupa
o Specifičnosti (dev, tmp)
o Filozofija
Višekorisnička podrška
Sistemski servisi i sistemske aplikacije
Sistemski servisi
o Osnovne funkcionalnosti i usluge za više nivoe
o Sprega ka specifičnim podsistemima
o Ovi servisi sa jezgrom čine OO platformu sa grafičkim interfejsom
o Životni vek
Sistemske aplikacije
o Aktivne od momenta pokretanja sistema
o Jezgro ih pokreće ponovo ako se zaustave
Primeri: Service Manager, Android Runtime, Zygote, Dalvik ili ART
2020 12
Designpattern!
Gradivne komponente
Service Manager
o Upravlja servisima i obezbeđuje pristup servisima
o Demistifikacija - init.rc
Zygote
o Specijalan proces za pokretanje aplikacija
o Pokretanje Zygote
o service zygote /system/bin/app_process –Xzygote /system/bin –zygote –start-
system-server
o Pokretanje aplikacije
o app_process [java-options] cmd-dir start-class-name [options]
Android Runtime (libandroid_runtime.so)
Dalvik/ART
2020 13
Zygote
Optimizovani način pokretanja aplikacija
Koriste se neke mogućnosti Linux
o Fork
o Učitavanje dinamičkih biblioteka
Svaka aplikacija ima svoju VM u svom procesu
2020 14
Sistemski server
Centralna komponenta Androida
Startuje se iz Zygote-a
U udžbeniku postoji fragment koda
o Koji pokreće sistemske servise ActivityManager, PowerManager, itd.
o Napisan je u Javi
Neki servisi su razvijeni u Java, neki u C
2020 16
Zygote
com.android.server.SystemServer.main() {
…
loadLibrary(“libandroid_servers.so”);
…
}
Frameworks/base/cmds/
system_server/library/
system_init.cpp
Start -> Sensor Service
Sistemski nativni servisi
Surface Flinger + Bootanim - C
Sensor Service – C
Telephony Service
MediaServer
o Audio Flinger
o Media Player
o Camera Service
Package Manager (instalacija, optimizacija, Intenti)
o Manifest
2020 17
Izvorni uslužioci – Surface Flinger
Zadužen za crtanje po grafičkom prostoru (GUI)
Spaja više surface-a u jedan frame buffer uređaj
Može da kombinuje više 2D i/ili 3D surface-a iz više aplikacija
2020
Surface manager
OpenGL/ES ...
Media framework
Freetype SSL
SQLite Webkit libc
Libraries
Audio manager
Designpattern!
18
Izvorni uslužioci – Surface Flinger
Surface-i su atomske površine koje se iscrtavaju
Reference na njih se preko preko Binder IPC poziva prosleđuju SF
SF za kompoziciju koristi OpenGL ES i platformsku akceleraciju
Tokom kompozicije, uvažava i životni ciklus aplikacija, kao i redosled iscrtavanja (Z-order)
Poseduje podršku za double-buffering. To podrazumeva postojanje dve ravni za crtanje:
o U jednu se crta, druga se prikazuje
o Nakon završetka crtanja, uloge se menjaju
o Na taj način postiže se iscrtavanje bez neželjenih efekata, na primer svetlucanja, skokovitih promena, i poluiscrtanih objekata i sl.
Veoma važna komponenta za UX
2020 19
Izvorni uslužioci – Audio flinger
Rukovodi svim izlaznim audio uređajima
Obrađuje više audio tokova u različite PCM audio izlazne putanje
Veoma bitna komponenta za orkestraciju svih funkcija telefona (multimedija, poziv, BT)
2020
Surface manager
OpenGL/ES ...
Media framework
Freetype SSL
SQLite Webkit libc
Libraries
Audio manager
20
Komunikacija ServiceManager i Binder
Sistemski servisi su različiti procesi
Koriste RPC/IPC za komunikaciju
Preko reference na Bindera
Mehanizam je sakriven u ServiceManager i API!
2020 21
Power Manager pm =
(PowerManager)getSystemService(POWER_SERVICE);
PowerManager.WakeLock wakeLock =
pm.newWakeLock(PowerManager.FULL_WAKE_LOCK,
“myPreciousWakeLock“);
wakeLock.acquire(100);
Ostali sistemski servisi
Activity Manager
o Upravlja aktivnostima
o Pokretanje i zaustavljanje (OOM uključen u AM)
o Koristi PackageManager da bi pronašao traženu aktivnost
Pokretanje aplikacija nakon inicijalizacije sistema
o Manifest
Sistemske aplikacije
o Aplikacije koje mogu imati malo više privilegije
o android:persistent = „true“
o Sistem ih održava živim
2020 22
Rezime
Nativni sloj Androida uključuje veliki broj biblioteka i čini dominantni deo Androida
Tokom dizajna po pitanju svake biblioteke se odlučilo da li se razvija ili koristi postojeće rešenje (tkzv. make vs buy odluka). Neke biblioteke su razvijene namenski (npr. Bionic), a mnoge su preuzete.
Bitno pravilo je da se ne koriste LGPL i GPL licencirane biblioteke.
Nativni sloj krije puno interesantnih rešenja i koncepata koji se mogu iskoristiti u drugim projektima
Održavanje sinhronizma svih korišćenih biblioteka je veliki posao
Android je imao uticaja na mnoge biblioteke, tako da je održavanje postalo malo jednostavnije
2020 23