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" 
• toasts
Android platform 
• Linux-based operating system" 
• open-source (http://source.android.com/)" 
• originally phone OS" 
• tablet support (since Honeycomb, Android 
3.0)
Android platform 
• Google TV" 
• Google Glass" 
• Google Wear
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)" 
• June 2014, Android L (developer preview)
Platform Versions
Android ecosystem 
• thousands of devices" 
• the most popular mobile platform" 
• 1.5 million new devices activated every day" 
– Q2 2013" 
• September 3, 2013, 1 billion Android 
devices have been activated" 
• most devices made by Samsung " 
– 65%, Feb 2014
Google Play 
• apps are distributed by app stores" 
– Google Play, http://play.google.com" 
– other stores (Amazon, Samsung, …)" 
• > 50 billion apps have been installed from 
Google Play" 
• > 1.3 million apps
Google Play 
• customers can purchase" 
• developers can sell" 
• Play Music " 
• Play Books " 
• Play Movies
Monetization 
• selling apps" 
– 15 min return period" 
• in-app billing" 
– freemium model" 
• ads" 
– AdMob, ...
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 
apps
Development 
• programming in “Java”" 
– Java SE 7 (KitKat)" 
• native apps possible (C++)" 
• development tools platform friendly" 
– Windows, Linux, Mac OS X
Development 
• IDE support" 
– Android Studio, IntelliJ IDEA" 
– ADT plugin for Eclipse" 
– 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
Support Libraries 
• compatibility libraries" 
– v4 - backports lots of newer functionality 
to Android 1.6+" 
– Fragments, NotificationCompat, ViewPager" 
– v7" 
– AppCompat" 
– v8" 
– v13
Google Play Services 
• Google Maps" 
• In-app Billing" 
• Games" 
• Google+" 
• Authorization
Libraries 
• AdMob" 
• Google Analytics, Flurry, Crittercism
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
Hello World
Build
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
Activity callbacks 
• onPause() - system resuming another 
activity" 
• onStop() - activity becoming invisible to the 
user" 
• onDestroy() - before activity is destroyed
Activity callbacks 
• 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)! 
• starting activity implicitly" 
– new Intent(Intent.ACTION_VIEW, 
Uri.parse(“http://developer.android.com”))! 
• 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, ...
Adapters 
• provide data for Adapter views" 
• are responsible for the creation of items
Resources 
• drawables" 
– bitmaps" 
– 9-patch png" 
– state lists" 
– layer lists" 
– shape drawables
• layout" 
• strings" 
• colors" 
• menus" 
• dimensions" 
• animations 
Resources
• arrays" 
• ids" 
• raw" 
• xml" 
• ... 
Resources
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
Resources 
• resource units" 
– dp - density-independent pixel" 
– sp - scale-independent pixel (for fonts)" 
– never use px!!!
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, en-rGB…" 
• 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)
Localization?
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;! 
}!
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
Logging 
• java.util.logging.Logger 
• android.util.Log
Toast 
• simple non-modal information" 
• displayed for a short period of time" 
• doesn’t have user focus
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, 2014

  • 1.
    Android Development -the basics Tomáš Kypta
  • 2.
    Agenda • Androidplatform and ecosystem" • Android SDK and development tools" • Hello World" • building blocks of Android apps & the manifest file" • activities, widgets, intents" • toasts
  • 3.
    Android platform •Linux-based operating system" • open-source (http://source.android.com/)" • originally phone OS" • tablet support (since Honeycomb, Android 3.0)
  • 4.
    Android platform •Google TV" • Google Glass" • Google Wear
  • 5.
    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)
  • 6.
    History • Oct2011, 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)" • June 2014, Android L (developer preview)
  • 7.
  • 8.
    Android ecosystem •thousands of devices" • the most popular mobile platform" • 1.5 million new devices activated every day" – Q2 2013" • September 3, 2013, 1 billion Android devices have been activated" • most devices made by Samsung " – 65%, Feb 2014
  • 9.
    Google Play •apps are distributed by app stores" – Google Play, http://play.google.com" – other stores (Amazon, Samsung, …)" • > 50 billion apps have been installed from Google Play" • > 1.3 million apps
  • 10.
    Google Play •customers can purchase" • developers can sell" • Play Music " • Play Books " • Play Movies
  • 11.
    Monetization • sellingapps" – 15 min return period" • in-app billing" – freemium model" • ads" – AdMob, ...
  • 12.
    Android “problems” •fragmentation" • manufacturer/carrier enhancements" • updates & support" • openness - low quality apps in Google Play" • malware" – users
  • 13.
    Android security •app can be installed directly" – .apk file" • user accepts app permissions when installing or updating the app
  • 14.
    Android security •Verify Apps (Android 2.3+)" – checks every app install" • Google Play can remotely uninstall harmful apps
  • 17.
    Development • programmingin “Java”" – Java SE 7 (KitKat)" • native apps possible (C++)" • development tools platform friendly" – Windows, Linux, Mac OS X
  • 18.
    Development • IDEsupport" – Android Studio, IntelliJ IDEA" – ADT plugin for Eclipse" – 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.
    Support Libraries •compatibility libraries" – v4 - backports lots of newer functionality to Android 1.6+" – Fragments, NotificationCompat, ViewPager" – v7" – AppCompat" – v8" – v13
  • 21.
    Google Play Services • Google Maps" • In-app Billing" • Games" • Google+" • Authorization
  • 22.
    Libraries • AdMob" • Google Analytics, Flurry, Crittercism
  • 24.
    Android building blocks • Activity" • Service" • Content provider" • Broadcast receiver" • AndroidManifest.xml
  • 25.
    Activity • screenwith user interface" • the only visual component" • example - an email app" – list of emails" – details of an email" – email composition
  • 26.
    Service • hasno UI" • long-running tasks" • examples" – music playback service" – download service" – sync service
  • 27.
    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, ...)
  • 28.
    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, ...
  • 29.
    AndroidManifest.xml • defineswhat parts the app have" • defines which endpoints are exposed" • minimum/maximum API level" • permissions" • declare hardware and software features" • require configuration
  • 30.
    Intent • asynchronousmessage" • binds components together (all except Content Provider)" • starting activities" • starting services and binding to services" • sending broadcasts
  • 31.
  • 32.
  • 35.
    Activity • asubclass 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
  • 36.
    Activity Lifecycle •activity can 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
  • 38.
    Activity callbacks •onPause() - system resuming another activity" • onStop() - activity becoming invisible to the user" • onDestroy() - before activity is destroyed
  • 39.
    Activity callbacks •onRestart() - called if activity was previously stopped, called prior to onStart()
  • 42.
    Configuration changes •when configuration changes, activities are destroyed and recreated" – default behaviour, can be changed" • properly handle config changes" – onSaveInstanceState(Bundle)
  • 43.
    Intent & Activity • starting activity explicitly" – new Intent(context, MyActivity.class)! • starting activity implicitly" – new Intent(Intent.ACTION_VIEW, Uri.parse(“http://developer.android.com”))! • starting activity for result
  • 44.
    User Interface •defined by a hierarchy of views" • layouts = containers" – LinearLayout, RelativeLayout, FrameLayout, ...
  • 45.
    User Interface •widgets" – UI objects" – Button, TextView, EditText, RadioButton, ..." – WebView
  • 46.
    User Interface •list widgets" – subclasses of AdapterView" – display a list of items" – use adapter to bind list do data" – ListView, GridView, Spinner, ...
  • 47.
    Adapters • providedata for Adapter views" • are responsible for the creation of items
  • 48.
    Resources • drawables" – bitmaps" – 9-patch png" – state lists" – layer lists" – shape drawables
  • 49.
    • layout" •strings" • colors" • menus" • dimensions" • animations Resources
  • 50.
    • arrays" •ids" • raw" • xml" • ... Resources
  • 51.
  • 52.
    Screen sizes anddensities • How to handle different screen sizes and densities?
  • 53.
    Resources • resourcescan be created in several versions" – the best version is selected according to current device configuration in runtime
  • 54.
    Resources • resourceunits" – dp - density-independent pixel" – sp - scale-independent pixel (for fonts)" – never use px!!!
  • 55.
    Resource qualifiers •suffixes for resource folders" – drawables, drawable-mdpi, ..." – values, values-cs" – layout, layout-sw640dp" – drawable-hdpi-v11
  • 56.
    Resource qualifiers •screen density - ldpi, mdpi, hdpi, xhdpi, ..." • screen size - small, normal, large, xlarge" • screen orientation - port, land" • language - en, cs, sk, en-rGB…" • version - v11, v14, ...
  • 57.
    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)
  • 58.
    Resources • accessedfrom code via generated R.java file and resource ids" – view.findViewById(R.id.txt_name)! – txtName.setText(R.string.txt_name_label)
  • 59.
  • 60.
    Android version fragmentation • How to handle different API levels available on different devices?
  • 61.
    Android version fragmentation • build target" – API level the app is compiled against" • AndroidManifest.xml" – <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" />
  • 62.
    Android version fragmentation • handling versions in code" if (Build.VERSION.SDK_INT < Build.VERSION_CODES.GINGERBREAD) {! ! // code for Android < 2.3! }
  • 63.
    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;! }!
  • 64.
    Threads • mainthread = 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
  • 65.
  • 66.
    Toast • simplenon-modal information" • displayed for a short period of time" • doesn’t have user focus
  • 67.
    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();
  • 68.
    Sources • developer.android.com" • android-developers.blogspot.com" • source.android.com" • stackoverflow.com" • youtube.com/androiddevelopers" • svetandroida.cz
  • 69.