A Practical Guide to Google Perfetto: Why, Setup, Recording, and Deep Trace Analysis

If you have ever spent hours debugging a mysterious UI frame drop, an unpredictable app startup delay, or high CPU utilization, you know that log statements and simple timers only tell half the story. Modern operating systems and apps are deeply asynchronous. A lag spike in your app’s main thread could be caused by garbage collection, lock contention, CPU frequency throttling, or another background process starving your app of CPU cycles. ...

September 1, 2026 · Updated: September 14, 2026 · 9 min

Android Resources

Official Docs doc Android Developer Docs Official Android documentation developer.android.com/docs ↗ doc Jetpack Compose Docs Official Compose reference and guides developer.android.com/jetpack/compose/documentation ↗ Playlists Articles Tools tool Android Studio Official IDE for Android development developer.android.com/studio ↗

August 15, 2026 · 1 min

Building a Reusable Speech-to-Text Component in Jetpack Compose

TL;DR - Why You Should Add Voice Input Voice input can dramatically improve UX, yet most apps don’t use it. Here’s why you should: ✅ Zero app size increase - Uses Android’s native speech recognition (no libraries!) ✅ No permissions required - Works out of the box ✅ 3-5x faster input - Users can speak 150+ words/min vs typing 40 words/min ✅ Better accessibility - Essential for users with motor impairments ✅ Reduces friction - One tap vs multiple keyboard interactions ✅ Professional polish - Shows attention to UX details ...

February 12, 2026 · Updated: April 24, 2026 · 16 min

Android ML Kit Document Scanner: Stop Using Camera Capture for Documents

TL;DR - Why ML Kit Document Scanner Changes Everything Stop building custom camera UIs for document capture. ML Kit Document Scanner gives you a professional, AI-powered document scanning experience with just a few lines of code: ✅ Automatic edge detection - AI finds document boundaries instantly ✅ Perspective correction - Automatically straightens skewed documents ✅ Shadow removal - Intelligent lighting correction ✅ Multi-page support - Scan multiple pages in one session ✅ Quality enhancement - Auto-adjusts contrast and brightness ✅ Minimal code - 10 lines vs 500+ for custom implementation ✅ Small library size - ~3MB vs building from scratch ...

February 10, 2026 · Updated: April 24, 2026 · 10 min

Staying Relevant with Claude Code - A Self-Note for Android & KMP Developers

A Quick Disclaimer This article is primarily a self-note that I keep updating as I learn more about Claude Code. The AI tooling landscape evolves rapidly, so some information might be outdated by the time you read this. If you find something that needs updating, feel free to reach out! Whether you’re a junior developer just getting started or a senior developer looking to boost your workflow, Claude Code has something for everyone. ...

January 9, 2026 · 10 min

Clickable Links in Jetpack Compose: AnnotatedString with Custom URL Handler

While building the onboarding screen for my app, I needed a simple text that read something like this: The green hyperlinks are clickable Pretty straightforward, right? Just a bit of text with two clickable links — Privacy Policy and Terms of Service. But as I started implementing it, I realized: there isn’t a single complete guide explaining how to make part of a text clickable using AnnotatedString in Jetpack Compose — especially with the new LinkAnnotation API and a custom URL handler for better control. ...

November 11, 2025 · Updated: November 16, 2025 · 5 min

Mastering Raw Queries in Room: Why, When & When Not to Use Them (#OF06)

In the previous article, we explored the power and flexibility of DAOs with Room’s built-in query annotations. But what if your query needs don’t fit into Room’s constraints? Enter @RawQuery – the most flexible and dangerous tool in the Room arsenal. Let’s dive into what @RawQuery is, when it shines and shuns. What is @RawQuery? @RawQuery allows you to execute SQL statements that aren’t validated at compile time. Unlike @Query, which Room parses and validates during compilation, raw queries are evaluated at runtime. ...

May 25, 2025 · Updated: May 26, 2025 · 5 min

DAO: The Backbone of Offline-First Apps (#OF05)

In our previous article, we covered Entities in Room. Now, let’s explore DAOs (Data Access Objects) – the bridge between your app and the database. DAOs allow you to execute queries that allow is to insert, update, and delete records efficiently and thats exactly what we are going to explore today. What is a DAO? A DAO is an interface annotated with @Dao that defines methods for interacting with the database. The Room compiler generates the necessary implementation for these interfaces and its methods, which enables us to access the database efficient and type safe. ...

March 9, 2025 · Updated: April 24, 2025 · 7 min

Room Entity and its intricacies (#OF04)

In our previous article, we explored the key components of Room. Now, let’s take a deep dive into Room Entities, their importance, and the various ways to customize them. Entities are the foundation of Room—they define how your data is stored in the database. Properly structuring your entity ensures efficient querying, maintainability, and scalability. Let’s break it down! 🛠️ 🏗️ What is an Entity? An Entity in Room represents a table in the database. Each instance of the entity corresponds to a row in the table, Room generates corresponding SQL table schema based on how you create an entity class. ...

March 2, 2025 · Updated: April 22, 2025 · 10 min

Key Components of Room & Manually Creating A Database Instance(#OF03)

👋 Intro On the previous article we have set-up the Room dependencies and plugins, Now lets get into the primary key components of a room library. There are three important components: Entity, DAO’s, and Database. Entity represents a single row of a table. (Table structure) DAO’s (Data Access Objects) are interfaces to write queries and define operations. Database is where you associate entities and include the DAO’s you’d like to access from outside. Let’s check it out one by one! 🔍 ...

February 22, 2025 · Updated: April 22, 2025 · 5 min