1_uvod u Android

Embed Size (px)

Citation preview

  • 8/12/2019 1_uvod u Android

    1/56

    Android letnja kola- Uvod -

  • 8/12/2019 1_uvod u Android

    2/56

    2/56

    Cilj kursa

    Organizovan sa 4 asa dnevno x 5

    dana

    Upoznavanje kroz primere sa glavnimkonceptima aplikacija za Android

    Postavljanje dobre osnove za dalji

    samostalan razvoj

  • 8/12/2019 1_uvod u Android

    3/56

    3/56

    Agenda

    Dan 1

    Uvod u Android Operativni sistem

    Osnovni koncepti

    Grafike sprege

    Dan 2

    Sistemske sprege i baze podataka na Androidu Multimedija i internet

    Dan 3

    Razvoj aplikacija za Google TV

    Pisanje igri za Android

    Integracija sa ureajima u kuci

    Dan 4

    Android ispod haube

    Prevoenje koda sa AOSP

    Razvoj sistemske podrke na Androidu

    Dan 5

    OpenGL

    JIT kompajleri i Android

    Slanje izmena na AOSP

  • 8/12/2019 1_uvod u Android

    4/56

    4/56

    Android

    Platforma za mobilne telefone, prvenstveno

    Sada je platforma za embedded ureaje

    mobilni telefoni tablet raunari

    AndroidTV/GoogleTV

    STB

    TV

    Postoji i verzija za PC ureaje

    http://www.android-x86.org/

  • 8/12/2019 1_uvod u Android

    5/56

    5/56

    Android

    Google kupio i kontrolie

    Open platform operativni sistem je Open Source

    SDK je besplatan

    NDK je besplatan

    http://developer.android.com/index.html

    Sistem je baziran na Linux jezgru (Linux kernel) jezgro i drajveri su u kernel prostoru (kernel space)

    nativne biblioteke su u korisnikom prostoru (user space)

    aplikacije se izvravaju u Java VM (Dalvik)

    Java biblioteke za vezu aplikacija sa nativnim bibliotekama

  • 8/12/2019 1_uvod u Android

    6/56

    6/56

    Arhitektura

  • 8/12/2019 1_uvod u Android

    7/56

    7/56

    Linux kernel

    Koristi se standardni Linux kernel, sa dodatnim

    drajverima

    BinderIPC (Inter Process Communication)

    Ashmemdeljena memorija izmeu procesa

    Power Management

    Logger

    Alarm

    Low Memory Killer

    Kernel Debugger

  • 8/12/2019 1_uvod u Android

    8/56

  • 8/12/2019 1_uvod u Android

    9/56

    9/56

    Bionic Libc

    libc implementacija, optimizovana za

    embedded ureaje

    Licenca je presudna (GPL izvan user-space) Mala veliina

    nije sve implementirano!

    Brz kod optimizovan

  • 8/12/2019 1_uvod u Android

    10/56

    10/56

    Nativne biblioteke

    Webkit

    maina za prikaz HTML, CSS, JavaScript, AJAX

    baziran na webkit browser-u

    Media Framework

    biblioteka za rad sa slika,am zvukom i

    animacijama

    podrka za softverske i hardverske kodeke

    SQLite

    mala relaciona baza podataka

  • 8/12/2019 1_uvod u Android

    11/56

    11/56

    Nativni serveri

    SurfaceFlinger

    AudioFlinger

  • 8/12/2019 1_uvod u Android

    12/56

    12/56

    Hardware Abstraction

    Libraries

  • 8/12/2019 1_uvod u Android

    13/56

    13/56

    Hardware Abstraction

    Libraries

    Razdvaja Android od hardvera

    Definie interfejs koji drajveri moraju da

    implementiraju da bi radili u Androidu

  • 8/12/2019 1_uvod u Android

    14/56

    14/56

    Android Runtime

    Dalvik Virtual Machine

    optimizovana virtualna maina za embedded

    ureaje

    Core libraries

    standardne Java biblioteke, prilagoene Android

    platformi

  • 8/12/2019 1_uvod u Android

    15/56

  • 8/12/2019 1_uvod u Android

    16/56

    16/56

    Verzije Android OS

    Verzije:

    1.5Cupcake (API v3),

    1.6Donut (API v4),

    2.0-2.1Eclair(API v7),

    2.2Froyo(API v8),

    2.3.xGingerbread(API v9 - 10),

    3.x.xHoneycomb(API v11 - 13),

    4.xIce Cream Sandwitch(API v14 - 16)

  • 8/12/2019 1_uvod u Android

    17/56

    17/56

    Ureaji u telefonu

    Podrava veliki broj ureaja

    radio (telefon),

    kamera,

    kompas,

    GPS

    Bluetooth

    Wifi

    senzori pokreta

  • 8/12/2019 1_uvod u Android

    18/56

    18/56

    Poseban GUI

    Uglavnom kompatibilan sa obinim

    raunarima

    Pritisak prsta po ekranu ima dodatna

    znaenja

    dug pritisakkontekstni meni

    pomeranjeskrolovanje

    zaletanjeflinganimacija skrolovanja

    dva prsta se pomerajumulti touchzoom i sl.

  • 8/12/2019 1_uvod u Android

    19/56

    19/56

    Android aplikacije

    Pisane u programskom jeziku Java

    Sloenije procesiranje se delegira nativnom

    sloju preko JNI (Java Native Invocation)

    poziva

    Jedna aplikacija preko celog ekrana

    aplikacija moe da ima vie prozora (aktivnosti),

    ali je svaki preko celog ekrana

    aktivnost jedne aplikacije mogu da koriste druge

    aplikacije (na primer, kameru, kontakte i sl. moe

    da koristi svaka aplikacija)

  • 8/12/2019 1_uvod u Android

    20/56

    20/56

    Vrste aplikacija

    Activitygrafiki element kojinajee odgovara jednom ekranu

    Service

    usluni procesi koji rade upozadini

    ContentProviderelementi kojiomoguuju deljenje podataka u sistemu

    BroadcastReceiverelement kojiprihvata sistemske broadcast poruke(battery low, itd.)

  • 8/12/2019 1_uvod u Android

    21/56

    21/56

    ivotni ciklus aktivnosti

  • 8/12/2019 1_uvod u Android

    22/56

    22/56

    ivotni ciklus aktivnosti onCreate(): poziva se kada se aktivnost prvi put kreira. Ovde se inicijalizuje najvei

    deo varijabli. onStart() se uvek poziva posle ove metode.

    Sistem moe da ugasi aplikaciju odavde: Ne.

    Sledee: onStart().

    onStart(): Poziva se kada aktivnost postaje vidljiva korisniku. Posle nje se poziva

    onResume().

    Sistem moe da ugasi aplikaciju odavde : Ne.

    Sledee: onResume().

    onResume(): Poziva se kada je aktivnost na raspolaganju korisniku za interakciju.

    Sistem moe da ugasi aplikaciju odavde : Ne.

    Sledee: onPause().

    onRestart(): Poziva se kada god je aktivnost bila zaustavljena, pa se pokree

    (neposredno pre ponovnog pokretanja). onStart() se uvek sledea poziva.

    Sistem moe da ugasi aplikaciju odavde : Ne.

    Sledee: onStart().

  • 8/12/2019 1_uvod u Android

    23/56

    23/56

    ivotni ciklus aktivnosti

    onPause(): Poziva se kada se sistem sprema da stavi neku drugu aktivnost

    preko ove, ili je korisnik pritisnuo Home taster, ili se aktivirao screen saver.

    U ovom trenutku se obino snimaju podaci koji moraju biti sauvani. Ako se

    aplikacija vraa u svoju aktivnost (posle screen saver-a), poziva se

    onResume(); ako aktivnost vie nije vidljiva za korisnika, poziva se

    onStop().

    Sistem moe da ugasi aplikaciju odavde : Da.

    Sledee: onResume() ili onStop().

    onStop(): Poziva se kada aktivnost vie nije vidljiva za korisnika (neka

    druga aktivnost je preuzela ekran). Ako se aktivnost vie ne vraa (Back

    dugme u odnovnom ekranu aplikacije), poziva se onDestroy(); ako seaktivnost vraa (posle neke druge aktivnosti), poziva se onRestart().

    Sistem moe da ugasi aplikaciju odavde : Da.

    Sledee: onRestart() ili onDestroy().

  • 8/12/2019 1_uvod u Android

    24/56

    24/56

    ivotni ciklus aktivnosti

    onDestroy(): Poziva se pre nego to se aktivnost uniti. Poziva se

    ako je korisnik zatvorio aplikaciju, ili ako je sistem odluio da ubije

    aplikaciju (zbog resursa). Uzrok se moe saznati pozivom metode

    isFinishing(). Metoda isFinishing() se moe pozvati i unutar

    onPause() metode. Sistem moe da ugasi aplikaciju odavde : Da.

    Sledee: Nita.

  • 8/12/2019 1_uvod u Android

    25/56

    25/56

    Intents

    Poruke koji izazivaju startovanje aktivnosti

    Aplikacije mogu same da osmisle i alju svojeporuke (Intent)

    Postoje i sistemske poruke

    Intent inicira aktiviranje Aktivnosti(Activity)

  • 8/12/2019 1_uvod u Android

    26/56

    26/56

    Intents

    Sistem sam uparuje aktivnost (Activity) naosnovu zadate poruke (Intent)

    Elementi tipaActivitysami deklariu koje

    to poruke oni mogu da obrade (informacije za

    to se postavljaju u AndroidManifest.xml)

    Jedna Aktivnost moe da pozove drugu

    Aktivnost ta druga aktivnost moe da bude i ugraena

    (sistemska), kao to su kontakti, kamera i sl.

  • 8/12/2019 1_uvod u Android

    27/56

    27/56

    Intents (primer)

  • 8/12/2019 1_uvod u Android

    28/56

    28/56

    Servisi

    Rade u pozadini (putanje muzike, skidanje

    podataka sa interneta, i sl.)

    Postoji mogunost povezivanja aplikacije i

    servisa koji radi u pozadini preko udaljene

    sprege (IPCInterProcess Communication)

    definisane u datotekama AIDL (Android

    Interface Definition Language) IPC je baziran na Binder servisu i drajveru

  • 8/12/2019 1_uvod u Android

    29/56

    29/56

    ContentProviders

    Omoguuju deljenje podataka izmeu

    aplikacija (npr. adresar, galerija slika, itd.)

    Obezbeuju uniformnu spregu za pristup

    podacima, kao i za brisanje, odnosno

    auriranje podataka

  • 8/12/2019 1_uvod u Android

    30/56

  • 8/12/2019 1_uvod u Android

    31/56

    31/56

    uvanje podataka

    Postoji vie opcija:

    Podeavanja (Preferences)

    datoteka na disku

    SQLite

    ContentProvider

  • 8/12/2019 1_uvod u Android

    32/56

    32/56

    APK

    Androidova arhiva za jednu aplikaciju

    Verzija ZIP-a

    Sve to je potrebno za aplikaciju se tu nalazi AndroidManifest.xml opisuje aplikaciju

  • 8/12/2019 1_uvod u Android

    33/56

    33/56

    Android SDK

    Razvojno okruenje

    Alati za razvoj

    Emulator adb (Android Debug Bridge)

    logcatinterni log Androida

    android-sdk\samples\

  • 8/12/2019 1_uvod u Android

    34/56

    34/56

    Emulator

    Uz SDK stie i emulator

    Mogu se birati razliiti modeli (generiki, ili

    emulatori pravih hardverskih ureaja) i

    razliita okruenja (verzije OS-a, verzije API-

    ja)

  • 8/12/2019 1_uvod u Android

    35/56

    35/56

    adb

    Android Debug Bridge

    Klijent-server sistem, gde je klijent na host raunaru (gde

    se odvija razvoj), a server na Android raunaru

    Omoguuje: instalaciju programa u Android raunar,

    adb install apk_file

    prebacivanje fajlova na/sa Android raunar(a),

    adb push moj_fajl /sdcard/

    pregled sistemskog Log-a, adb logcat

    rad sa konzolom na Android raunaru (shell),

    adb shell

    itd.

  • 8/12/2019 1_uvod u Android

    36/56

    36/56

    Eclipse plugin

    Dodatak u Eclipse platformi za programiranje

    na Androidu

    kreira Android projekte

    omoguuje debagiranje

    vizualni editor za korisniki interfejs

    prikaz logalogcat

  • 8/12/2019 1_uvod u Android

    37/56

    37/56

    Ciklus razvoja

    Kreiranje Aktivnosti

    obino se redefinie onCreate() metoda

    Realizacija korisnikog interfejsa

    Prijava Aktivnosti u AndroidManifest.xml fajlu

    Instalacija na raunar

    Startovanje/debagiranje

    HelloAndroid

  • 8/12/2019 1_uvod u Android

    38/56

    38/56

    Struktura projekta

  • 8/12/2019 1_uvod u Android

    39/56

    39/56

    Struktura projekta

  • 8/12/2019 1_uvod u Android

    40/56

    40/56

    Kreiranje aktivnosti

    Aktivnost naseuje klasuActivity

    Redefiniu se metode vezane za ivotni

    ciklus: onCreate(), onStart(), itd.

  • 8/12/2019 1_uvod u Android

    41/56

    41/56

    Realizacija UI

    Dva naina:

    programski

    deklarativno (.xml datoteka)

    Preporueno je deklarativno definisanje

    layout folder, datoteka.xml

    Plugin u Eclipse-u run-time generie klasu R,

    koja sadri id-ove svih resursa

    ceo API je prilagoen radu sa id-ovima, a ne sa

    konkretnim resursima!

  • 8/12/2019 1_uvod u Android

    42/56

    42/56

    Realizacija UI

  • 8/12/2019 1_uvod u Android

    43/56

    43/56

    Realizacija UI

  • 8/12/2019 1_uvod u Android

    44/56

    44/56

    Klasa R

    /* AUTO-GENERATED FILE. DO NOT MODIFY.

    *

    * This class was automatically generated by the

    * aapt tool from the resource data it found. It

    * should not be modified by hand.

    */

    package com.rtrk;

    public final class R {

    public static final class attr {

    }

    public static final class drawable {

    public static final int icon=0x7f020000;

    }

    public static final class layout {

    public static final int main=0x7f030000;

    }

    ...

    }

  • 8/12/2019 1_uvod u Android

    45/56

    45/56

    Resursi

    Resursi mogu biti:

    animacijefolder anim

    liste boja kojee se koristiti folder color

    multimedija (slike, animacije, itd.)folder

    drawable

    ostali fajlovifolder raw

    android.resource://com.rtrk/raw/famous xml fajlovi koji opisuju prostorni raspored

    komponenti na ekranu Aktivnostifolder layout

  • 8/12/2019 1_uvod u Android

    46/56

    46/56

    Resursi

    Resursi mogu biti:

    opis menijafodler menu

    stringovifolder values, fajl strings.xml

    i18n

    localisation

    ne moraju svi stringovi da se smeste u jedan

    strings.xml fajl

    tablestrings.xml, connectionstrings.xml i sl.

  • 8/12/2019 1_uvod u Android

    47/56

    47/56

    Stringovi

  • 8/12/2019 1_uvod u Android

    48/56

    48/56

    Android manifest

    AndroidManifest.xml datoteka

    ime Java paketa

    minimalni nivo API-ja

    dozvole

    spisak aktivnosti i servisa u APK datoteci

  • 8/12/2019 1_uvod u Android

    49/56

    49/56

    Android manifest

  • 8/12/2019 1_uvod u Android

    50/56

    50/56

    Instalacija

    Aplikacija se pakuje u APK fajl

    zip fajl odreene strukture

    Svaka aplikacija je digitalno potpisana

    nije potrebno da se nabavlja komercijalni sertifikat

    Eclipse razvojno okruenje samo pakuje iinstalira aplikaciju

    moe se obaviti i runo

  • 8/12/2019 1_uvod u Android

    51/56

    51/56

    Instalacija

    Fiziki ureaj se spaja USB kabelom

    u ureaju se ukljui USB debagiranje

    Fiziki ureaj je na lokalnoj mrei

    potrebno je da ga prijavimo komandom:

    adb connect x.x.x.x:port

    Provera prisustva ureaja:

    adb devices

  • 8/12/2019 1_uvod u Android

    52/56

    52/56

    Instalacija

    Iz Eclipse-a

    Runo

    adb install Aplikacija.apk

    adb uninstall com.paket.GlavnaKlasa Sa trita (Android Market)

    APK datoteka se skida sa servera i instalira na ureaju

    sigurno

    komentari korisnika, broj skidanja i rangiranje

    Sa SD kartice

    mora se podesiti u sistemu da se dozvoli ovakva operacija

  • 8/12/2019 1_uvod u Android

    53/56

    53/56

    Instalacija

    Aplikacija se instalira na ureaju tako to se

    kopira u /system/app folder

    korisnici nemaju pravo izmene sadraja ovog

    foldera

    Aplikacija snima svoje privremene podatke u

    /data folder

    to je jedini folder u kojem korisnici imaju punpristup

    Korisnici imaju pun pristup jo jedino na SD

    kartici (ako postoji)

  • 8/12/2019 1_uvod u Android

    54/56

  • 8/12/2019 1_uvod u Android

    55/56

    55/56

    Custom firmware

    Poto je Android open source, mogue je

    izgraditi kompletan operativni sistem i staviti

    u ureaj

    http://www.cyanogenmod.com/

  • 8/12/2019 1_uvod u Android

    56/56

    Za razvoj

    Forumi za razvoj:

    http://stackoverflow.com

    http://www.xda-developers.com/