More Related Content
Similar to Android Development: The 20,000-Foot View (20)
More from CommonsWare (20)
Android Development: The 20,000-Foot View
- 1. Copyright © 2013 CommonsWare, LLC
Android
Development...
The 20,000-Foot
View
- 2. Copyright © 2013 CommonsWare, LLC
Welcome to Android!
● Traditional Development Model
– Java, XML, and other good stuff
● Alternative Development Models
– Other languages
– Native development
– HTML5 and hybrid apps
– Games
– Other cross-platform options
- 3. Copyright © 2013 CommonsWare, LLC
Basket of Components
● Activity
– Primary unit of user interface
– Think: screen, page, window
– “User transaction”
- 4. Copyright © 2013 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 © 2013 CommonsWare, LLC
Basket of Components
● Broadcast Receiver
– System events (battery low)
– Application messages
● Content Provider
– Integration point (expose database)
– Abstraction layer (hide database internally)
- 6. Copyright © 2013 CommonsWare, LLC
Activities, Fragments, & Widgets
● Activities HostWidgets
– 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 © 2013 CommonsWare, LLC
Activities, Fragments, & Widgets
● Fragments ManageWidgets
– Reuse for multiple screen sizes
– Reuse for multiple instances
● Horizontal swiping strategies
- 8. Copyright © 2013 CommonsWare, LLC
Activities, Fragments, & Widgets
● Multiple Layout Flavors
– Portrait versus landscape
– Normal versus large
– Touchscreen versus pointer (trackball)
● Flow =Web-Like
– Click to launch new activities
– BACK button
– HOME button
- 9. Copyright © 2013 CommonsWare, LLC
Java and Dalvik
● WhatYouWrite
– Java
– XML
– C/C++ (optional)
- 10. Copyright © 2013 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 © 2013 CommonsWare, LLC
Resources
● Non-Java Application Assets
– Layouts
– Images (PNG, JPEG, etc.)
– Audio clips
– Strings
– Animations
– Menus
– Etc.
- 12. Copyright © 2013 CommonsWare, LLC
Resources
● Resource Sets
– Language
– Screen density
– Screen size
– Dozens of other criteria
- 13. Copyright © 2013 CommonsWare, LLC
Tools
● Eclipse...
– Android DeveloperTools plugin
– GUI preview mode
- 14. Copyright © 2013 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
- 15. Copyright © 2013 CommonsWare, LLC
Tools
● ...Or Not
– IntelliJ IDEA
– NetBeans
– No particular IDE
● Platforms
– Linux
– OS X
– Windows
- 16. Copyright © 2013 CommonsWare, LLC
Demo: Hello,
World
- 17. Copyright © 2013 CommonsWare, LLC
Intents and Integration
● Intents as Message Bus
– Start an activity
– Start a service
– Send a broadcast
- 18. Copyright © 2013 CommonsWare, LLC
Intents and Integration
● Use Intents Internally
– Start your own activities
– Start your own services
– Send your own “narrowcasts”
● Service activity or notification→
– Send your own “broadcasts” to third parties
- 19. Copyright © 2013 CommonsWare, LLC
Intents and Integration
● Use Intents Externally
– Send a message with the user's choice of “send”
application (email? SMS?Twitter? Facebook?)
– Offer to view a certain MIME type
– Launch an OS-supplied activity (map)
– Launch a third-party activity
– Implement a plug-in system
- 20. Copyright © 2013 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
- 21. Copyright © 2013 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
- 22. Copyright © 2013 CommonsWare, LLC
Notable OS Features
● Notifications
– 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
- 23. Copyright © 2013 CommonsWare, LLC
Notable OS Features
● Multimedia
– Audio, video
● Decent but not infinite roster of formats/codecs
● Some codecs are commercial, may not always be
present
– Recording, playback
– Local, streaming
- 24. Copyright © 2013 CommonsWare, LLC
Notable OS Features
● Locations
– GPS
– WiFi hotspot proximity
– Cell tower triangulation
● Maps
– Google Maps
– Third-party mapping engines
- 25. Copyright © 2013 CommonsWare, LLC
Notable OS Features
● Sensors
– Accelerometer
– Gyroscope
– Orientation
– Ambient Light
– Barometric Pressure
– Etc.
- 26. Copyright © 2013 CommonsWare, LLC
Notable OS Features
● Other Hardware
– Telephony
– WiFi
– Bluetooth
– NFC
– Cameras
– USB
- 27. Copyright © 2013 CommonsWare, LLC
Production
● APK File
– Android “executable”
– Digitally signed (self-signed certificate)
– Freely distributable
● Not limited to Android Market or any other single
venue
- 28. Copyright © 2013 CommonsWare, LLC
Production
● Play Store
– $25 setup fee
– Upload and go
● Available on many devices within hours of release
● Other Markets Available
– Example: Amazon Appstore for Android
● Self-Distribution
- 29. Copyright © 2013 CommonsWare, LLC
But, What If I
Hate Java?
- 30. Copyright © 2013 CommonsWare, LLC
Varying Definitions of ”Native”
● Native = C/C++
– In comparison to Java
● Native = Java
– In comparison to HTML5 and hybrid apps
- 31. Copyright © 2013 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
- 32. Copyright © 2013 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
- 33. Copyright © 2013 CommonsWare, LLC
Native C/C++ Development
● Pattern #2: Complete App
– Eschew all trappings of traditional apps
– Mostly for OpenGL/OpenSL games
- 34. Copyright © 2013 CommonsWare, LLC
HTML5 Web Apps
● TraditionalWeb development, writ small
● Key: Cache Manifest
– Designate files that should be cached, beyond
standard ephemeral cache
– Objective: Allow app to be run offline
● Other Facets of HTML5 Specification
– Storage,WebSockets, video, camera, location
tracking, etc.
- 35. Copyright © 2013 CommonsWare, LLC
HTML5 Web Apps
● Pros
– May already haveWeb development talent
– Cross-platform
● Cons
– Need touch-aware coding/libraries
– Discoverability an issue
● Play Store does not listWeb apps
● Amazon Appstore for Android does
- 36. Copyright © 2013 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
- 37. Copyright © 2013 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
- 38. Copyright © 2013 CommonsWare, LLC
Game Engines
● Android-Specific
– AndEngine, Box2D
● Cross-Platform
– Unity 3D, Cocos 2D, Corona, Havok, libGDX,
Proton
● Dozens of others
- 39. Copyright © 2013 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)
- 40. Copyright © 2013 CommonsWare, LLC
Other Cross-Platform Options
● Sencha
– Offers own PhoneGap-style hybrid engine for
use with SenchaTouch-based apps
● MoSync
– Another take on hybrid app engine
● Rhodes
– Web apps, but with Ruby “server”
- 41. Copyright © 2013 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
- 42. Copyright © 2013 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
– Specific verticals (e.g., restaurants) via
vertical-specific templates
– General “oh, we should have an app” firms
- 43. Copyright © 2013 CommonsWare, LLC
OK, So How
Do I Choose?
- 44. Copyright © 2013 CommonsWare, LLC
Who IsThe 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
- 45. Copyright © 2013 CommonsWare, LLC
What Does the User Use?
● Supplied Device?
– If so, and if Android, all options on the table
● BYOD?
– AndroidToday (think multi-native
implementation)
– AndroidTomorrow (think cross-platform)
– Android Forever (gain deep experience in one
area)
- 46. Copyright © 2013 CommonsWare, LLC
What DoYou Need?
● More Device-Centric, More Native
– Contacts?
– Camera?
– Background data syncing?
– Notifications?
● Simpler Requirements = More Flexibility in
Development Choice
- 47. Copyright © 2013 CommonsWare, LLC
What DoYou Know?
● All Else Equal, Pick a Gentle Learning Curve
– Unless learning is the objective...
– ...and all else may not be equal
● Benefits to Existing Experience
– Level of effort = time/expense budget
– Deadlines