Introduction to Android Development with Java

3,900 views

Published on

An introduction to the Android platform and how to develop for it with Java and the provided tools. Also covers best practices and some resources to aid in the development process.

Published in: Technology, Education

Introduction to Android Development with Java

  1. 1. INTRODUCTIONTO ANDROID DEVELOPMENT Jim McKeeth @JimMcKeeth jim@mckeeth.org 1 Tuesday, August 20, 13
  2. 2. AGENDA • Hello Android • Overview of Platform • PlatformTools • UI - XML • Views & Widgets • Architecture • Manifest & Permission • Activities & Intents • Debugging • Resources 2 Tuesday, August 20, 13
  3. 3. ABOUT ME • Live here in Boise - jim@mckeeth.org • Lead Developer Evangelist for EmbarcaderoTechnologies • www.embarcadero.com - Delphi for Android coming soon • Google Developer Group - www.gdgb.org • Boise Software Developers Group - www.bsdg.org • Boise Code Camp - www.BoiseCodeCamp.com Tuesday, August 20, 13
  4. 4. DEMO: HELLO ANDROID Tuesday, August 20, 13
  5. 5. GOOD PLACESTO KNOW • developer.android.com - Official developer site • developers.google.com/android/ - Google on Android • developers.google.com/events/io/ - Google I/O Replays • stackoverflow.com - Great Q&A community • android.stackexchange.com - End user Q&A • vogella.com/android.html - Detailed tutorials 5 Tuesday, August 20, 13
  6. 6. ANDROID 6 Tuesday, August 20, 13
  7. 7. ANDROID STACK • Tweaked Linux 2.6 • Tweaked Java (Dalvik) • Android OS • Android Apps • (Mostly open source) 7 Tuesday, August 20, 13
  8. 8. VERSION HISTORY • November 5th, 2007 is Android’s Birthday • Each version has a version number, name and API level • Version number is most specific • Name is group of versions and API levels • Latest:Android 4.3 Jelly Bean (API 18) http://en.wikipedia.org/wiki/Android_version_history#Version_history_by_API_level Tuesday, August 20, 13
  9. 9. VERSION POPULARITY As of August 2013 http://sn.im/platform-versions9 40% = Jelly Bean 63% >= ICS 96% >= Gingerbread 40% 23% 33% Tuesday, August 20, 13
  10. 10. Tuesday, August 20, 13
  11. 11. ARCHITECTURE http://sn.im/what-is-android 11 Tuesday, August 20, 13
  12. 12. FRAMEWORK • DalvikVM • WebKit Browser • 2d Graphics Library, 3D w/OpenGL • SQLite • MPEG4, MP3, PNG, JPEG, etc • GSMTelephony, Bluetooth,WiFi • Camera, GPS, Compass,Accelerometer 12 Tuesday, August 20, 13
  13. 13. CORE APPLICATIONS • Phone • eMail and SMS clients • Calendar • Contacts • Web Browser • Geographic Support via Google Maps 13 Tuesday, August 20, 13
  14. 14. ANDROID DEVELOPMENT Tuesday, August 20, 13
  15. 15. ANDROID SDK • http://developer.android.com/sdk • 3 Options • ADT Bundle (in Eclipse) • “Existing IDE” download • Android Studio preview (in IntelliJ) 15 Tuesday, August 20, 13
  16. 16. RELATEDTOOLS • Managers • Android SDK Manager • AVD Manager (AndroidVirtual Device) • Command-LineTools • adb (Android Debug Bridge -Your best friend!) • Others Tuesday, August 20, 13
  17. 17. ANDROID DEVELOPMENT JDK$ Android' SDK' Dalvik' Virtual' Machine' Linux& kernel& Tuesday, August 20, 13
  18. 18. BUILD PROCESS Android'App'Package' APK' DEX'Compiler' Dalvik'byte'code' Java'Compiler' Java'JAR' Tuesday, August 20, 13
  19. 19. THE APK FILE • Zip file containing • Manifest, etc. • Compiled code • Resources & Assets Tuesday, August 20, 13
  20. 20. ACTIVITY ARCHITECTURE Tuesday, August 20, 13
  21. 21. Applica'on*Context* PARTS OF AN ANDROID APP Intent% Ac#vity( Class% Layout' String' Resources' Android' Manifest' Other& Classes& Drawables) Services( Broadcast) Receiver) Content& Providers& Ac#vity( Intent% Tuesday, August 20, 13
  22. 22. PROJECT LAYOUT • AndroidManifest.xml • bin (APK file, compiled DEX files) • gen (generated resources) • res (resources you create) • src (Java source files) Tuesday, August 20, 13
  23. 23. MANIFEST • Mandatory XML file “AndroidManifest.xml” • Describe application components • Default Activity • Permissions,Attributes • Non-SDK libraries http://sn.im/android-manifest Tuesday, August 20, 13
  24. 24. MULTIPLE ACTIVITIES • Each Activity must be defined in manifest by class name and “action” • Activities reside on a “task stack” - visible activity is “top of stack” • Transition to an Activity using Intent • Return from Activity using Activity.finish() which pops off task stack Tuesday, August 20, 13
  25. 25. “RES” - RESOURCES • XML Files • drawable • layout • values • etc. • Graphics Tuesday, August 20, 13
  26. 26. RES/LAYOUT • Each Activity should have dedicated layout XML file • Layout file specifies Activity appearance • Several layout types • Default LinearLayout provides sequential placement of widgets Tuesday, August 20, 13
  27. 27. RES/VALUES • strings.xml contains String constants • Prefer strings.xml to hardcoded values (warnings) • L10N/I18N (Localization/Internationalization) Tuesday, August 20, 13
  28. 28. • Application/Task is a stack of Activities • Visible activity = top of stack • Activities maintain state, even when notTOS • “Back” button pops stack. • “Home” key would move stack to background • Selecting application brings to foreground or launches new instance APPLICATION AKATASK Tuesday, August 20, 13
  29. 29. ANDROID.APP.ACTIVITY • Activity extends Context • Context contains application environment • “a single focused thing a user can do” • An application consists of 1 or more Activities • Provides a default window to draw in, might be smaller than screen or float on top of others • UI elements are “View(s)” or widgets Tuesday, August 20, 13
  30. 30. ANDROID.VIEW.VIEW • Extends java.lang.Object • Basic building block for UI components • Rectangular area on display • Responsible for drawing and event handling • View is the base class for widgets Tuesday, August 20, 13
  31. 31. Callback Methods (delegates) Major States Activity Lifecycle http://sn.im/android-activity Tuesday, August 20, 13
  32. 32. SAVING STATE Tuesday, August 20, 13
  33. 33. FRAGMENTS http://sn.im/android-fragments Tuesday, August 20, 13
  34. 34. ANDROID.CONTENT.INTENT • Interprocess Communication messaging • Can launch an Activity or start a Service • new Intent(String action, Uri uri); • new Intent(Context packageCtx, Class class); • Intent.putExtra() • Intent.setAction() http://sn.im/android-intent Tuesday, August 20, 13
  35. 35. INTENT (CONTINUED) • android.intent.action.MAIN (receiver on main activity) • many options:ACTION_VIEW, etc • category = extra information • MIME type • extras (i.e. getAction(), getExtra(), etc) Tuesday, August 20, 13
  36. 36. INTENT USAGE • Activity Switch: • new Intent(this, NextActivity.class); • Web Browser: • Uri uri = Uri.parse(“http://foobar.com”); • new Intent(Intent.ACTION_VIEW, uri); • Phone Dialer: • Uri uri = Uri.parse(“tel:4085551212”); • new Intent(Intent.ACTION_VIEW, uri); http://sn.im/android-intent Tuesday, August 20, 13
  37. 37. VIEWS Tuesday, August 20, 13
  38. 38. VIEW LISTENERS • GUI is event driven • Event source: button press, mouse click, etc. • Listener catches event and performs action • Events are delivered to view w/current focus Tuesday, August 20, 13
  39. 39. EVENT LISTENER • onClick()/View.OnClickListener() • (boolean) onLongClick()/View.OnLongClickListener() • onFocusChange()/View.OnFocusChangeListener() • (boolean) onKey()/View.OnKeyListener() • (boolean) onTouch()/View.OnTouchListener() • onCreateContextMenu()/ View.OnCreateContextMenuListener() • return true to stop event propagation Tuesday, August 20, 13
  40. 40. VIEW SIZE • FILL_PARENT = parent sized (minus pad) • Now “MATCH_PARENT” w/API Level 8 • WRAP_CONTENT = just big enough (plus pad) Tuesday, August 20, 13
  41. 41. LAYING OUTVIEWS • Gravity = position (i.e. left, right, center) • Weight = extra/empty space allocation • priority for expansion • default weight is zero Tuesday, August 20, 13
  42. 42. DIMENSIONVALUES • Dimension values: • dp/dip = density independent pixels • sp = Scale independent pixels • px = pixels • in/mm = inches/millimeters • pt = point (1/72 inch) RecommendedNotRecommended Tuesday, August 20, 13
  43. 43. DENSITY INDEPENDENT PIXELS • An abstract unit that is based on the physical density of the screen.These units are relative to a 160 dpi (dots per inch) screen, so 160dp is always one inch regardless of the screen density. • The ratio of dp-to-pixel will change with the screen density, but not necessarily in direct proportion. • You should use these units when specifying view dimensions in your layout, so the UI properly scales to render at the same actual size on different screens. • The compiler accepts both "dip" and "dp", though "dp" is more consistent with "sp". Tuesday, August 20, 13
  44. 44. SCALE-INDEPENDENT PIXELS • This is like the dp unit, but it is also scaled by the user's font size preference. • Recommend you use this unit when specifying font sizes, so they will be adjusted for both the screen density and the user's preference. Recom m ended for Fonts Tuesday, August 20, 13
  45. 45. COLORS • #RGB • #ARGB ( Alpha / Red / Green / Blue ) • #RRGGBB (i.e. #3d1ec4) • #AARRGGBB Tuesday, August 20, 13
  46. 46. VIEW /VIEWGROUP Tuesday, August 20, 13
  47. 47. LAYOUTS (VIEWGROUPS) • AbsoluteLayout -Absolute X,Y (depreciated) • FrameLayout - Pinned to top left (simplest) • LinearLayout - Horizontal orVertical - one per row • RelativeLayout - Child specify relative widgets • SlidingDrawer - Hides until dragged out by handle • TableLayout - Rows & Columns • ScrollView - Child can be larger than window • TabWidget - Manages collection of “Tab Hosts” Tuesday, August 20, 13
  48. 48. ORIENTATION • landscape or portrait • dedicated layout file • /res/layout = default layout directory • /res/layout-land = landscape layout directory • /res/layout-port = portrait layout directory Tuesday, August 20, 13
  49. 49. DEMO - LAYOUTS &VIEWS Tuesday, August 20, 13
  50. 50. TRACE LOGGING • android.util.Log • Log.d(“tag”,“debug”); • Log.e(“tag”,“error”); • Log.i(“tag”,“informational”); • Log.v(“tag”,“verbose”); • Log.w(“tag”,“warning”); • View output using “adb logcat” http://sn.im/android-log Tuesday, August 20, 13
  51. 51. ADB - ANDROID DEBUG BRIDGE • Manages devices & emulators • Issue debug commands • Log output (adb logcat) • Shell (adb shell) • Copy files to/from emulator (adb push/pull) http://sn.im/android_debug_bridge Tuesday, August 20, 13
  52. 52. DEMO - ADB & LOGCAT Tuesday, August 20, 13
  53. 53. BEST PRACTICES Tuesday, August 20, 13
  54. 54. BEST PRACTICES • Support multiple screen sizes and densities • Use the Action Bar pattern - Good-bye menu button • Build Dynamic UI with Fragments • Know when to persist and restore state • Don’t block main thread - use AsyncTask -Test with StrictMode http://sn.im/android-practices http://sn.im/android-performance Tuesday, August 20, 13
  55. 55. SUPPORT MULTIPLE SCREENS SIZES & DENSITIES • Use wrap_content, fill_parent, or dp units when specifying dimensions in an XML layout file • Do not use hard coded pixel values in your application code • Do not use AbsoluteLayout (it's deprecated) • Supply alternative bitmap drawables for different screen densities • ldpi, mdpi, hdpi, xhdpi http://sn.im/android-screens Tuesday, August 20, 13
  56. 56. SCREEN SIZES & DENSITIES Tuesday, August 20, 13
  57. 57. ACTION BAR 1. App Icon - optional “up” affordance 2. View control - Navigation 3. Dynamic number of “important” action buttons 4. Action overflow http://sn.im/android-actionbar http://actionbarsherlock.com/ Tuesday, August 20, 13
  58. 58. ASYNCTASK private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {      protected Long doInBackground(URL... urls) {          int count = urls.length;          long totalSize = 0;          for (int i = 0; i < count; i++) {              totalSize += Downloader.downloadFile(urls[i]);              publishProgress((int) ((i / (float) count) * 100));              // Escape early if cancel() is called              if (isCancelled()) break;          }          return totalSize;      }      protected void onProgressUpdate(Integer... progress) {          setProgressPercent(progress[0]);      }      protected void onPostExecute(Long result) {          showDialog("Downloaded " + result + " bytes");      }  } http://sn.im/android-asynctask Tuesday, August 20, 13
  59. 59. STRICT MODE • Place a policy on a thread - provides feedback when blocked  public void onCreate() {      if (DEVELOPER_MODE) {          StrictMode.enableDefaults(); // Or configure      }      super.onCreate(); } • http://sn.im/android-strictmode • http://sn.im/android-strictmode-blog Tuesday, August 20, 13
  60. 60. FIN. Tuesday, August 20, 13
  61. 61. GOOD PLACESTO KNOW • developer.android.com - Official developer site • developers.google.com/android/ - Google on Android • developers.google.com/events/io/ - Google I/O Replays • stackoverflow.com - Great Q&A community • android.stackexchange.com - End user Q&A • vogella.com/android.html - Detailed tutorials 61 Tuesday, August 20, 13
  62. 62. ABOUT ME • Live here in Boise - jim@mckeeth.org • Lead Developer Evangelist for EmbarcaderoTechnologies • www.embarcadero.com - Delphi for Android coming soon • Google Developer Group - www.gdgb.org • Boise Software Developers Group - www.bsdg.org • Boise Code Camp - www.BoiseCodeCamp.com Tuesday, August 20, 13

×