54
Programování pro Android - úvod Tomáš Kypta @TomasKypta

Programování pro Android - úvod, FI MUNI, 2013

Embed Size (px)

DESCRIPTION

Introductory lecture to Android development. Faculty of Informatics, Masaryk University, 2013.

Citation preview

Page 1: Programování pro Android - úvod, FI MUNI, 2013

Programování pro Android- úvod

Tomáš Kypta@TomasKypta

Page 2: Programování pro Android - úvod, FI MUNI, 2013

Obsah1. OS Android

2. Android ekosystém

3. Specifika platformy

4. Android SDK a vývojové nástroje

5. Základní stavební kameny aplikací, manifest

6. Hello World

7. Aktivity, intenty, UI

8. Menu, toast, dialog, notifikace

Page 3: Programování pro Android - úvod, FI MUNI, 2013

OS Android

založen na Linuxu

open-source - http://source.android.com/

telefony, tablety, Google TV

stovky různých zařízení

Page 4: Programování pro Android - úvod, FI MUNI, 2013

Historie

2003 založeno Android inc.

2005 koupeni Googlem

2008 první Android telefon - T-Mobile G1

nyní přes 700 mil. aktivovaných zařízení

Page 5: Programování pro Android - úvod, FI MUNI, 2013

Verze Androidu

září 2008 Android 1.0

prosinec 2010 Android 2.3 Gingerbread

únor 2011 Android 3.0 Honeycomb

říjen 2011 Android 4.0 Ice Cream Sandwich

červen 2012 Android 4.1 JellyBean

aktuálně poslední verze Android 4.2.2

Page 6: Programování pro Android - úvod, FI MUNI, 2013

Aktuální podíl verzí Androidu

Page 7: Programování pro Android - úvod, FI MUNI, 2013

Android ekosystém

světově nejpopulárnější platforma

Google Play - http://play.google.com

> 800 000 aplikací

Page 8: Programování pro Android - úvod, FI MUNI, 2013

Google Play

25 mld nainstalovaných aplikací (září 2012)

~ 70% aplikací zdarma

obsahuje také hudbu a knihy (v ČR a SR zatím nedostupné)

Page 9: Programování pro Android - úvod, FI MUNI, 2013

Publikace v Google Play

registrační poplatek $25

vracení aplikací do 15 minut

monetizace - placené aplikace, in-app billing, reklamy

Page 10: Programování pro Android - úvod, FI MUNI, 2013

Problémy Androidu

fragmentace

“vylepšení” výrobců a operátorů

podpora a aktualizace

otevřenost Google Play

malware - uživatelé

Page 11: Programování pro Android - úvod, FI MUNI, 2013

Systémová oprávnění

uživatelé akceptují při instalaci

aplikace lze nainstalovat i přímo z balíčku (.apk)

Page 12: Programování pro Android - úvod, FI MUNI, 2013

Vývojprogramuje se v jazyce “Java”

lze vytvářet také nativní aplikace

vývojové nástroje pro všechny platformy

Windows, Mac OS X, Linux

podpora vývojových prostředí

oficiální ADT plugin pro Eclipse

IntelliJ IDEA (Community Edition)

plugin pro Netbeans

vývoj na zařízeních není omezen

Page 13: Programování pro Android - úvod, FI MUNI, 2013

Android SDKandroid - Android SDK and AVD Manager

adb - Android Debug Bridge

ddms - Dalvik Debug Monitor

emulator

aapt, jarsigner, zipalign

logcat, lint, hierarchyviewer, traceview, systrace

ProGuard

Page 14: Programování pro Android - úvod, FI MUNI, 2013

Android SDKdokumentace

ukázkové aplikace

knihovny

compatibility libraries - support-v4

AdMob

Google Analytics

billing, licensing

Page 15: Programování pro Android - úvod, FI MUNI, 2013

Další knihovny

ActionBarSherlock - http://actionbarsherlock.com/

NineOldAndroids - http://nineoldandroids.com/

SlidingMenu - https://github.com/jfeinstein10/SlidingMenu

Flurry Analytics, Crittercism

Page 16: Programování pro Android - úvod, FI MUNI, 2013

Základy vývojeaplikace jsou složeny komponent

aktivity

služby

content providery

broadcast receivery

AndroidManifest.xml definuje komponenty aplikace

resourcy

Page 17: Programování pro Android - úvod, FI MUNI, 2013

Activityobrazovka aplikace obsahujicí UI prvky

jediná vizuální komponenta

příklady

seznam emailů

detail emailu

psaní emailu

nastavení aplikace

Page 18: Programování pro Android - úvod, FI MUNI, 2013

Servicenemá UI

dlouhotrvající tasky

lze startovat jednorázově nebo se připojovat k dlouhoběžící službě

příklady

služba pro přehrávání hudby

služba pro stahování dat

Page 19: Programování pro Android - úvod, FI MUNI, 2013

Content Provider

poskuje přístup k datům

uložiště dat může být jakékoliv - databáze, web, soubory na disku

skrz content provider lze data získávat i měnit

příklady

všechny systémové databáze - kontakty, SMS

Page 20: Programování pro Android - úvod, FI MUNI, 2013

Broadcast Receiverreaguje na broadcast

broadcasty jsou posílání napříč systémem

lze registrovat staticky i dynamicky (nemusí být v manifestu)

systémové i vlastní broadcasty

broadcasty lze i vysílat

příklady

příchozí SMS, volání

odpojení SD karty

vypnutí obrazovky

Page 21: Programování pro Android - úvod, FI MUNI, 2013

AndroidManifest.xml

komponenty aplikace

definuje přístupové body aplikace

rozsah kompatibilních verzí systému

oprávnění - vyžadovaná i definovaná

vyžadované hardware a software vlastnosti

vyžadovanou konfiguraci

Page 22: Programování pro Android - úvod, FI MUNI, 2013

Intent

asynchronní zpráva

propojuje komponenty (vyjma Content Providerů)

startuje aktivity

startuje servicy a vyváří spojení

zasílání broadcastů

Page 23: Programování pro Android - úvod, FI MUNI, 2013

Hello Worldukoly si stáhněte z http://goo.gl/icA8x

Page 24: Programování pro Android - úvod, FI MUNI, 2013

Sestavení

Page 25: Programování pro Android - úvod, FI MUNI, 2013

Build

Page 26: Programování pro Android - úvod, FI MUNI, 2013

Build

Page 27: Programování pro Android - úvod, FI MUNI, 2013

Aktivity podrobněji

podtřída android.app.Activity

aplikace mají typicky spoustu aktivit

aktivity jsou interně drženy v zásobníku aktivit

lze se vracet k předchozím obrazovkám

Page 28: Programování pro Android - úvod, FI MUNI, 2013

Životní cyklus aktivitaktivity se vyskytují v různých stavech během svého života

na popředí

viditelné

zastavené

zabité

systém volá callbacky při přechodu mezi aktivitami

Page 29: Programování pro Android - úvod, FI MUNI, 2013

Životní cyklus aktivit

Page 30: Programování pro Android - úvod, FI MUNI, 2013

Intenty a aktivityvytváření aktivit explicitně

vytváření aktivit implicitně

vytváření aktivit pro výsledek

Intent intent = new Intent(MainActivity.this, OtherActivity.class);startActivity(intent);

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(video.getUrl()));startActivity(intent);

Intent intent = new Intent(MainActivity.this, OtherActivity.class);startActivityForResult(intent, REQUEST_USER);

Page 31: Programování pro Android - úvod, FI MUNI, 2013

Změny konfigurace

při změně konfigurace jsou aktivity zabity a znovu vytvořeny

změny konfigurace - rotace, otevření hw klávesnice

nutné správně ošetřit

uložit stav v onSaveInstanceState()

načíst stav v onCreate() nebo onRestoreInstanceState()

Page 32: Programování pro Android - úvod, FI MUNI, 2013

Uživatelské rozhranídefinováno hierarchií views

jednoduchá views (widgety)

Button, TextView, EditText, ProgressBar, ...

WebView, MapView

layouty - kontejnery

LinearLayout, RelativeLayout, FrameLayout

seznamy - využívají adaptery

ListView, GridView, Spinner, Gallery

Page 33: Programování pro Android - úvod, FI MUNI, 2013

UI - seznamy

zobrazují seznam prvků

prvků může být obrovské množství

recyklace views

využívají adaptery - most mezi daty a views

Page 34: Programování pro Android - úvod, FI MUNI, 2013

Aplikační resourcyobrázky (drawables)

layouty

lokalizační řetězce

barvy

menu

rozměry

animace

binární (raw)

pole, identifikátory, ...

Page 35: Programování pro Android - úvod, FI MUNI, 2013

Optimalizace vzhledu

nutné řešit různá rozlišení

ldpi - 0.75x

mdpi - 1.0x

hdpi - 1.5x

xhdpi - 2.0x

MyProject/ res/ drawable-xhdpi/ awesomeimage.png drawable-hdpi/ awesomeimage.png drawable-mdpi/ awesomeimage.png drawable-ldpi/ awesomeimage.png

Page 36: Programování pro Android - úvod, FI MUNI, 2013

Optimalizace vzhledurůzné velikosti displeje

small

normal

large

xlarge

- ošetřit scrollování obrazovkyScrollView

ListView, GridView

Page 37: Programování pro Android - úvod, FI MUNI, 2013

Optimalizace vzhleduaktuální stav

Page 38: Programování pro Android - úvod, FI MUNI, 2013

Resourcy - jednotky

dp - density-independent pixel

sp - scale-independent pixel

nepoužívat px

Page 39: Programování pro Android - úvod, FI MUNI, 2013

Resourcy

v kódu přístupné skrz R.java před své identifikátory

správná verze resourcu je zvolena za běhu podle aktuální konfigurace

Page 40: Programování pro Android - úvod, FI MUNI, 2013

Resource kvalifikátorykoncovky složek resourců, které určují k jaké konfiguraci se obsah vstahuje

en, cs, fr, en-rUS

small, normal, large, xlarge

port, land

ldpi, mdpi, hdpi, xhdpi, nodpi, tvdpi

v4, v11

sw<N>dp - sw600dp

w<N>dp - w720dp

h<N>dp - h480dp

lze kombinovat

Page 41: Programování pro Android - úvod, FI MUNI, 2013

Fragmentace verzí OS

aplikaci překládám vůči build targetu

project.properties - target=android-17

aplikaci lze pustit na zařízeních v rozmezí definovaném v manifestu

AndroidManifest.xml <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />

Page 42: Programování pro Android - úvod, FI MUNI, 2013

Fragmentace verzí OSif (Build.VERSION.SDK_INT > Build.VERSION_CODES.GINGERBREAD) { // pouze na novějším OS než Android 2.3}

private static boolean fragmentsSupported = false;

private static void checkFragmentsSupported() throws NoClassDefFoundError {    fragmentsSupported = android.app.Fragment.class != null;}

static {    try {       checkFragmentsSupported();    } catch (NoClassDefFoundError e) {       fragmentsSupported = false;    }}

Page 43: Programování pro Android - úvod, FI MUNI, 2013

Fragmentykousky aplikačního UI

s příchodem tabletů je nutné řešit rozdílné dělení do obrazovek

Page 44: Programování pro Android - úvod, FI MUNI, 2013

Fragmentyfragment != aktivita

je to část aktivity

od Androidu 3.0

support knihovna v4 backportuje do Androidu 1.6+

díky fragmentům lze vytvořit jednu aplikaci pro telefony i tablety

lze měnit za běhu, ukládat na backstack

lze vytvářet fragmenty bez UI - worker fragment

Page 45: Programování pro Android - úvod, FI MUNI, 2013

Vláknahlavní vlákno = UI vlákno

neblokujte hlavní vlákno

pro časově náročné oprace nutné vytvářet background vlákna

k UI nutné vždy přistupovat pouze v hlavním vlákně

networking a IO operace je třeba dělat v background vlákně

detaily v příští přednášce

Page 46: Programování pro Android - úvod, FI MUNI, 2013

ActionBarUI a navigační prvek moderních aplikací

od Androidu 3.0

knihovna ActionBarSherlock backportuje do Androidu 2.x

Page 47: Programování pro Android - úvod, FI MUNI, 2013

Menupro < Android 3.0 schováno pod menu tlačítkem

Android 3.0+ v ActionBaru

položky mohou být zobrazeny v ActionBaru

při nedostatku místa se zobrazují v overflow menu v ActionBaru nebo pod hw menu tlačítkem (pokud ho zařízení má)

menu resource

Page 48: Programování pro Android - úvod, FI MUNI, 2013

Logovánítřída android.util.Log

zobrazeny v ddms nebo IDE

Page 49: Programování pro Android - úvod, FI MUNI, 2013

Toastnemodální informace pro uživatele

Toast.makeText(MainActivity.this, R.string.my_toast_text, Toast.LENGTH_SHORT).show();

Page 50: Programování pro Android - úvod, FI MUNI, 2013

Dialogy

plovoucí okno aplikace

standardní dialogy

ProgressDialog

AlertDialog

vlastní dialogy

nyní používat s pomocí DialogFragmentu

Page 51: Programování pro Android - úvod, FI MUNI, 2013

Notifikacezpráva pro uživatele zobrazená ve status baru

uživatel může otevřít notification drawer pro detail

lze definovat UI a click akci

NotificationCompat.Builder

Page 52: Programování pro Android - úvod, FI MUNI, 2013

Preferences

SharedPreferences.Editor editor = prefs.edit();editor.putInt(SOME_KEY, storedValue);editor.commit();

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);

int storedValue = prefs.getInt(SOME_KEY, defaultValue);

SharedPreferences prefs = config.getSharedPreferences(PREFS_FILE_NAME, Activity.MODE_PRIVATE);

Page 54: Programování pro Android - úvod, FI MUNI, 2013

... to be continued