Apps · Android
How we build an Android app for Google Play
We read Google Play's gates and measure demand before writing code, build a native Kotlin and Compose app, then look at it running: our worst defects were visible only on screen. Our first app is built but not published, and our own research says organic Play distribution will not carry it.
Updated
What this covers, and where our first app stands
This is how we built our first native Android app for Google Play: a practice app for the Romanian driving-theory exam, written in Kotlin with Jetpack Compose and sold as a one-time purchase. The method is packaged as a reusable skill. Account set-up, upload and the listing are covered by a separate launch kit our team already had.
The status: the app is built, a signed release bundle installs and runs on the emulator, and its privacy policy is published. It is not on Google Play. We chose an organisation developer account, which required a D-U-N-S number. At our last record the account existed, and identity, website and phone verification had to be completed before Google would let us create an app in it.
The honest context: after a structured research round in August, we concluded that organic Play distribution would not bring a small developer meaningful volume. We built this app anyway, as a deliberate bet on the one niche that passed our tests.
Step one: read the gates before the ideas
We read the platform's rules before generating ideas. Four gates shaped everything else.
1. Account type. A personal account created after 13 November 2023 needs 12 testers opted in continuously for 14 days in closed testing, plus a production-access questionnaire, for every app. Internal testers do not count and become ineligible for closed testing, and a release left in draft does not start the clock. Personal accounts are also barred from finance, health, VPN and government apps, and a monetised personal account publishes the owner's home address. Google labels the tester step "personal accounts only" but nowhere states outright that organisations are exempt, so we treat the exemption as unverified.
2. Irreversible choices. The account type cannot be converted later, the type of a payments profile can never be changed, and the package name is fixed after the first upload. We fixed the package name before building any bundle and check it inside the built file, not in the build script.
3. Repetitive content. Several apps on one account are allowed; near-identical ones are not, and reusing descriptions or screenshots across apps is named as a violation. Opening more accounts does not isolate the risk.
4. Accounts expire. Developer accounts can be closed for inactivity, and the warnings go to whichever inbox was registered, read or not. Someone now owns those notifications.
Step two: measure demand with our own scanner
Google Play's store pages can be read without an API key, and they carry more than the public download bucket: an exact download count, the star histogram, the in-app purchase range and the date of the last update. Our scanner reads them per locale. Two traps: the launch date is the first availability in the country you query, not the global launch, and ratings are per country. Scanning the Romanian market with US settings is worthless.
A niche counts as alive only if at least 3 apps have 100 or more reviews and make up at least 25% of the sample. The more important gate is rank yield: not "can we rank?" but "what does position N pay?" In one day it eliminated 43 of 45 candidate niches. A third gate is search volume: a vertical with no apps and no searches is not a gap; nobody searches because nobody buys.
We scanned 8 Romanian niches. Only 3 passed the demand test, and driving theory was the only one with proven payers, 11 of 14 apps selling in-app purchases, and 368,000 searches a month.
Step three: the native chassis
Signing is written straight into the Gradle build file, with a guard so that a machine without the secret still builds. The upload key goes into our secrets store, and "saved" is not "recoverable": we rebuild the key from the secret and compare checksums immediately, because a lost upload key means no further updates to that package, ever.
For a one-time purchase, every purchase is acknowledged, since Play refunds unacknowledged purchases after 3 days, and purchases are restored automatically at start-up, not only from a button; otherwise someone who reinstalls pays twice. From 31 August 2026 new apps must use Play Billing 8 or later. Its Kotlin extension would not compile with our Kotlin version, and the error looked like a mistake in our code, so we use the plain Java artefact. The reduced service-fee tier is not automatic either: it has to be enrolled in by hand in the console.
Two smaller rules: minified builds need their mapping file uploaded, or the first real crash report is unreadable; and we check the file we ship, not the build log, because Gradle once reported success and shipped the old binary.
Step four: run the app and look at it
We had built 506 questions, 51 road signs and 6 scenes without ever seeing the app run. The first emulator session found 6 defects. The worst cost money directly: free exams were counted when an exam finished, so pressing Back or abandoning an exam bypassed the paywall indefinitely. The rule now is to consume a limited resource at the start, never on the success path.
We drive the emulator by text, not coordinates. A small script reads the screen's accessibility tree and taps "the button that says X", because in Compose a longer question moves the buttons and a tap on coordinates read off a screenshot fails silently the second time.
Step five: content you can trust
The authority that runs the exam refused, in writing, to let us reuse its question bank, so we write our own questions from the public law. Generating legal content with a model failed in an instructive way: 352 draft questions contained 29 critical errors, 14 of which taught the opposite of the law. A legal-basis field the generator filled in was wrong in 16 of the 24 cases checked, so we deleted it: a provenance field nobody can validate automatically stops human checking exactly where it is needed. Validation by a human specialist remains mandatory before publication.
A quality gate with 5 heuristics runs after every import and fails the build: umbrella answers, the most frequent correct position, "the longest answer is correct", length bias per chapter in both directions, and runs of keys on one position. The first three came from asking how people cheat at the real exam. The longest answer was correct 54% of the time before the fix and 32% after; the gate then caught 20 questions in a row with the answer on A.
For illustrations, 220 of the 232 available road-sign drawings carried share-alike licences, which would have contaminated a paid product. The sign designs themselves are set by law, so we redraw them with a deterministic renderer rather than generative AI, and look at a contact sheet after every batch. Looking caught 8 of 18 scenes wrong in one batch, including a roundabout with a negative radius that was still a valid SVG.
The paywall sits on the differentiator. The official simulator is free by law and the market leader is free with no purchases, so the free tier is the complete experience at small volume, and what you pay for is the explanations. A disclaimer of non-affiliation with the authority sits on the main screen.
Where we were wrong, and the verdict on organic Play
Visibility on Play is real: an app 4 days old with zero installs ranked in the top 24. Volume is not. On queries where a new app can rank, 45% to 90% of the top 20 had zero reviews, and one app that had ranked first for 31 months collected 32 to 161 installs a month.
Our first recommendation rested on two recent entrants that appeared to grow organically through their own websites. Public ad transparency records showed that both had been buying install campaigns throughout. In the same niche and period, an app buying ads gained 19,564 installs a month and an organic one 1,904. Without that case, none of about 45 niches survived. A later search for a second Romanian app measured 56 clusters: the best flow in the store was 3,500 installs a month, against the 6,600 to 11,000 our target required.
Smaller errors: we described a free promotional channel that in fact requires traction far beyond ours.
Limits and checklist
Nothing here shows that the app will pass review, get installs or sell. It has not been reviewed. The exact download count our scanner reads is an undocumented internal field, good for an order of magnitude, not as a time series. Our content verifiers are models, not lawyers.
Checklist. Read the gates first; choose package name and account type deliberately; check rank yield and search volume before code; prove the upload key is recoverable; acknowledge and auto-restore purchases; check the shipped file; run the app and look; consume free uses at the start; gate any graded question bank; put the paywall where the free alternative stops; write down in advance the numbers that would make you stop.
Questions and answers
Should a small team pick a personal or an organisation Google Play developer account?
A small team should choose the Google Play account type deliberately, because the account type cannot be converted later. A personal account created after 13 November 2023 needs 12 testers opted in continuously for 14 days in closed testing for every app, is barred from finance, health, VPN and government apps, and publishes the owner's home address once monetised. Google never states outright that organisation accounts are exempt from the tester step, so treat that exemption as unverified.
How do you check whether an Android app niche has real demand before writing code?
Checking demand for an Android app niche starts with reading Google Play store pages per locale, which show an exact download count, the star histogram, the in-app purchase range and the last update date. A niche counts as alive only if at least 3 apps have 100 or more reviews and form at least 25% of the sample. Rank yield matters more: ask what a given position pays, not whether you can rank. Search volume is the third gate.
What can go wrong with in-app purchases in a paid Android app?
In-app purchases in a paid Android app fail quietly in several ways. Play refunds purchases that are not acknowledged within 3 days, so every purchase must be acknowledged. Purchases must be restored automatically at start-up, not only from a button, or someone who reinstalls pays twice. New apps must use Play Billing 8 or later from 31 August 2026, and the reduced service-fee tier has to be enrolled in by hand in the console.
Why test an Android app on an emulator if the code already compiles?
Testing an Android app on an emulator matters because the worst defects are often visible only on screen. One team built 506 questions, 51 road signs and 6 scenes without seeing the app run, and the first emulator session found 6 defects. The worst one let users bypass the paywall by pressing Back, because free exams were counted only when an exam finished. Driving the emulator by on-screen text rather than coordinates keeps automated taps reliable.
Can you use an AI model to write exam questions for a learning app?
Using an AI model to write legal exam questions needs strict human checking. In one case, 352 draft questions contained 29 critical errors, 14 of which taught the opposite of the law, and a generated legal-basis field was wrong in 16 of 24 checked cases, so the field was deleted. A quality gate with 5 heuristics, such as catching cases where the longest answer is correct, should run after every import, and a human specialist must validate before publication.
Will organic Google Play distribution bring a new app enough installs?
Organic Google Play distribution gives a new app visibility but rarely volume. An app 4 days old with zero installs ranked in the top 24, yet an app that had ranked first for 31 months collected only 32 to 161 installs a month. Two apps that seemed to grow organically had in fact been buying install campaigns throughout. The research concluded that organic Play distribution will not carry a small developer's app, so the first app remains built but not published.
How to cite this
Going Stellar (2026). How we build an Android app for Google Play. GOING STELLAR S.R.L..
https://goingstellar.ro/methods/how-we-build-an-android-app-for-google-play/