Android Development
- the basics
Tomáš Kypta
Agenda
• Android platform and ecosystem	

• Android SDK and development tools	

• Hello World	

• building blocks of Android apps & the
manifest file	


• activities, widgets, intents
Agenda
• dialogs, toasts, notifications	

• fragments
Android platform
• Linux-based operating system	

• open-source (http://source.android.com/)	

• originally phone OS	

• tablet support (since Honeycomb, Android
3.0)	


• Google TV
History
• 2003, Android inc.	

• 2005, acquired by Google	

• Sep 2008, the first Android phone	

• T-Mobile G1	

• May 2010, Froyo (Android 2.2)	

• Feb 2011, Honeycomb (Android 3.0)
History
• Oct 2011, Ice Cream Sandwich (Android
4.0)	


• July 2012, Jelly Bean (Android 4.1)	

• July 2013, Jelly Bean (Android 4.3)	

• Oct 2013, KitKat (Android 4.4)
Platform Versions
Android ecosystem
• thousands of devices	

• the most popular mobile platform	

• 1.5 million new devices activated every day	

• September 3, 2013, 1 billion Android
devices have been activated	


• most devices made by Samsung
Google Play
• app can be acquired by app stores	

• Google Play, http://play.google.com	

• other stores	

• > 50 billion apps have been installed from
Google Play	


• July 2013, 1 million apps
Google Play
• purchasing	

• selling	

• Play Music, Play Books, ...
Google Play
• selling apps	

• 15 min return period	

• ads	

• AdMob, ...	

• in-app billing
Android “problems”
• fragmentation	

• manufacturer/carrier enhancements	

• updates & support	

• openness - low quality apps in Google Play	

• malware	

• users
Android security
• app can be installed directly	

• .apk file	

• user accepts app permissions when
installing or updating the app
Android security
• Verify Apps (Android 2.3+)	

• checks every app install	

• Google Play can remotely uninstall harmful
app
Development
• programming in “Java”	

• native apps possible (C++)	

• development tools platform friendly	

• Windows, Linux, Mac OS X
Development
• IDE support	

• Android Studio, IntelliJ IDEA, ADT plugin
for Eclispse, Netbeans	


• you can freely develop on any device
Android SDK
• android - Android SDK and AVD Manager	

• adb - Android Debug Bridge	

• monitor - (ddms & hierarchyviewer)	

• emulator	

• lint, Traceview, ProGuard	

• docs, samples
Libraries
• compatibility libraries	

• v4 - backports lots of newer functionality
to Android 1.6+	


• Google Play In-app Billing
Libraries
• Google Play Services	

• Google Maps	

• Games	

• Google+	

• Authorization
Libraries
• AdMob	

• Google Analytics, Flurry, Crittercism	

• Google Cloud Messaging
Hello World
Build
Android building blocks
• Activity	

• Service	

• Content provider	

• Broadcast receiver	

• AndroidManifest.xml
Activity
• screen with user interface	

• the only visual component	

• example - an email app	

• list of emails	

• details of an email	

• email composition
Service
• has no UI	

• long-running tasks	

• examples	

• music playback service	

• download service	

• sync service
Content Provider
• managers and shares application data	

• data storage doesn’t matter (db, web,
filesystem)	


• apps can query and modify data through
content provider	


• r/w permissions can be defined	

• examples - all system dbs (SMS, contacts, ...)
Broadcast Receiver
• responds to broadcasts	

• broadcasts are system wide	

• can be registered statically or dynamically	

• system or custom messages	

• examples - incoming SMS, incoming call,

screen turned off, low baterry, removed SD
card, BT device available, ...
AndroidManifest.xml
• defines what parts the app have	

• defines which endpoints are exposed	

• minimum/maximum API level	

• permissions	

• declare hardware and software features	

• require configuration
Intent
• asynchronous message	

• binds components together (all except
Content Provider)	


• starting activities	

• starting services and binding to services	

• sending broadcasts
Activity
• a subclass of android.app.Activity	

• app usually has many activities	

• activities managed in activity stack	

• newly started activity is placed on the top
of the stack
Activity Lifecycle
• activity can be in different states during its
lifecycle	


• foreground, visible, stopped, killed	


• when activity state changes a system
callback is called
Activity callbacks
• onCreate() - activity created	

• onStart() - activity visible for the user	

• onResume() - activity gains user focus	

• onPause() - system resuming another
activity	


• onStop() - activity becoming invisible to
the user
Activity callbacks
• onDestroy() - before activity is
destroyed	


• onRestart() - called if activity was

previously stopped, called prior to onStart()
Configuration changes
• when configuration changes, activities are
destroyed and recreated	


• default behaviour, can be changed	


• properly handle config changes	

•

onSaveInstanceState(Bundle)
Intent & Activity
• starting activity explicitly	

•

new Intent(context, MyActivity.class)!

•

new Intent(Intent.ACTION_VIEW, Uri.parse(“http://
developer.android.com”))!

• starting activity implicitly	

• starting activity for result
User Interface
• defined by a hierarchy of views	

• layouts = containers	

•

LinearLayout, RelativeLayout, FrameLayout, ...
User Interface
• widgets	

• UI objects	

• Button, TextView, EditText,
RadioButton, ...	


• WebView
User Interface
• list widgets	

• subclasses of AdapterView	

• display a list of items	

• use adapter to bind list do data	

•

ListView, GridView, Spinner, ...
Resources
• drawables	

• bitmaps	

• 9-patch png	

• state lists	

• layer lists	

• shape drawables
Resources
• layout	

• strings	

• colors	

• menus	

• dimensions	

• animations
Resources
• arrays	

• ids	

• raw	

• xml	

• ...
Screen sizes and
densities
Screen sizes and
densities
• How to handle different screen sizes and
densities?
Resources
• resources can be created in several
versions	


• the best version is selected according to
current device configuration in runtime	


• resource units	

• dp - density-independent pixel	

• sp - scale-independent pixel (for fonts)
Resource qualifiers
• suffixes for resource folders	

• drawables, drawable-mdpi, ...	

• values, values-cs	

• layout, layout-sw640dp	

• drawable-hdpi-v11
Resource qualifiers
• screen density - ldpi, mdpi, hdpi, xhdpi, ...	

• screen size - small, normal, large, xlarge	

• screen orientation - port, land	

• language - en, cs, sk, ...	

• version - v11, v14, ...
Resource qualifiers
• since Android 3.2	

• w<N>dp - available screen width, w600dp	

• h<N>dp - available screen heights, h720dp	

• sw<N>dp - smallest width (does not
change with orientation)
Resources
• accessed from code via generated R.java file
and resource ids	

• view.findViewById(R.id.txt_name)!
• txtName.setText(R.string.txt_name_label)
Android version
fragmentation
• How to handle different API levels available
on different devices?
Android version
fragmentation
• build target	

• API level the app is compiled against	

• AndroidManifest.xml	

•

<uses-sdk android:minSdkVersion="8"
android:targetSdkVersion="16" />
Android version
fragmentation
• handling versions in code	

if (Build.VERSION.SDK_INT <
Build.VERSION_CODES.GINGERBREAD) {!
// code for Android < 2.3!
}
Android version
fragmentation
private boolean functionalitySupported = false;!

!
static {!
try {!
checkFunctionalitySupported();!
} catch (NoClassDefFoundError e) {!
!

functionalitySupported = false;!

}!
}!

!
private static void checkFunctionalitySupported() throws !
!

!

!

!

!

!

NoClassDefFoundError {!

!
functionalitySupported = android.app.Fragment.class != null;!
}!
Fragments
• a piece of application UI	

• introduced to support more flexible UI	

• phones and tablets together in one app	

• fragment != activity	

• fragments are used within activities
Fragments
• since Android 3.0	

• support library v4 backports them to
Android 1.6+
Threads
• main thread = UI thread	

• do not ever block the UI thread!!!	

• use worker threads for time consuming
operations	


• UI toolkit not thread safe - never

manipulate UI from a worker thread
Menu
• menu resource	

• Android < 3.0 the whole menu hidden
under menu button	


• ActionBar since Android 3.0	

• items can be displayed in the action bar
Menu
• behaviour for items that don’t fit in the
action bar	


• hidden under menu button (if the device
has one)	


• system overflow icon in the action bar
Dialogs
• floating window screen
Dialogs
• standard dialogs	

• custom dialogs	

• activity with dialog style	

• since fragments used via DialogFragment
Dialogs
• might be tedious to create	

• difficult to style	

• StyledDialogs	

•

https://github.com/inmite/android-styled-dialogs	


• the library makes styling and using dialogs
a piece of cake
Toast
• simple non-modal information	

• displayed for a short period of time	

• doesn’t have user focus
Notifications
• a message that can be displayed to the user
outside your normal UI	


• displayed in notification area
Notifications
• user can open notification drawer to see
the details	


• app can define UI and click action	

•

NotificationCompat.Builder
Preferences
SharedPreferences prefs = PreferenceManager!
.getDefaultSharedPreferences(context);!

!
SharedPreferences prefs =

!

config.getSharedPreferences(PREFS_FILE_NAME,!
Activity.MODE_PRIVATE);!

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

!
SharedPreferences.Editor editor = prefs.edit();!
editor.putInt(SOME_KEY, storedValue);!
editor.commit();
Sources
• developer.android.com	

• android-developers.blogspot.com	

• source.android.com	

• stackoverflow.com	

• youtube.com/androiddevelopers	

• svetandroida.cz
THE END

Android development - the basics, MFF UK, 2013

  • 1.
    Android Development - thebasics Tomáš Kypta
  • 2.
    Agenda • Android platformand ecosystem • Android SDK and development tools • Hello World • building blocks of Android apps & the manifest file • activities, widgets, intents
  • 3.
    Agenda • dialogs, toasts,notifications • fragments
  • 4.
    Android platform • Linux-basedoperating system • open-source (http://source.android.com/) • originally phone OS • tablet support (since Honeycomb, Android 3.0) • Google TV
  • 5.
    History • 2003, Androidinc. • 2005, acquired by Google • Sep 2008, the first Android phone • T-Mobile G1 • May 2010, Froyo (Android 2.2) • Feb 2011, Honeycomb (Android 3.0)
  • 6.
    History • Oct 2011,Ice Cream Sandwich (Android 4.0) • July 2012, Jelly Bean (Android 4.1) • July 2013, Jelly Bean (Android 4.3) • Oct 2013, KitKat (Android 4.4)
  • 7.
  • 8.
    Android ecosystem • thousandsof devices • the most popular mobile platform • 1.5 million new devices activated every day • September 3, 2013, 1 billion Android devices have been activated • most devices made by Samsung
  • 9.
    Google Play • appcan be acquired by app stores • Google Play, http://play.google.com • other stores • > 50 billion apps have been installed from Google Play • July 2013, 1 million apps
  • 10.
    Google Play • purchasing •selling • Play Music, Play Books, ...
  • 11.
    Google Play • sellingapps • 15 min return period • ads • AdMob, ... • in-app billing
  • 12.
    Android “problems” • fragmentation •manufacturer/carrier enhancements • updates & support • openness - low quality apps in Google Play • malware • users
  • 13.
    Android security • appcan be installed directly • .apk file • user accepts app permissions when installing or updating the app
  • 14.
    Android security • VerifyApps (Android 2.3+) • checks every app install • Google Play can remotely uninstall harmful app
  • 17.
    Development • programming in“Java” • native apps possible (C++) • development tools platform friendly • Windows, Linux, Mac OS X
  • 18.
    Development • IDE support •Android Studio, IntelliJ IDEA, ADT plugin for Eclispse, Netbeans • you can freely develop on any device
  • 19.
    Android SDK • android- Android SDK and AVD Manager • adb - Android Debug Bridge • monitor - (ddms & hierarchyviewer) • emulator • lint, Traceview, ProGuard • docs, samples
  • 20.
    Libraries • compatibility libraries •v4 - backports lots of newer functionality to Android 1.6+ • Google Play In-app Billing
  • 21.
    Libraries • Google PlayServices • Google Maps • Games • Google+ • Authorization
  • 22.
    Libraries • AdMob • GoogleAnalytics, Flurry, Crittercism • Google Cloud Messaging
  • 24.
  • 25.
  • 28.
    Android building blocks •Activity • Service • Content provider • Broadcast receiver • AndroidManifest.xml
  • 29.
    Activity • screen withuser interface • the only visual component • example - an email app • list of emails • details of an email • email composition
  • 30.
    Service • has noUI • long-running tasks • examples • music playback service • download service • sync service
  • 31.
    Content Provider • managersand shares application data • data storage doesn’t matter (db, web, filesystem) • apps can query and modify data through content provider • r/w permissions can be defined • examples - all system dbs (SMS, contacts, ...)
  • 32.
    Broadcast Receiver • respondsto broadcasts • broadcasts are system wide • can be registered statically or dynamically • system or custom messages • examples - incoming SMS, incoming call, screen turned off, low baterry, removed SD card, BT device available, ...
  • 33.
    AndroidManifest.xml • defines whatparts the app have • defines which endpoints are exposed • minimum/maximum API level • permissions • declare hardware and software features • require configuration
  • 34.
    Intent • asynchronous message •binds components together (all except Content Provider) • starting activities • starting services and binding to services • sending broadcasts
  • 35.
    Activity • a subclassof android.app.Activity • app usually has many activities • activities managed in activity stack • newly started activity is placed on the top of the stack
  • 36.
    Activity Lifecycle • activitycan be in different states during its lifecycle • foreground, visible, stopped, killed • when activity state changes a system callback is called
  • 37.
    Activity callbacks • onCreate()- activity created • onStart() - activity visible for the user • onResume() - activity gains user focus • onPause() - system resuming another activity • onStop() - activity becoming invisible to the user
  • 38.
    Activity callbacks • onDestroy()- before activity is destroyed • onRestart() - called if activity was previously stopped, called prior to onStart()
  • 41.
    Configuration changes • whenconfiguration changes, activities are destroyed and recreated • default behaviour, can be changed • properly handle config changes • onSaveInstanceState(Bundle)
  • 42.
    Intent & Activity •starting activity explicitly • new Intent(context, MyActivity.class)! • new Intent(Intent.ACTION_VIEW, Uri.parse(“http:// developer.android.com”))! • starting activity implicitly • starting activity for result
  • 43.
    User Interface • definedby a hierarchy of views • layouts = containers • LinearLayout, RelativeLayout, FrameLayout, ...
  • 44.
    User Interface • widgets •UI objects • Button, TextView, EditText, RadioButton, ... • WebView
  • 45.
    User Interface • listwidgets • subclasses of AdapterView • display a list of items • use adapter to bind list do data • ListView, GridView, Spinner, ...
  • 46.
    Resources • drawables • bitmaps •9-patch png • state lists • layer lists • shape drawables
  • 47.
    Resources • layout • strings •colors • menus • dimensions • animations
  • 48.
  • 49.
  • 50.
    Screen sizes and densities •How to handle different screen sizes and densities?
  • 51.
    Resources • resources canbe created in several versions • the best version is selected according to current device configuration in runtime • resource units • dp - density-independent pixel • sp - scale-independent pixel (for fonts)
  • 52.
    Resource qualifiers • suffixesfor resource folders • drawables, drawable-mdpi, ... • values, values-cs • layout, layout-sw640dp • drawable-hdpi-v11
  • 53.
    Resource qualifiers • screendensity - ldpi, mdpi, hdpi, xhdpi, ... • screen size - small, normal, large, xlarge • screen orientation - port, land • language - en, cs, sk, ... • version - v11, v14, ...
  • 54.
    Resource qualifiers • sinceAndroid 3.2 • w<N>dp - available screen width, w600dp • h<N>dp - available screen heights, h720dp • sw<N>dp - smallest width (does not change with orientation)
  • 55.
    Resources • accessed fromcode via generated R.java file and resource ids • view.findViewById(R.id.txt_name)! • txtName.setText(R.string.txt_name_label)
  • 56.
    Android version fragmentation • Howto handle different API levels available on different devices?
  • 57.
    Android version fragmentation • buildtarget • API level the app is compiled against • AndroidManifest.xml • <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" />
  • 58.
    Android version fragmentation • handlingversions in code if (Build.VERSION.SDK_INT < Build.VERSION_CODES.GINGERBREAD) {! // code for Android < 2.3! }
  • 59.
    Android version fragmentation private booleanfunctionalitySupported = false;! ! static {! try {! checkFunctionalitySupported();! } catch (NoClassDefFoundError e) {! ! functionalitySupported = false;! }! }! ! private static void checkFunctionalitySupported() throws ! ! ! ! ! ! ! NoClassDefFoundError {! ! functionalitySupported = android.app.Fragment.class != null;! }!
  • 60.
    Fragments • a pieceof application UI • introduced to support more flexible UI • phones and tablets together in one app • fragment != activity • fragments are used within activities
  • 61.
    Fragments • since Android3.0 • support library v4 backports them to Android 1.6+
  • 62.
    Threads • main thread= UI thread • do not ever block the UI thread!!! • use worker threads for time consuming operations • UI toolkit not thread safe - never manipulate UI from a worker thread
  • 63.
    Menu • menu resource •Android < 3.0 the whole menu hidden under menu button • ActionBar since Android 3.0 • items can be displayed in the action bar
  • 64.
    Menu • behaviour foritems that don’t fit in the action bar • hidden under menu button (if the device has one) • system overflow icon in the action bar
  • 65.
  • 66.
    Dialogs • standard dialogs •custom dialogs • activity with dialog style • since fragments used via DialogFragment
  • 67.
    Dialogs • might betedious to create • difficult to style • StyledDialogs • https://github.com/inmite/android-styled-dialogs • the library makes styling and using dialogs a piece of cake
  • 68.
    Toast • simple non-modalinformation • displayed for a short period of time • doesn’t have user focus
  • 69.
    Notifications • a messagethat can be displayed to the user outside your normal UI • displayed in notification area
  • 70.
    Notifications • user canopen notification drawer to see the details • app can define UI and click action • NotificationCompat.Builder
  • 71.
    Preferences SharedPreferences prefs =PreferenceManager! .getDefaultSharedPreferences(context);! ! SharedPreferences prefs = ! config.getSharedPreferences(PREFS_FILE_NAME,! Activity.MODE_PRIVATE);! ! int storedValue = prefs.getInt(SOME_KEY, defaultValue);! ! SharedPreferences.Editor editor = prefs.edit();! editor.putInt(SOME_KEY, storedValue);! editor.commit();
  • 72.
    Sources • developer.android.com • android-developers.blogspot.com •source.android.com • stackoverflow.com • youtube.com/androiddevelopers • svetandroida.cz
  • 73.