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.
- What is
- How can we use
RecyclerView to replace
- What sorts of extra features do we get, beyond merely replacing some
- 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
- 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
- How do we use
- 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?
- 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?
- 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?
- 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?
- 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
- 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
- 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?