Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Android Development: The 20,000-Foot View

Android Development: The 20,000-Foot View

from the DevWeek 2014 conference

Avatar for Mark Murphy

Mark Murphy

April 01, 2014

More Decks by Mark Murphy

Other Decks in Programming

Transcript

  1. Copyright © 2014 CommonsWare, LLC Welcome to Android! • Traditional

    Development Model – Java, XML, and other good stuf • Alternative Development Models – Other languages – Native development – HTML5 and hybrid apps – Games – Other cross-platform options
  2. Copyright © 2014 CommonsWare, LLC In the Beginning, There Was

    Java, And It Was Good (well, it was OK, at least...)
  3. Copyright © 2014 CommonsWare, LLC Basket of Components • Activity

    – Primary unit of user interface – Think: screen, page, window – “User transaction”
  4. Copyright © 2014 CommonsWare, LLC Basket of Components • Service

    – Long-running task (download) – User-controlled background task (music player) – “Cron job” (check for unread email) – Integration point (third-party API)
  5. Copyright © 2014 CommonsWare, LLC Basket of Components • Broadcast

    Receiver – System events (battery low) – Application messages • Content Provider – Integration point • Expose database to third parties • Expose streams to third parties – Abstraction layer (hide database internally)
  6. Copyright © 2014 CommonsWare, LLC Activities, Fragments, & Widgets •

    Activities Host Widgets – Widget = micro unit of UI – Organized via layout managers – Described using XML • Activity as a whole • Portions of an activity (rows in a selection list)
  7. Copyright © 2014 CommonsWare, LLC Activities, Fragments, & Widgets •

    Fragments Manage Widgets – Reuse for multiple screen sizes – Reuse for multiple instances • Horizontal swiping strategies
  8. Copyright © 2014 CommonsWare, LLC Activities, Fragments, & Widgets •

    Flow = Web-Like – Click to launch new activities – BACK button – HOME button
  9. Copyright © 2014 CommonsWare, LLC Java and Dalvik • What

    You Write – Java – XML – C/C++ (optional)
  10. Copyright © 2014 CommonsWare, LLC Java and Dalvik • What

    Android Runs: Dalvik – Virtual machine, like Perl or Java – Build tools translate your Java code to Dalvik bytecode – Usually invisible to you
  11. Copyright © 2014 CommonsWare, LLC Resources • Non-Java Application Assets

    – Layouts – Images (PNG, JPEG, etc.) – Audio clips – Strings – Animations – Menus – Etc.
  12. Copyright © 2014 CommonsWare, LLC Resources • Resource Sets –

    Language – Screen density – Screen size – Screen orientation (portrait, landscape) – Touchscreen type – Dozens of other criteria
  13. Copyright © 2014 CommonsWare, LLC The Manifest • AndroidManifest.xml, in

    project root • Table of contents • Additional metadata – App and OS versions – Requested and required permissions – Supported screen sizes
  14. Copyright © 2014 CommonsWare, LLC Tools • Eclipse... – Android

    Developer Tools plugin – GUI preview mode
  15. Copyright © 2014 CommonsWare, LLC Tools • ...or Android Studio...

    – New IDE, based on IntelliJ IDEA, under development at Google – “Early access preview” available today • Broken enough that is mostly for seasoned Android developers – Should be the long-term focus
  16. Copyright © 2014 CommonsWare, LLC Tools • ...Or Not –

    IntelliJ IDEA – NetBeans – No particular IDE • Platforms – Linux – OS X – Windows
  17. Copyright © 2014 CommonsWare, LLC Intents and Integration • Intents

    as Message Bus – Start an activity – Start a service – Send a broadcast
  18. Copyright © 2014 CommonsWare, LLC Intents and Integration • Use

    Intents Internally – Start your own activities – Start your own services – Send your own “narrowcasts” • Service activity or notifcation → – Send your own “broadcasts” to third parties
  19. Copyright © 2014 CommonsWare, LLC Intents and Integration • Use

    Intents Externally – Send a message with the user's choice of “send” application (email? SMS? Twitter? Facebook?) – Ofer to view a certain MIME type – Launch an OS-supplied activity (map) – Launch a third-party activity – Implement a plug-in system
  20. Copyright © 2014 CommonsWare, LLC Notable OS Features • Data

    Stores – SQLite: relational database engine, in-process – Files • Internal: not accessible by user • External: accessible by user via mounting device – Shared Preferences • Mostly for user settings • GUI framework for collecting these
  21. Copyright © 2014 CommonsWare, LLC Notable OS Features • Notifcations

    – Put icon in status bar (phones) or system bar (tablets) or elsewhere (TVs) – Optional hardware alerts • Ringtone, vibration, etc. – Designed to let user know of work being done in the background
  22. Copyright © 2014 CommonsWare, LLC Notable OS Features • Multimedia

    – Audio, video • Decent but not infnite roster of formats/codecs • Some codecs are commercial, may not always be present – Recording, playback – Local, streaming
  23. Copyright © 2014 CommonsWare, LLC Notable OS Features • Locations

    – GPS – WiFi hotspot proximity – Cell tower triangulation • Maps – Google Maps – Third-party mapping engines
  24. Copyright © 2014 CommonsWare, LLC Notable OS Features • Sensors

    – Accelerometer – Gyroscope – Orientation – Ambient Light – Barometric Pressure – Etc.
  25. Copyright © 2014 CommonsWare, LLC Notable OS Features • Other

    Hardware – Telephony – WiFi – Bluetooth – NFC – Cameras – USB
  26. Copyright © 2014 CommonsWare, LLC Production • APK File –

    Android “executable” – Digitally signed (self-signed certifcate) – Freely distributable • Not limited to Play Store or any other single venue
  27. Copyright © 2014 CommonsWare, LLC Production • Play Store –

    $25 setup fee – Upload and go • Available on many devices within hours of release • Other Markets Available – Amazon Appstore for Android – Manufacturer stores: Nokia, Samsung, etc. • Self-Distribution
  28. Copyright © 2014 CommonsWare, LLC Varying Definitions of ”Native” •

    Native = C/C++ – In comparison to Java • Native = Java – In comparison to HTML5 and hybrid apps
  29. Copyright © 2014 CommonsWare, LLC Native C/C++ Development • Native

    Development Kit (NDK) – Allows you to write C/C++ libraries, link into your Android app • Pros – Speed – Possible reuse across platforms
  30. Copyright © 2014 CommonsWare, LLC Native C/C++ Development • Cons

    – CPU architectures (x86 vs. ARM vs. MIPS) – May not like C/C++ any more than Java • Pattern #1: Extension Library – Migrate select algorithms into native code – Examples: image processing, signal processing, game AI
  31. Copyright © 2014 CommonsWare, LLC Native C/C++ Development • Pattern

    #2: Complete App – Eschew all trappings of traditional apps – Mostly for OpenGL/OpenSL games
  32. Copyright © 2014 CommonsWare, LLC HTML5 Web Apps • Traditional

    Web development, writ small • Key: Cache Manifest – Designate fles that should be cached, beyond standard ephemeral cache – Objective: Allow app to be run offline • Other Facets of HTML5 Specifcation – Storage, WebSockets, video, camera, location tracking, etc.
  33. Copyright © 2014 CommonsWare, LLC HTML5 Web Apps • Pros

    – May already have Web development talent – Cross-platform • Cons – Need touch-aware coding/libraries – Discoverability an issue • Play Store does not list Web apps • Amazon Appstore for Android does
  34. Copyright © 2014 CommonsWare, LLC Hybrid Apps • HTML5 UI

    on a (Java) Native Foundation – Package up HTML/CSS/JS/images into APK – Gives you access to APIs beyond HTML5 specs • Most Popular: PhoneGap – Adobe product, based on Apache Cordova – Cross-platform – Optional hosted build service
  35. Copyright © 2014 CommonsWare, LLC Hybrid Apps • Pros –

    Closer to native apps for distribution and capability • Cons – Not a native UI • Big or small problem depending upon audience – Cannot do everything that a native app can
  36. Copyright © 2014 CommonsWare, LLC Game Engines • Android-Specifc –

    AndEngine, Box2D • Cross-Platform – Unity 3D, Cocos 2D, Corona, Havok, libGDX, Proton • Dozens of others
  37. Copyright © 2014 CommonsWare, LLC Other Cross-Platform Options • Titanium

    Mobile – Develop in JavaScript, but manipulating native widgets (not HTML) • Adobe AIR – Well, OK, sorta cross-platform... • Xamarin – .NET for Android (MonoDroid)
  38. Copyright © 2014 CommonsWare, LLC Other Cross-Platform Options • Sencha

    – Ofers own PhoneGap-style hybrid engine for use with Sencha Touch-based apps • MoSync – Another take on hybrid app engine • Rhodes – Web apps, but with Ruby “server”
  39. Copyright © 2014 CommonsWare, LLC App Inventor • Drag-and-Drop –

    UI – Code via pluggable “blocks” • Originally created by Google educational unit • Contributed to MIT Media Lab, open source • Apps not really suited for distribution
  40. Copyright © 2014 CommonsWare, LLC App Generators • Canned “Fill-in-the-Blanks”

    Apps – You provide details, it generates custom app on a server for you to download and distribute • Focuses – Specifc verticals (e.g., restaurants) via vertical-specifc templates – General “oh, we should have an app” frms
  41. Copyright © 2014 CommonsWare, LLC Who Is The User? •

    Public Distribution? – UI/UX is fairly important for acceptance, good reviews – Should look like other apps of its ilk • Internal Distribution? – Long history of crap – Look-and-feel issues tend to be lower concern
  42. Copyright © 2014 CommonsWare, LLC What Does the User Use?

    • Supplied Device? – If so, and if Android, all options on the table • BYOD? – Android Today (think multi-native implementation) – Android Tomorrow (think cross-platform) – Android Forever (gain deep experience in one area)
  43. Copyright © 2014 CommonsWare, LLC What Do You Need? •

    More Device-Centric, More Native – Contacts? – Camera? – Background data syncing? – Notifcations? • Simpler Requirements = More Flexibility in Development Choice
  44. Copyright © 2014 CommonsWare, LLC What Do You Know? •

    All Else Equal, Pick a Gentle Learning Curve – Unless learning is the objective... – ...and all else may not be equal • Benefts to Existing Experience – Level of efort = time/expense budget – Deadlines
  45. Copyright © 2014 CommonsWare, LLC Key Resources • developer.android.com –

    Official documentation and download site • stackoverflow.com/questions/tagged/android – #1 Q&A resource – See also www.andglobe.com for other sites in a range of languages • Books