Mobile Apps · MBC-24

Advanced Android Development with Kotlin

Advanced Android Development with Kotlin is a course in building native Android apps with Kotlin and Jetpack Compose, covering MVVM architecture, REST APIs, offline data with Room, QR code scanning, maps, Bluetooth and push notifications. It suits developers who have already built Android apps, students and teachers, and you leave able to publish an app on Google Play.

Updated
From 11,250 THB / person 12,500 −10% excl. VAT 7% · group rates available
PDFDownload the course outline
  • Duration18 hours · 3 days
  • FormatOnsite / live online
  • Next roundOn request
  • CertificateIncluded

Course overview

Native Android development has changed a great deal since the days of XML layouts, RecyclerView and fragments. Google now recommends building the UI with Jetpack Compose, writing code in Kotlin and following the Guide to App Architecture, which separates the UI layer from the data layer. Many examples online still rely on older libraries and patterns such as ZXing, Glide with views or hand-written SQLite, which makes them hard to apply to new apps.

This new edition is updated for Kotlin 2.4 and Jetpack Compose and moves from the basics to topics used in real projects: advanced Material 3, Navigation 3, lists with LazyColumn, MVVM with StateFlow and Hilt, REST APIs with Retrofit, image loading with Coil, offline data with Room, QR code scanning with ML Kit, Bluetooth Low Energy, maps with Maps Compose, push notifications, testing and publishing to Google Play. (3 days, 6 hours per day, 18 hours in total, Advanced level.)

What you’ll gain

  • Build advanced UIs with Jetpack Compose and Material 3, with Navigation 3
  • Structure apps with MVVM using ViewModel, StateFlow, repositories and Hilt
  • Connect to REST APIs with Retrofit and coroutines, and load images with Coil
  • Store data offline with Room and DataStore
  • Use the camera for QR codes, Bluetooth Low Energy, maps and push notifications
  • Write tests, tune performance and publish apps on Google Play

Who this course is for

  • Developers who have built Android apps and want to move to Jetpack Compose
  • Students and project teams whose apps must connect to a backend and use device hardware
  • Teachers, lecturers and trainers who teach Android and need current content
  • IT staff and development teams who maintain an organisation's Android apps

Prerequisites

  • Some experience building Android apps, with either XML layouts or Compose
  • Kotlin basics such as classes, lambdas and null safety
  • Basic app design and database knowledge
  • A Google account for creating a Firebase project, and an Android phone for testing (recommended)

Curriculum

Course Details

This course is a 2026 edition that replaces the previous Advanced Android Development with Kotlin course. It has been rewritten for Kotlin 2.4 and Jetpack Compose in place of XML layouts. It runs for 3 days, 6 hours per day (18 hours in total, 09:00-16:00), as lectures alternating with labs and workshops throughout. Advanced level. Learners build UIs with Compose and Material 3, structure apps with MVVM, StateFlow and Hilt, connect to REST APIs with Retrofit, store data offline with Room, scan QR codes with ML Kit, use Bluetooth Low Energy, maps and push notifications, and finish with testing and publishing on Google Play. They take home a lab guide and source code for every workshop.

Day 1 Advanced Compose, Navigation and Architecture

Section 1: Lab: Setting Up a Kotlin 2.4 and Compose Project

  • What has changed in modern Android: from XML layouts to Jetpack Compose
  • Create a project in Android Studio with the Gradle Kotlin DSL and a version catalog
  • Manage Compose library versions with the Compose BOM and use KSP instead of kapt
  • Kotlin 2.4 features used daily: data classes, sealed interfaces and coroutines
  • Lab: a starter project used throughout the course

Section 2: Lab: Advanced Jetpack Compose and Material 3

  • State, remember and state hoisting for testable, reusable composables
  • Material 3 theming with dynamic colour and a dark theme
  • Scaffold, TopAppBar, cards, dialogs and bottom sheets
  • Layouts that adapt to screen size with window size classes
  • Lab: a Material 3 product catalogue screen

Section 3: Lab: Navigation 3 with Bottom Navigation and a Drawer

  • Navigation 3 concepts: a back stack you control and NavDisplay
  • Type-safe routes and passing data between screens
  • A bottom navigation bar combined with a navigation drawer
  • Dynamic screen titles and back button handling
  • Lab: the app's main menu with bottom navigation and a drawer

Section 4: Lab: Lists with LazyColumn

  • LazyColumn and LazyVerticalGrid in place of RecyclerView and adapters
  • Item keys for performance and animations
  • Pull to refresh, empty states and loading states
  • Clickable items that open a detail screen
  • Lab: a product list with search and filters

Section 5: Lab: MVVM with StateFlow and Hilt

  • Separate the UI layer and data layer following the Guide to App Architecture
  • View models that expose UI state with StateFlow, collected with collectAsStateWithLifecycle
  • Repositories as the app's source of truth
  • Dependency injection with Hilt instead of hand-written ViewModel factories
  • Lab: refactor the product list into full MVVM
Day 2 REST APIs, Offline Data and the Camera

Section 6: Lab: A Sample REST API with ASP.NET Core and MySQL

  • Install the .NET LTS SDK and MySQL to run the sample project
  • Set up the instructor's REST API project on your own machine
  • Configure the database connection and test GET, POST, PUT and DELETE
  • Read the API documentation with OpenAPI and let the emulator app reach the API

Section 7: Lab: REST APIs with Retrofit and Coroutines

  • Set up Retrofit with OkHttp and parse JSON with kotlinx.serialization
  • Call APIs with suspend functions inside a repository
  • Handle loading, success and error in the UI state
  • Full CRUD, with care for Thai text, line breaks and special characters
  • Lab: list, add, edit and delete products through the API

Section 8: Lab: Loading Images with Coil

  • Image loading libraries for Compose and why we choose Coil
  • AsyncImage with placeholders, error images and crossfade
  • Circular cropping, resizing and ContentScale
  • Memory cache, disk cache and ImageLoader settings
  • Lab: product images in the list and detail screens

Section 9: Lab: Offline Data with Room and DataStore

  • DataStore for settings in place of SharedPreferences
  • Room entities, DAOs and databases that return Flow
  • Migrations when the schema changes, and schema export
  • An offline-first repository that reads from Room and syncs with the API
  • Inspect the database with Database Inspector and import or export data

Section 10: Lab: Scanning QR Codes and Barcodes with ML Kit

  • Common QR code and barcode formats, and generating QR codes
  • Google code scanner, which scans without the app requesting camera permission
  • ML Kit Barcode Scanning with CameraX for a custom scanning screen
  • Request camera permission in Compose and handle refusal
  • Lab: scan a product code and open its detail screen
Day 3 Bluetooth, Maps, Notifications and Google Play

Section 11: Lab: Bluetooth Low Energy (BLE)

  • BLE and GATT: services, characteristics and descriptors
  • BLUETOOTH_SCAN and BLUETOOTH_CONNECT permissions on recent Android versions
  • Scan for devices and connect to the ones found
  • Read, write and subscribe to notifications from a device
  • Lab: read values from a BLE device and show them in real time

Section 12: Lab: Maps and Location with Maps Compose

  • Get an API key from Google Maps Platform and restrict its use
  • Show a map with the GoogleMap composable, with markers and camera control
  • Get the current location with the Fused Location Provider
  • Geocoding and reverse geocoding
  • Lab: draw a polygon from coordinates and show nearby branches

Section 13: Lab: Push Notifications with Firebase Cloud Messaging

  • Connect the app to a Firebase project and get the FCM registration token
  • Receive messages with FirebaseMessagingService and onMessageReceived
  • Notification channels and the POST_NOTIFICATIONS permission
  • Open the related screen when the user taps a notification
  • Lab: send a promotion notification from the Firebase Console

Section 14: Testing, Performance and Publishing on Google Play

  • Unit tests for view models and Compose UI tests
  • Cut unnecessary recomposition and use Baseline Profiles
  • Shrink and protect code with R8 and check the app size
  • Create a keystore, build an Android App Bundle and use Play App Signing
  • Test through internal testing in the Play Console, with a security checklist before release

Section 15: Workshop: An End-to-End Inventory App Capstone

  • Design an app for the brief with Compose, MVVM and Hilt
  • Connect a REST API, Room and QR code scanning
  • Add maps or BLE and push notifications as the brief requires
  • Present your work, review the code together and plan next steps

Schedule & training options

For individuals — public rounds

No public rounds are open right now. Join the waiting list and we will contact you first when the next round opens, or ask us on LINE. Or call 02-570-8449 or 088-807-9770

For organisations — in-house / private

  • Tailor the content to your team’s tools and projects
  • Your dates, at your office or live online
  • Quotation with tax ID for procurement
Corporate training quote

Instructors

Frequently asked questions

What is MVVM in an Android app built with Jetpack Compose?

MVVM (Model-View-ViewModel) splits code into three parts. The model is the repository and data sources such as a REST API or Room. The view is the composable that displays data and handles user input. The view model prepares UI state for the screen through StateFlow and survives screen rotation. Composables read the state with collectAsStateWithLifecycle and send events back to the view model, which keeps responsibilities clear and code easy to test, with Hilt managing dependencies instead of hand-written factories.

How do you call a REST API in an Android app with Retrofit?

Add Retrofit and a JSON converter such as kotlinx.serialization, then create data classes that match the data the API returns. Write an interface with annotations such as @GET, @POST, @PUT and @DELETE, declaring each call as a suspend function. Build a Retrofit instance with the base URL and use it inside a repository. The view model calls the repository in viewModelScope and turns the result into UI state that tells the screen whether it is loading, succeeded or failed.

How do you add push notifications to Android with Firebase Cloud Messaging?

Create a Firebase project and connect the Android app to it. Get the device's FCM registration token and store it on your server. Write a class that extends FirebaseMessagingService and override onMessageReceived to receive messages and build a notification, which needs a notification channel, and on Android 13 and later you must first ask the user for the POST_NOTIFICATIONS permission. To open a related screen on tap, include the destination in the message data and pass it to the app's navigation.

Who is the Advanced Android Development with Kotlin course for, and what should I know beforehand?

It suits developers who have built Android apps and want to move to Jetpack Compose, students working on app projects, teachers who teach Android and teams that maintain an organisation's apps. You should have built some Android apps, with either XML layouts or Compose, and know Kotlin basics, app design and databases.

What will I be able to do after the Advanced Android Development with Kotlin course?

You will be able to build UIs with Jetpack Compose and Material 3, create bottom navigation and drawer menus with Navigation 3, structure apps with MVVM, StateFlow and Hilt, call REST APIs with Retrofit, load images with Coil, store data offline with Room and DataStore, scan QR codes with ML Kit, connect Bluetooth Low Energy devices, show maps, send push notifications and publish apps on Google Play. Participants who complete the training receive a Certificate of Completion with its own number, which can be verified online.

Can the Advanced Android Development with Kotlin course be run in-house for our team?

Yes. This course can be run in-house for your team, with examples adapted to your work, such as migrating existing XML screens to Compose or connecting the app to the APIs and Bluetooth devices your organisation uses. You can request a quotation from this page or contact us on LINE @itgenius or by phone on 02-570-8449.

Related articles

Articles are published in Thai.