Build
Connect & operate
Design & teams
Start hereScope a build in one callBring a spec, a wireframe, or a paragraph. You leave with an architecture, a timeline, and a number.Book a scoping call
AI software
LLM & data systems
Vibe coding
Ready to ship?Put AI where the work isAgents, RAG, and private LLMs wired into the systems your team already uses — not a chatbot bolted to a homepage.Discuss an AI project
Domain firstWe learn your workflow before we model itRegulated, operational, or high-volume — the constraints belong in the schema, not in a training doc.Talk about your domain
Plan smarterEstimate before you commitCost ranges, scope templates, and the questions we ask in discovery — free, no form.Open the cost calculator
Real conversationsTalk with a technical leadNo SDR, no discovery gauntlet. The person on the call is the one who scopes the build.Book a call
Kotlin · Jetpack Compose · Play Store

Android app development,
built for the fragmentation the emulator won't show you.

Kotlin and Jetpack Compose, built and tested against the devices your users actually carry — not just a Pixel on a clean emulator image. Android's device landscape is wider than iOS's by design: dozens of manufacturers ship their own modifications to stock Android, with different defaults for battery optimization and background restrictions, and Play Store review checks data-safety declarations more literally than most first-time submitters expect. We build for that reality from the start, and we'll tell you plainly when the honest answer is a shared codebase covered on /mobile instead of a native Android build.

Talk to an Android developer How engagements work
Kotlin and Jetpack Compose, tested past the PixelPlay Store submission and staged rollouts handled end to endBuilt for next year's target SDK requirement, not just this one

6–10 wks

Typical Android MVP

One core workflow, Play Store submission included

100%

Senior engineers, US-based

No offshore handoff mid-build

Every sprint

A build you can install on a device

Not a status deck between milestones

100%

Code and Play Console account yours

From the first commit

The platform decision

Native Kotlin, or a cross-platform framework that reaches Android

This page is about the Android-specific case for going native. For the general native-vs-cross-platform question, /mobile covers React Native and Flutter in full — the short version for Android specifically is below.

Kotlin and Jetpack Compose

Google's own modern toolkit for Android UI, with first access to whatever the platform ships — Material 3 theming, widgets, foldable-aware layouts, Android Auto. The cost is a codebase that only targets Android, which is the right trade when the product needs a platform capability rather than a shared interface.

React Native for a shared iOS/Android codebase

One JavaScript codebase reaching both stores, with a native-module bridge for the pieces that need it. Suits teams already React-fluent and products where interface consistency across platforms matters more than squeezing the last frame out of the GPU. See /mobile for the fuller comparison.

Java in an existing codebase

Older Android apps still run substantial Java, and Kotlin interoperates with it in the same project — so the common path is incremental, with new features in Kotlin and legacy Java migrated as it's touched. A full rewrite is rarely the first move worth making.

Tablets, foldables, and large-screen Android

Android's large-screen guidelines cover phones, tablets, foldables, and Chromebooks from one adaptive layout when done with Compose's window-size classes. Skipping this is how an app ships looking like a stretched phone screen on a Samsung Fold or a Chromebook.

None of these decisions reverse cheaply. Discovering mid-project that a React Native app needs a native module for a capability the bridge doesn't expose is a smaller problem than discovering it needs one for every screen — which is why the platform decision belongs before the first sprint.

What's involved

Android engagement types

The variable that moves an Android build's scope isn't screen count — it's how much device and OEM coverage the app needs, and whether background work has to survive aggressive battery-management defaults on non-Pixel hardware.

EngagementCommitmentTimelineWhat's included
Android MVPFixed scope6 – 10 weeksOne core workflow, Kotlin/Compose, backend integration, and Play Store submission for the first release.
Full Android buildFixed scope12 – 18 weeksMultiple workflows, offline sync, push notifications, and device-fragmentation testing across major OEM skins.
React Native to native migrationFixed scope8 – 14 weeksRebuilding the Android side natively once a cross-platform build hits a ceiling a bridge layer can't clear.
Play Store rescue or policy fixFixed scope1 – 4 weeksA rejected or suspended listing diagnosed and fixed against Google's actual policy notice, not guesswork.
Large-screen and foldable adaptationFixed scope3 – 8 weeksAdaptive layouts for tablets, foldables, and Chromebooks added to an existing phone-only Android app.
Ongoing Android maintenanceOngoing retainerOngoingYearly OS upgrades, target SDK bumps Google requires, deprecated API replacement, and crash monitoring across device models.

Ranges assume US-based senior engineers and include QA across a representative device set, not just a flagship phone. A quote well under these bands is usually missing OEM-specific testing or the maintenance year that follows launch — that cost doesn't disappear, it just shows up later as a one-star review from a Samsung user.

Play Store review

Faster than Apple's review, and less forgiving on data

Play Store review often clears in hours rather than days, but it checks certain declarations more literally than Apple does, and it isn't a one-time event — every update goes through the same gate.

Data safety declarations are checked against the build

Google's data safety section asks exactly what the app collects and why, and a mismatch between what's declared and what the app actually does can get a build pulled after launch rather than before it. This is the single most common reason a first-time Android submission gets flagged.

Staged rollouts exist for exactly this reason

A phased rollout to a percentage of users — Google's native equivalent of Apple's TestFlight — catches the crash that only shows up on a specific device or Android version before it reaches everyone. Skipping it to save a few days is the most common cause of a one-star pile-up in week one.

Permission justifications get read, not skimmed

Requesting a permission the app doesn't clearly use — background location without a visible reason, for instance — is a common rejection trigger. Every permission request should map to a feature a reviewer can find in the app.

Target API level requirements are enforced on a schedule

Google requires new and updated apps to target a recent Android API level on a rolling yearly basis. An app that falls behind doesn't just miss new features — it can be blocked from receiving updates in the Play Store entirely.

Device fragmentation

The problem iOS mostly doesn't have

Apple ships a handful of device models a year. Android runs on thousands of device and OS combinations, and the manufacturer's own modifications matter as much as the Android version number.

OEM battery management is the top cause of "it works on my Pixel"

Samsung, Xiaomi, and other manufacturers ship aggressive battery-optimization defaults that can kill background work Android's own APIs promise will run. A sync job tested only on a Pixel can silently fail to fire on a Samsung device with default settings.

Android versions fragment differently than iOS versions do

Because manufacturers control update timelines, users can be on Android versions several releases behind current — unlike iOS, where adoption of the newest version is fast and broad. Supporting a realistic minimum API level, not just the newest one, is a deliberate scoping decision.

Screen sizes and aspect ratios vary more than on iOS

Between phones, foldables, and tablets, Android's screen-size range is wider than Apple's device lineup. Compose's adaptive layout tools handle this well when used from the start; retrofitting adaptive layouts onto a fixed-phone-size design later is a real rebuild.

A device lab beats a bigger emulator fleet

An emulator catches layout bugs; it doesn't catch OEM-specific background restrictions, real GPS drift, or thermal throttling. A short list of real devices — including at least one mid-range, non-Pixel phone — belongs in the test plan.

After launch

Android maintenance is a yearly requirement, not a courtesy

Google enforces target API level requirements on a schedule outside anyone's control, and shipping v1 is roughly half the lifetime cost of an Android app — the maintenance that follows is the other half.

Target SDK enforcement has real consequences

An app that doesn't target a current API level within Google's window can be blocked from accepting new installs or updates. This isn't a recommendation — it's a Play Store policy with an enforcement date.

Play Console ownership matters for the same reason App Store ownership does

The Google Play Console account, like the Apple Developer account, should be registered under your own organization so a change of vendor never blocks a routine update.

Crash and ANR monitoring catches what a device lab can't

Android Vitals in Play Console surfaces crash rates and Application Not Responding (ANR) events across your real install base, including devices you'll never own for testing. Watching it is cheap; ignoring it shows up as a Play Store ranking penalty.

Related

Related services

What Android projects usually connect to.

Questions

Common questions about Android development

What teams ask before a first call.

An Android developer designs and builds applications for the Android platform using Kotlin (or, in older codebases, Java) and the Android SDK, then tests them across the device and OS combinations real users carry — not just a single reference device. That includes wiring up backend integrations, handling offline behavior, and preparing the build for Play Store review.

On a team, an Android developer also owns the device-fragmentation problem specifically: making sure background work, permissions, and layouts hold up on hardware from manufacturers whose defaults differ from stock Android.

Not sure whether this needs to be native yet?

Thirty minutes with an Android engineer, before anything is scoped. You'll leave knowing whether Kotlin, React Native, or a smaller first release is the honest answer for your product, and what device coverage a real build actually needs — whether or not you build it with us.