It Only Crashes in Release — Tracking Down When R8 Full Mode Broke My Gson Mapping
It works in debug but crashes only in release. This walks through the R8 full-mode pattern that breaks Gson reflection, how to reproduce it locally, deobfuscate the stack trace, and write the smallest keep rules that fix it.
Letting Users Switch the App's Language Without Touching Their Device Language — Notes on Android Per-App Language
How to implement in-app language switching on Android with AppCompatDelegate.setApplicationLocales and locales_config, plus the gotchas around pre-API-33 compatibility, activity recreation, and AdMob, from an implementation point of view.
Porting a Wallpaper Viewer's Slideshow and Page-Scrubber from iOS to Android — Where the Two-Way Sync with SnapHelper Tripped Me Up
A hands-on record of porting a full-screen wallpaper viewer's slideshow and bottom scrubber from iOS to Android. How I pinned down the current page with RecyclerView and SnapHelper, synced it two-way with the scrubber, and resolved the conflict between auto-advance and user input with a small state machine — in working Kotlin.
The Back Button Showed an Interstitial Sometimes, Not Others — Rewriting Nested ifs Into a List of Independent Guards
Interstitial display on back press was unstable because nested if statements hid the priority between conditions. Here is how I split it into reason-returning guards and generated tests from a decision table.
A Few Low-Density Phones Lost Their Bundled Wallpaper — The drawable vs nodpi Boundary in Play's Density Splits
App Bundle density splits will happily split images that should never be split, dropping a static resource on one density bucket only. Here is how I reproduced it with bundletool and fixed it by moving to drawable-nodpi or disabling density split — with the decision criteria.
Vetting AI Studio's Native Android Code Before It Reaches Your Live App
AI Studio's native Android vibe coding produces working screens at startling speed. But before it goes into a live app, it needs its own vetting. Here is a pre-merge review design for generated Kotlin.
Stop Dialogs From Stacking: One Gate for Paywalls, Review Prompts, and Rewarded Ads
A field record of curing the bug where a paywall, a review prompt, and a rewarded ad all surface at once, fixed with a single priority-based modal gate. I let an Antigravity agent sweep up the scattered show() calls, but kept the display policy in my own hands.
Handing Nightly Wallpaper Asset Updates to a Background Agent — Time Budgets, Duplicate Detection, and a Completion Gate
A reproducible account of handing nightly wallpaper asset updates to Antigravity's Background Agent. Covers how to write the task definition, perceptual-hash duplicate detection, one-pass resizing across 12 device profiles, a morning report you can review in five minutes, and the time-budget and completion-gate design that makes unattended runs safe.
Splitting Daily Crashlytics Triage Across Five Antigravity Sub-Agents
Running six indie iOS and Android apps, the morning Crashlytics triage was draining me. I split the workflow across five Antigravity sub-agents (Fetcher, Classifier, Repro, Patch, PR) and locked their input and output to JSON schemas. Two weeks of production data shows where the human review boundary belongs.
Android Theme Switch White Screen: Replacing Activity.recreate() with AppRestarter
A real fix for the white screen that appears when switching themes on Android. Covers why Activity.recreate() causes the issue, how AppRestarter.safeRestart() eliminates it, and a ModalGate pattern to prevent dialog conflicts after restart.
When Antigravity Fixes a RecyclerView Crash but Breaks Something Else — The Defensive Copy Solution
If RecyclerView IndexOutOfBoundsExceptions keep coming back after Antigravity's fix, shared list reference is likely the cause. Here's how to prompt Antigravity for the right fix and encode the pattern in AGENTS.md.
Integrating Antigravity Agents into My Android Release Workflow — 3 Months of Honest Findings
Three months of running Antigravity Agents inside my Android release flow: where crash diagnosis landed, where it missed, how I turned staged-rollout Go/No-Go into a threshold dialog, and the context checklist that decides diagnostic accuracy.