◉ANTIGRAVITY LABJP
Articles/App Development
▣ App Development/2026-07-18Advanced

After Compose-First: Choosing Which View Screens to Migrate, Ranked by Churn Instead of Count

Google has declared Android development Compose-first. Here is how I rank View-based screens for migration using git history rather than screen counts, with the scoring script I actually ran and the three places partial migration quietly duplicates state.

android30jetpack-compose4migration15antigravity464agents145

✦ Premium Article

When I read that Google had declared Android development Compose-first, the first thing on my mind was not the migration steps. It was the ordering.

My wallpaper apps still have View-based screens that have been running unchanged for years. Nothing is broken, so migration has always lost to "not right now." I have made that call many times myself.

But once new APIs and tooling are designed around Compose, the shape of the problem changes. The View side will not break. It just stops having room to grow. The cost of postponing does not spike; it accumulates quietly.

So: which screen goes first? That is the only question this article answers.

What Compose-first actually means for a small team

Compressed down to the part that hurts an indie developer, the declaration says this:

Your View-based screens will not break tomorrow. But the features arriving next will only arrive on one side.

That matters less for "should we migrate" and more for "when is the deadline." And the deadline is not something Google announces. It shows up locally, the moment the next feature you want to build requires a Compose-first API.

Which means migration priority comes from your own roadmap and your own change history — not from a blog post from Mountain View.

Counting screens tells you nothing

My first instinct was to count the View-based screens. It takes about one attempt to see why that fails.

Against a verification tree that mirrors my own layout (3 Activities, 1 Fragment, 1 DialogFragment, 1 settings screen — six screens total), scoring by View dependency alone produced this:

ScreenView dependency
MainActivity3
DetailFragment2
CategoryActivity2
PaywallDialog2
SettingsActivity2
AboutActivity2

Five of six screens tied. That is the expected outcome: dependency only measures how much View API a file touches. It cannot tell PaywallDialog, which sits directly on revenue, apart from AboutActivity, which users open once a year.

Rank by a metric that cannot separate things, and you end up with two options: migrate everything, or migrate nothing. I picked the second one for years, and now I understand why.

✦

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
✦You can turn a vague someday-we-will-migrate backlog into a specific decision about which screen to start on this week
✦You'll be able to run a churn-based scoring script against your own repository and get a ranked migration order out of it
✦You'll know the three places partial migration duplicates state, and how to set an exit line using staged rollout numbers
Secure payment via Stripe · Cancel anytime
✦

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Antigravity Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • ✦Copy-paste ready implementation code
  • ✦New advanced guides published daily
  • ✦$5/mo or $10 for lifetime access
View Membership →

Related Articles

▣ App Dev2026-09-10
When the iOS 27 Date Landed, the First File I Grepped Was AGENTS.md
iOS 27 and iPadOS 27 ship on September 14. Old version numbers linger in your source, but also in the files only your agent reads. Here is a script that counts both zones, plus the one line keyword search will never find.
▣ App Dev2026-09-04
The Five Days Between the iOS 27 RC and Release — I Check Init Order and Entitlement Restore Before Layout
A record of how I narrow the agent's search scope during the short window before an OS release — by launch path rather than by screen. Includes the audit script I run to catch consent and ads init ordering, entitlement restore gaps, and hardcoded size branches.
▣ App Dev2026-08-31
Why I took the show-or-not decision away from every dialog
A paywall prompt, a review request and a rewarded-ad confirmation landed on the same frame. Here is how I moved the show-or-not decision out of each dialog into a single gate, how I rewrote the agent instructions as invariants, and how a CI check keeps it that way.