Programování pro Android - úvod, FI MUNI, 2013
-
Upload
tomas-kypta -
Category
Documents
-
view
1.114 -
download
1
description
Transcript of Programování pro Android - úvod, FI MUNI, 2013
![Page 1: Programování pro Android - úvod, FI MUNI, 2013](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/1.jpg)
Programování pro Android- úvod
Tomáš Kypta@TomasKypta
![Page 2: Programování pro Android - úvod, FI MUNI, 2013](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/2.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/3.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/4.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/5.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/6.jpg)
Aktuální podíl verzí Androidu
![Page 7: Programování pro Android - úvod, FI MUNI, 2013](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/7.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/8.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/9.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/10.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/11.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/12.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/13.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/14.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/15.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/16.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/17.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/18.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/19.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/20.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/21.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/22.jpg)
Intent
asynchronní zpráva
propojuje komponenty (vyjma Content Providerů)
startuje aktivity
startuje servicy a vyváří spojení
zasílání broadcastů
![Page 24: Programování pro Android - úvod, FI MUNI, 2013](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/24.jpg)
Sestavení
![Page 25: Programování pro Android - úvod, FI MUNI, 2013](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/25.jpg)
Build
![Page 26: Programování pro Android - úvod, FI MUNI, 2013](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/26.jpg)
Build
![Page 27: Programování pro Android - úvod, FI MUNI, 2013](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/27.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/28.jpg)
Ž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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/29.jpg)
Životní cyklus aktivit
![Page 30: Programování pro Android - úvod, FI MUNI, 2013](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/30.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/31.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/32.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/33.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/34.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/35.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/36.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/37.jpg)
Optimalizace vzhleduaktuální stav
![Page 38: Programování pro Android - úvod, FI MUNI, 2013](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/38.jpg)
Resourcy - jednotky
dp - density-independent pixel
sp - scale-independent pixel
nepoužívat px
![Page 39: Programování pro Android - úvod, FI MUNI, 2013](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/39.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/40.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/41.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/42.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/43.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/44.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/45.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/46.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/47.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/48.jpg)
Logovánítřída android.util.Log
zobrazeny v ddms nebo IDE
![Page 49: Programování pro Android - úvod, FI MUNI, 2013](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/49.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/50.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/51.jpg)
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](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/52.jpg)
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 53: Programování pro Android - úvod, FI MUNI, 2013](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/53.jpg)
Odkazyhttp://developer.android.com
http://android-developers.blogspot.com
http://source.android.com
http://stackoverflow.com/questions/tagged/android
http://www.youtube.com/androiddevelopers
![Page 54: Programování pro Android - úvod, FI MUNI, 2013](https://reader038.fdocument.pub/reader038/viewer/2022103116/558787ccd8b42a3c318b45d7/html5/thumbnails/54.jpg)
... to be continued