Android development - the basics, MFF UK, 2013
Upcoming SlideShare
Loading in...5
×
 

Android development - the basics, MFF UK, 2013

on

  • 863 views

Introductory lecture to Android development. Faculty of Mathematics and Physics in Prague, 2013.

Introductory lecture to Android development. Faculty of Mathematics and Physics in Prague, 2013.

Statistics

Views

Total Views
863
Views on SlideShare
863
Embed Views
0

Actions

Likes
1
Downloads
15
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Android development - the basics, MFF UK, 2013 Android development - the basics, MFF UK, 2013 Presentation Transcript

  • 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