Upload
tomas-kypta
View
752
Download
1
Tags:
Embed Size (px)
DESCRIPTION
Introductory lecture to Android development. Faculty of Mathematics and Physics in Prague, 2013.
Citation preview
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
• fragmentation
• manufacturer/carrier enhancements
• updates & support
• openness - low quality apps in Google Play
• malware
• users
Android “problems”
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)!
• 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, ...
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
PreferencesSharedPreferences 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