Convert your web app into an Android app with Jetpack Compose and WebView
Reuse your web application in a native Android shell while handling navigation, communication, offline states, uploads, and downloads.
Practical guides about Kotlin, Jetpack Compose, architecture, and the ideas worth carrying into the next project.
Reuse your web application in a native Android shell while handling navigation, communication, offline states, uploads, and downloads.
Learn how Navigation 3 makes the back stack explicit state, enabling typed destinations, state restoration, and adaptive layouts in Compose.
Build responsive list-detail interfaces in Jetpack Compose by adapting to the current window size instead of the device type.
Embed Android's system photo picker in a Jetpack Compose UI while keeping URI permissions and selection state under your app's control.
Reduce unnecessary Jetpack Compose recompositions by deferring state reads, using derivedStateOf, and keeping parameters stable.
Use Android Dynamic App Links to update path, query-parameter, and exclusion rules from the server without shipping a new app version.
Use Jetpack Compose clipping, custom shapes, blend modes, and offscreen compositing to build polished avatars and fading edges.
Coordinate parent and child scroll gestures in Jetpack Compose with NestedScrollConnection and NestedScrollDispatcher.
Use movableContentOf and LookaheadScope to create shared-element-like transitions in Jetpack Compose.
Use Android's TrustedTime API for reliable, tamper-resistant timestamps in apps that depend on accurate timekeeping.
Use the CameraX Extensions API to add Night and Bokeh camera modes to Android apps.
Build a curved bottom navigation bar with a custom shape and floating action button in Jetpack Compose.
Learn how to create shared element and shared bounds transitions for Jetpack Compose content.
Add Ktlint to an Android project with Gradle and configure its formatting rules with EditorConfig.
Run Jetpack Compose UI tests on Firebase Test Lab using Fastlane and Android instrumentation tests.
Call Firebase Cloud Functions v2 from an Android app using the Firebase Functions SDK and Kotlin coroutines.
Build an Android app widget with Jetpack Glance and Jetpack Compose, including state and click actions.
Render 3D models in Android with Google's Filament rendering engine, Blender, and Jetpack Compose.
Recreate WhatsApp’s circular reveal animation in Jetpack Compose using custom shapes and cubic Bézier curves.
Follow the progress of building a language learning app with Jetpack Compose as it adds practice modes and Room persistence.
Recreate Google’s swipeable account switcher animation in Jetpack Compose.
Build a 24-hour time picker dialog in Jetpack Compose with a custom clock layout and interactive hour and minute selection.
Follow the progress of building a language learning app with Jetpack Compose as it adds practice improvements and its first usable version.
Follow the progress of building a language learning app with Jetpack Compose as it introduces subscribed decks and the first practice session.
Follow the progress of building a language learning app with Jetpack Compose as it adds architecture, navigation, repositories, and practice features.
Follow the first four days of building a language learning app with Jetpack Compose, from initial designs to creating decks and cards.
Lessons learned while building a small Minecraft mod after returning to programming through a side project.
Explore Cloud Firestore's internal architecture, including local persistence, mutation queues, listeners, and backend synchronization.
Explore how Firebase Crashlytics captures, persists, and uploads crash reports under the hood.
I've spent the last few weeks learning about compose and decided to write a post to share my notes. This post is not meant to teach you everything about Compose but rather it'll be more like a roadmap that you can use to learn Compose or to see what you still don't know about Compose.
Learn how structured concurrency and cancellation work in Kotlin coroutines.
Learn about Job and SupervisorJob and then proceed to creating Coroutines with launch and async.
"What’s CoroutineScope and CoroutineContext", "Do I need to switch the dispatcher?", "What is Structured Concurrency?", "How to handle cancellation?"
Learn how to implement Material motion transitions in Android, including fade, shared axis, and container transform animations.
Show a full-screen Android activity on the lock screen instead of a standard notification.
Understand gRPC for Android, including HTTP/2, channels, protocol buffers, retries, and streaming RPCs.
Useful Kotlin extension functions and properties for reducing boilerplate in Android applications.
Explore context receivers, improved type inference, and coroutine improvements in Kotlin 2.0 for Android development.