Intermediate Android App Development Training

CommonsWare offers a five-day intermediate Android app development training to firms and other organizations. This course is designed to be a follow-on to the introductory course or for continuing education for existing Android developers.

Detailed Agenda

  • RecyclerView
    • What is RecyclerView?
    • How can we use RecyclerView to replace ListView and GridView?
    • What sorts of extra features do we get, beyond merely replacing some AdapterView classes?
    • What else is RecyclerView good for?
  • Custom Views
    • How do we write our own custom widget, as a reusable aggregation of other widgets?
    • How do we write our own custom widget, using lower-level drawing APIs?
    • How do we write our own custom ViewGroup?
  • Data Binding
    • What is the data binding framework?
    • How do we use the data binding framework to reduce our code complexity?
    • How do we use data binding for properties other than the ones directly supported by the framework?
  • Nav Drawer
    • What is a DrawerLayout, and how do we use it?
    • How do we set up an ActionBarDrawerToggle, and what are our alternatives?
    • What is a NavigationView, and how do we use it?
  • Accessibility and Focus Management
    • What are the basic steps for enabling accessibility in our Android apps?
    • What control do we have over the order in which views are navigated using arrow keys/D-pad/etc.?
    • How do we create custom accessibility support?
  • Advanced Preferences
    • How do we create custom preferences?
    • How do we dynamically populate a ListPreference?
    • How do we use MultiSelectListPreference?
  • Tasks
    • What is a task, exactly?
    • How do we launch activities into a new task, and why would we want to?
    • How do we control what task our activities are launched into?
    • Why is this so confusing?
  • Sharing Content
    • How do we share content with another app?
    • How do we control what apps can receive our content?
    • How do we find out what app the user chose to receive our content?
    • How do we receive shared content from another app?
  • Using an Event Bus
    • What is an event bus?
    • What role does an event bus serve?
    • How does an event bus relate to things like Rx?
    • What are the major event bus implementations, and what are their pros and cons?
  • Notifications
    • What is a notification?
    • How do we display a notification?
    • What is a foreground service, and how does it pertain to notifications?
    • What sorts of input do we get from users via notifications?
    • How do notifications interact with Android Wear?
  • Dealing with Different Hardware
    • How do we block distribution of our app to obviously incompatible hardware?
    • How do we identify and adapt at runtime to different types of hardware?
    • How do we deal with device- or OS version-specific bugs?
  • Multiple Screen/Window Sizes
    • How do we offer different layouts for different screen sizes?
    • What are some UI approaches that work well for varying screen sizes?
    • How do we offer different drawables for different screen sizes, and how does screen density relate?
    • How do we support split-screen modes on mobile devices?
  • Android on Chrome OS
    • What do we need to do to allow (or prevent) our app from being distributed to ChromeOS devices?
    • How do we support different window sizes, particularly freeform multi-window mode?
    • What do we need to do to support mice and keyboards well?
  • Drag-and-Drop
    • How do we designate content that can be dragged within an activity's UI?
    • How do we designate drop targets within an activity's UI?
    • How do we initiate drags, and how do we respond to drops?
    • How do we do this between windows in a multi-window environment?
  • Printing
    • How can we print a bitmap?
    • How can we print HTML content?
    • How can we print a PDF?
    • How can we print arbitrary stuff?
  • Doing Periodic Work
    • How do we arrange to get control periodically within an already-running app?
    • How do we arrange to get control periodically, even if our app is not already running?
    • What is Doze mode, and how does that affect our background periodic work?
    • What is app standby mode, and how does that affect our background periodic work?
  • Espresso
    • What is Espresso, and how do we set up a basic test?
    • How do we test across activities using Espresso?
    • How do we test more complex widgets, like ListView or RecyclerView?
  • Android Processes and Security
    • What are the various layers of the Android security model that affect developers?
    • How does Android use the Linux process model to help secure our apps?
    • What impacts does this model have on our ability to work with local files?
    • What is going on with removable media on Android, anyway?
  • Advanced Permissions
    • How do we defend our components using permissions?
    • How do we define custom permissions, and what are the problems with using them?
    • How do we find out when an app is installed, and how do we find out what permissions that app has requested?
  • App-Level Data Encryption
    • Why might we want to encrypt our local data?
    • What is SQLCipher for Android?
    • How can we use SQLCipher for Android as an encrypted replacement for standard SQLite?
    • How can we encrypt other sorts of files?
    • What about Facebook's Conceal library?
    • Where do we get our encryption passphrase from?
    • What is Android's keystore, and how can we use it to help with encrypting user data?
    • How can we use two-factor authentication, such as fingerprints, to tie into our encryption process?
  • Defending App APIs and UIs
    • What are our app's APIs?
    • When are components exported, and when are they not exported?
    • How do I secure my components with permissions?
    • How do I grant temporary access to my ContentProvider, while normally keeping it secured?
    • How can my components — or the components that my app talks to — be spoofed?
    • How can I check signatures of apps to determine if the partner app is what I think it is?
    • What was the tapjacking attack, and what is the activityjack attack?
    • What is the camera peeking attack?
    • How do I defend against screenshots?
    • How do I "defend" against AccessibilityService and NotificationListenerService implementations?
    • Why is the clipboard insecure?
  • Secure Network Access
    • How can I use SSL on Android?
    • Why might I want to use a self-signed certificate, and how can I use one on Android?
    • How can use SSL certificate authorities that Android does not recognize?
    • What is "pinning" with regards to SSL, and how can I employ it in Android?
    • What is "memorization" with regards to SSL, and how can I employ it in Android?
    • How can I deal with revoked SSL certificates, as we encountered with Heartbleed?
    • How do I integrate with Tor?
  • Device Administration
    • What is device administration?
    • How do I make my app be a device administrator?
    • What can I do given that I am a device administrator?
    • What is the "device owner" stuff that got added to Android 5.0?
    • What is the story around full-disk encryption on Android?
    • Can Android's full-disk encryption be defeated?