Kotlin and Android Development featuring Jetpack
Build Better, Safer Android Apps
by Michael Fazio
Start building native Android apps the modern way in Kotlin with
Jetpack’s expansive set of tools, libraries, and best practices. Learn
how to create efficient, resilient views with Fragments and share data
between the views with ViewModels. Use Room to persist valuable data
quickly, and avoid NullPointerExceptions and Java’s verbose expressions
with Kotlin. You can even handle asynchronous web service calls
elegantly with Kotlin coroutines. Achieve all of this and much more
while building two full-featured apps, following detailed, step-by-step
instructions.
With Kotlin and Jetpack, Android development is now smoother and more
enjoyable than ever before. Dive right in by developing two complete
Android apps.
With the first app, Penny Drop, you create a full game complete with
random die rolls, customizable rules, and AI opponents. Build
lightweight Fragment views with data binding, quickly and safely update
data with ViewModel classes, and handle all app navigation in a single
location. Use Kotlin with Android-specific Kotlin extensions to
efficiently write null-safe code without all the normal boilerplate
required for pre-Jetpack + Kotlin apps. Persist and retrieve data as
full objects with the Room library, then display that data with
ViewModels and list records in a RecyclerView.
Next, you create the official app for the Android Baseball League. It’s
a fake league but a real app, where you use what you learn in Penny Drop
and build up from there. Navigate all over the app via a Navigation
Drawer, including specific locations via Android App Links. Handle
asynchronous and web service calls with Kotlin coroutines, display that
data smoothly with the Paging library, and send notifications to a
user’s phone from your app.
Come build Android apps the modern way with Kotlin and Jetpack!
What You Need
You’ll need the Android SDK, a text editor, and either a real Android
device or emulator for testing. While not strictly required, it’s
assumed you’re using Android Studio, which comes with the Android SDK
and simplifies creating an emulator. Also, a few examples require JDK
1.8 or later, though all of these pieces can be completed in other ways
when using JDK 1.6.
Resources
Releases:
- P1.0 2021/06/13
- B7.0 2021/05/25
- B6.0 2021/03/21
- B5.0 2021/03/01
Preface
- Penny Drop
- Initialize the Penny Drop App
- How to Play Penny Drop
- Create the App
- What Else Do We Need?
- Summary and Next Steps
- Build Views with Fragments
- Build a Fragment (Pick Players)
- Add Data Binding to the App
- Build Another Fragment (Game)
- Summary and Next Steps
- Bind Data with ViewModels
- Create a ViewModel (Pick Players)
- Bind ViewModel to a Fragment (Pick Players)
- Add AI Spinner to Player List Items
- Customize the Player List Items
- Create Another ViewModel (Game)
- Bind ViewModel to a Fragment (Game)
- Summary and Next Steps
- Update LiveData with Conditional Game Logic
- Create GameHandler
- Start a Game
- More GameViewModel Functions: roll() and pass()
- Update the UI
- Create Turn Summary Text
- Handle AI Turns with Coroutines and First-Class Functions
- Summary and Next Steps
- Persist Game Data with Room
- Add Room to the App
- Add a RoomDatabase Class
- Create a DAO Class
- Add Entity Classes
- Add Data During Database Creation
- Add Converters to the Database
- Create a Repository Class
excerpt
- Access the Database from a ViewModel
- Update the UI Data Binding
- Summary and Next Steps
- Build a List with RecyclerView
- Add the RecyclerView
- Build the List Item Layout
- Create a Custom ListAdapter
excerpt
- Connect Adapter to RecyclerView
- Load Data into RecyclerView from Database
- Summary and Next Steps
- Customize an App with Settings and Themes
- Add a New SettingsFragment
- Use Saved Preferences
- Add Themes
- Change Themes
- Add Night Mode Support
- Add an About the App Section
- Summary and Next Steps
- Android Baseball League
- Initialize the Android Baseball League App
- Welcome to the Official ABL App
- Create the App
- Configure the Activity
- Add the First Fragment
- Summary and Next Steps
- Navigate via Navigation Drawer
- Add the Navigation Drawer
- Add Fragments (Standings and Single Team)
- Pass Data with Safe Args
- Navigate Directly via a Deep Link
- Summary and Next Steps
- Load and Save Data with Coroutines and Room
- Create a Database
- Work with Retrofit
- Load Data from External APIs
- Add a New Fragment (Scoreboard)
- Summary and Next Steps
- Display Data with Paging
- Add Two New Fragments (Leaders and Single Player)
- Add a New Fragment (Players)
- Handle Paging Data in the App
- Display Paging Data in a RecyclerView List
- Summary and Next Steps
- Personalize the Android Baseball League App
- Build a Settings Screen via Code
- Extract Colors with Palette
- Add and Group Additional Preferences
- Reliably Complete Background Work with WorkManager
- Summary and Next Steps
- Send Info to and from the Android Baseball League App
- Alert Users with Notifications
- Send Cloud-Based Alerts with Push Notifications
- Share Links with Android Sharesheet
- Summary and Next Steps
- Test Your App
- Unit Test Your App with JUnit
- Add Unit Tests
- Test a ViewModel Class
- Test a Data Access Object (DAO)
- Summary and Next Steps
- Test Your App’s UI with Espresso
- Add UI Tests
- Add More UI Tests
- Summary and Next Steps
- Appendixes
- Install Android Studio
- Download Android Studio
- Install Android Studio
- Set Up an Android Virtual Device (AVD)
- Troubleshooting Your App
- Debug Your App
- Display Messages with the Toast Class
- Log Messages to Logcat
- Wrapping Up
- Gradle Dependencies
- Classpath Dependencies
- Implementation Dependencies
- KAPT Dependencies
- Test Dependencies
Author
Michael Fazio is a software developer and tech speaker who fell in
love with Android starting with the original Galaxy S phone. He’s been
the Android lead for multiple billion-dollar companies and has seen the
Android development process evolve from far too many Activities and a
nigh unusable emulator to the actually enjoyable dev experience of
Kotlin + Jetpack.