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

Preview:

DESCRIPTION

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

Citation preview

Programování pro Android- úvod

Tomáš Kypta@TomasKypta

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

OS Android

založen na Linuxu

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

telefony, tablety, Google TV

stovky různých zařízení

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í

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

Aktuální podíl verzí Androidu

Android ekosystém

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

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

> 800 000 aplikací

Google Play

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

~ 70% aplikací zdarma

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

Publikace v Google Play

registrační poplatek $25

vracení aplikací do 15 minut

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

Problémy Androidu

fragmentace

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

podpora a aktualizace

otevřenost Google Play

malware - uživatelé

Systémová oprávnění

uživatelé akceptují při instalaci

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

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

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

Android SDKdokumentace

ukázkové aplikace

knihovny

compatibility libraries - support-v4

AdMob

Google Analytics

billing, licensing

Další knihovny

ActionBarSherlock - http://actionbarsherlock.com/

NineOldAndroids - http://nineoldandroids.com/

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

Flurry Analytics, Crittercism

Základy vývojeaplikace jsou složeny komponent

aktivity

služby

content providery

broadcast receivery

AndroidManifest.xml definuje komponenty aplikace

resourcy

Activityobrazovka aplikace obsahujicí UI prvky

jediná vizuální komponenta

příklady

seznam emailů

detail emailu

psaní emailu

nastavení aplikace

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

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

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

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

Intent

asynchronní zpráva

propojuje komponenty (vyjma Content Providerů)

startuje aktivity

startuje servicy a vyváří spojení

zasílání broadcastů

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

Sestavení

Build

Build

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

Ž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

Životní cyklus aktivit

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);

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()

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

UI - seznamy

zobrazují seznam prvků

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

recyklace views

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

Aplikační resourcyobrázky (drawables)

layouty

lokalizační řetězce

barvy

menu

rozměry

animace

binární (raw)

pole, identifikátory, ...

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

Optimalizace vzhledurůzné velikosti displeje

small

normal

large

xlarge

- ošetřit scrollování obrazovkyScrollView

ListView, GridView

Optimalizace vzhleduaktuální stav

Resourcy - jednotky

dp - density-independent pixel

sp - scale-independent pixel

nepoužívat px

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

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

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" />

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;    }}

Fragmentykousky aplikačního UI

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

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

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

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

od Androidu 3.0

knihovna ActionBarSherlock backportuje do Androidu 2.x

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

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

zobrazeny v ddms nebo IDE

Toastnemodální informace pro uživatele

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

Dialogy

plovoucí okno aplikace

standardní dialogy

ProgressDialog

AlertDialog

vlastní dialogy

nyní používat s pomocí DialogFragmentu

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

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);

... to be continued

Recommended