Building a release with EAS
You'll learn to turn your Expo project into a real Android file with EAS Build, an APK to try on your phone and an AAB for Google Play.
Watch & read
Start with the required ones. The others are there when you need them.
Explanation
Your habit tracker runs in Expo Go. But Expo Go is a test tool. Your friends can't install "your app" from it, and Google Play can't accept it. You need a real Android file.
EAS Build is Expo's service that builds that file for you on its computers, in the cloud. You don't
need Android Studio or a powerful laptop. Think of a tailor: you give the measurements (your code and
app.json), they sew the shirt on their machine, and you get a link to collect it.
The first time, run these in your project folder:
npm install --global eas-clieas logineas build:configureeas build -p android --profile preview
eas build:configure creates a file called eas.json. It has three build profiles, like three
recipes:
development: a test build for developers. You don't need it yet.preview: a build to try on your own phone or share with friends.production: the build you upload to Google Play.
Android has two kinds of app file. An APK installs straight on a phone. An AAB (Android App
Bundle) is what Google Play wants. You can't install an AAB yourself. Google Play turns it into the right
APK for each phone. EAS makes an AAB by default, so for your own phone, add "buildType": "apk" to the
preview profile:
"preview": {"distribution": "internal","android": { "buildType": "apk" }}
The first build asks to make a keystore. Say yes. It is the secret key that proves an update comes from you. EAS keeps it safe on its servers.
Every app has two version numbers. version (like 1.0.0) is what people see. versionCode (1, 2,
3...) is a hidden whole number for Google Play. Every upload to Play needs a bigger versionCode.
Play won't take a versionCode it has already seen. The eas.json that eas build:configure makes
sets appVersionSource to remote and autoIncrement to true for production, so EAS adds one for
you on every production build.
The free plan is enough for this course. As of October 2026, expo.dev/pricing says it includes up to 15 Android builds, with low priority. The Expo docs say the free limits reset every month. A build can wait in a queue, sometimes 90 minutes or more at busy times, so start it and do something else.
People often build production first, send the .aab to a friend, and nothing opens. Use preview
with apk for phones, and production only for Google Play.
When you read build output, look for three things: which profile it used, the line with the build
details link, and at the end the link to your .apk or .aab. If it fails, open the build details link
and read the first red error in the logs.
Code tour
Click a line number with a ring to read the note for that line.
Practice
Short drills. Take your time and read the code before you answer.
1Google Play Console, Daily Habits, all uploads so far:23 version 1.0.0 versionCode 14 version 1.0.1 versionCode 25 version 1.1.0 versionCode 3 (uploaded, then you found a crash, never released)67// You fixed the crash. Your next upload is still version 1.1.0.
Quick check
3 questions. Each one explains itself after you answer.
- 1 / 3You want to install your habit tracker on your cousin's phone today. Which build do you make?
- 2 / 3Where do the
development,previewandproductionprofiles live? - 3 / 3The terminal says "Waiting for build to complete". You press Ctrl+C. What happens to the build?