Today we're releasing two essential resources for Android devs: Official Android skills and Android CLI!
📑 Android Skills (github.com/android/skills) fill gaps when state-of-the-art models don't have enough training data. We're focusing on hard migrations, niche APIs, performance, etc.
Posts by Catalin P
Credential Manager and Passkeys on Android: Passwords Are Dead, Here’s What’s Next
What Is Android Credential Manager? Android Credential Manager is the new unified authentication framework that replaces the aging SmartLock and Autofill APIs. If you've been relying on those legacy systems, now's…
Using MediaPipe LLM Inference API in an Android App
What Is MediaPipe LLM Inference? If you're building an Android app that needs to run large language models (LLMs) on-device, MediaPipe LLM Inference API is one of the most accessible ways to get there. It handles model loading, quantisation, and…
Predictive Back Gesture on Android: Migrate Your App Before It Breaks
What Is the Predictive Back Gesture? Android 13 introduced the predictive back gesture — a system-wide feature that lets users preview their navigation destination by long-pressing the back button before fully committing to the…
AI-Powered Crash Triage: Feeding Stack Traces to LLMs for Faster Fixes
The Stack Trace Triage Problem Every app that ships crashes. Users hit unexpected states, device configurations trigger edge cases, third-party libraries fail in mysterious ways. When a crash report lands in Firebase…
Baseline Profiles and Macrobenchmark: Measure and Ship a Faster Android App
Why Your App Feels Slow on First Launch You've optimized your layouts, trimmed your dependency graph, and profiled your Compose recompositions. Yet users still report that your app feels sluggish the first time they open…
Compose Multiplatform in 2026: Sharing UI Between Android and iOS
From Shared Logic to Shared UI If you've been following the Kotlin Multiplatform story, you've probably already shared networking with Ktor in a KMP shared module and persistence with SQLDelight across platforms. The next logical…
Structured AI Development for Android: A Complete Workflow from Design to Play Store
Why Unstructured AI Coding Fails for Android Projects You open your AI coding agent, type "add a settings screen with dark mode toggle," and the agent immediately starts writing code. Three minutes later, it's…
Running Gemini Nano On-Device: Your First Android AI Feature Without a Server
Why On-Device AI Matters for Android Developers Every AI feature you ship today probably depends on a network call. The user types something, your app hits an API, waits for a response, and displays the result. It works,…
Android Code Review Workflow With Claude Code: Catch Bugs Before Your Teammates Do
The Gap That Claude Code Fills in Code Review Code review is one of the most valuable things a team does — and one of the most time-consuming. Reviewers catch real bugs, but they also spend energy on things that…
Kotlin Contracts: Teach Your Compiler About Your Function’s Behavior
What Are Kotlin Contracts? If you've worked with Kotlin for a while, you've likely encountered functions from the standard library that seem to have almost magical powers. Take require() and check()—call them with a condition,…
I Keep Seeing the Same Problem in YouTube Live Streams, So I Built a Small Tool
A Pattern I Noticed Over Time Every now and then I watch a YouTube live stream. Not regularly — maybe a few times a month when I'm in the mood and someone I follow happens to be live. Could be a coding session, a Q&A,…
Dynamic Theme Your App with Android WallpaperColors API
What Is the WallpaperColors API? Android 8.1 (API 27) introduced the WallpaperColors API, and it remains one of the most underrated tools for building personalized Android experiences. It lets you extract the dominant, secondary, and tertiary…
Type-Safe Zero-Cost Wrappers with Kotlin Value Classes
The Problem: Primitive Obsession You've probably seen this pattern in production code: database IDs represented as Long, user emails as String, currency amounts as Double. On the surface, it's simple and pragmatic. But it introduces a subtle…
Android Keyboard Animation: WindowInsetsAnimation API for Smooth IME Transitions
Why Android Keyboard Animation Matters When your app shows a text input and the soft keyboard slides up, that moment sets the tone for user experience. A jarring jump or a laggy animation feels cheap. A smooth,…
Android Choreographer API: Frame Timing, VSYNC, and Smooth 60fps Rendering
What Is the Choreographer API? The Choreographer API is Android's internal frame timing system — the heartbeat of smooth animation. Every frame your app draws, the Choreographer orchestrates the timing. It synchronizes with…
LLM Prompts for Code Refactoring: A Practical Guide
LLM Prompts for Code Refactoring: Structuring Your Requests When you're facing a large refactoring task in your Android codebase, asking an LLM the right way can save you hours. Unlike simple coding questions, refactoring requires your AI…
Generate Architecture Docs from Code with LLMs
Generate Architecture Documentation Automatically from Your Codebase You know the problem: your app's architecture documentation is either non-existent, wildly out of date, or buried in scattered wiki pages that nobody reads. By the time you onboard a…
Building a Day/Night Sky Gradient System for Android Live Wallpapers
Creating Realistic Sky Gradients That Change With the Sun When you look at a great live wallpaper, what makes it feel alive isn't just animation — it's the sky. A static blue-to-orange gradient at the top of your screen feels…
One HTTP Client for Android and iOS: Ktor 3 in a KMP Shared Module
The Networking Problem in KMP Projects Before Kotlin Multiplatform, Android had Retrofit and OkHttp while iOS had URLSession or Alamofire — two completely separate networking stacks, two sets of models to keep in sync, and twice…
expect and actual: The Mechanism That Makes Kotlin Multiplatform Tick
The Core Problem KMP Has to Solve Kotlin Multiplatform lets you share business logic across Android, iOS, desktop, and web — but each platform still has its own APIs. Android has Log, iOS has NSLog, Android has…
Kotlin Property Delegates You’re Probably Not Using: observable and vetoable
Why Property Delegates Often Go Unnoticed Most Kotlin developers know lazy — it's everywhere. You see it in Android ViewModels, dependency injection setups, and library code. But the standard library ships two more…
Building a Weather-Reactive Rendering Engine for Android Live Wallpapers
Making Your Wallpaper Respond to Real-World Weather A beautiful sky gradient is a good start, but what makes Seasons Live Wallpaper feel special is that it reacts to the actual weather outside your window. Rain particles…
Lazy Computation in Kotlin: The sequence Builder and How It Can Save Your Memory
The Hidden Cost of Eager Collections Kotlin's collection functions — map, filter, flatMap — are a joy to use. But they share one characteristic that can quietly hurt your app: they're eager. Each call processes the…
Rubber Duck Debugging with AI: Prompt Patterns for Effective Debugging
Rubber Duck Debugging with AI: The Modern Approach "Rubber duck debugging" is an old technique: you explain your bug to an inanimate object (a rubber duck), and in the process of explaining, you discover the problem yourself.…
Claude Code Skills for Android: Automate the Boilerplate You Write Every Day
What Skills Are in Claude Code Once you've used Claude Code for a while you'll notice you repeat the same prompts. "Create a new feature screen with a ViewModel and UiState." "Add a Room entity and DAO for this model."…
Seasons Live Wallpaper — A Living, Breathing Home Screen for Android
What If Your Wallpaper Knew the Weather? Most live wallpapers loop the same animation forever. They look nice for a day, then you forget they're even there. Seasons Live Wallpaper is different — it's a wallpaper that actually…
Writing Android Tests and Debugging With Claude Code: A Practical Workflow
The Part of Android Development "Nobody Enjoys" 😛 Writing tests and debugging are the two parts of Android development where most developers lose the most time. Tests feel like writing code twice, and debugging often means…
Stop Using mutableListOf + toList(): Meet Kotlin’s buildList, buildMap, and buildSet
A Familiar But Slightly Awkward Pattern If you've written Kotlin for a while, you've almost certainly written code like this: fun getActiveUsers(users: List): List { val result = mutableListOf() for (user in…
Spring is almost here 🌸
Cherry blossoms, a sky that shifts from dawn to dusk, real weather effects & touch drawing with petals — animated on your Android home screen.
Seasons Live Wallpaper — a living window to nature.
#Android #LiveWallpaper #Spring #AndroidApp youtu.be/_QWBN2BtBQY?...