A step-by-step guide for shipping a vibe-coded Flutter app to Google Play from a Windows machine — covering Flutter SDK installation, signing, and the full Play Store submission process.
If you're using Lunadeck, the build and signing steps (Parts 3–5) are handled for you automatically. This guide is for building and publishing locally, or for understanding what Lunadeck does under the hood.
What you'll need before starting:
A Windows 10 or Windows 11 computer (64-bit)
At least 10 GB of free disk space
At least 8 GB of RAM (16 GB recommended — the Android emulator is a memory hog)
A credit/debit card ($25 one-time Google Play fee)
Your exported Flutter project (ZIP from your AI coding tool, or a git clone)
About 2–4 hours for initial setup, then ~3 weeks for the publishing process
Part 1: Install the Required Tools
You need three things: Flutter SDK, Java (JDK 17), and Android Studio.
Extract the .zip to a folder without spaces in the path — for example C:\flutter or C:\dev\flutter. Do not install to C:\Program Files — the spaces cause issues with some tools.
# Example using PowerShell (or just use File Explorer > Extract All)Expand-Archive -Path "$env:USERPROFILE\Downloads\flutter_windows_*.zip" -DestinationPath "C:\flutter"
Step 3: Add Flutter to your PATH
Press Win + S, search for "Environment Variables", click "Edit the system environment variables"
Click "Environment Variables"
Under User variables, find Path, click Edit > New, and add: C:\flutter\bin
Click OK on everything
Close and reopen your terminal, then verify:
flutter --version
Step 4: Run flutter doctor
flutter doctor
flutter doctor lists everything Flutter needs and shows what's missing. Resolve any issues it reports before continuing.
1.3 Install Java (JDK 17)
Go to https://adoptium.net/ (Eclipse Temurin) and download the JDK 17 Windows .msi installer.
Run the installer. When prompted about custom setup, make sure "Set JAVA_HOME variable" is checked.
Accept the defaults and finish.
Verify in a new terminal:
java -version
If java is not recognized, set JAVA_HOME manually:
Pub resolution failure — a package version conflict. Read the error — it names the conflicting packages. Try flutter pub upgrade or adjust version constraints in pubspec.yaml.
Missing Flutter SDK version — run flutter upgrade to update to the latest stable.
2.4 Check your app configuration
Open pubspec.yaml and confirm the version field:
version: 1.0.0+1 # versionName+versionCode
Open android\app\build.gradle and check the applicationId:
applicationId is permanent. If it says com.example.myapp, change it now before your first Play Store upload.
Part 3: Test Your App
3.1 Run on an emulator
In Android Studio > Device Manager, create a virtual device (Pixel 7, API 34+). Start it, then:
flutter run
Emulator performance on Windows: Enable hardware virtualization in BIOS/UEFI (Intel VT-x or AMD-V), then enable Windows Hypervisor Platform in Windows Features (Settings > Apps > Optional features > More Windows features).
3.2 Run on a physical device
Enable Developer Options: Settings > About Phone > tap "Build Number" 7 times
Enable USB Debugging: Settings > Developer Options > USB Debugging
Connect via USB and accept the debugging prompt
Verify Flutter sees the device:
flutter devices
Then:
flutter run
3.3 Common issues
"No devices found" — check flutter devices. Make sure the emulator is fully booted. For a physical device, verify USB Debugging is on and you've accepted the debug prompt on the device.
Build fails with Gradle errors — try flutter clean before rebuilding. Read the full Gradle error output — it usually names the problem precisely.
Plugin errors — a Flutter plugin may require a minimum Android SDK version. Update minSdkVersion in android\app\build.gradle if needed.
Part 4: Prepare for Release
4.1 Set your app icon
Add the flutter_launcher_icons package to pubspec.yaml:
flutter pub getdart run flutter_native_splash:create
4.3 Update your app version
In pubspec.yaml:
version: 1.0.0+1# ^^^^^ versionName shown to users# ^ versionCode — must increment with each Play Store upload
4.4 Configure app permissions
In android\app\src\main\AndroidManifest.xml, inside <manifest>:
<!-- Internet access — required for most apps --><uses-permission android:name="android.permission.INTERNET" /><!-- Add only what your app actually uses: --><!-- <uses-permission android:name="android.permission.CAMERA" /> --><!-- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> -->
Personal accounts created after November 2023 require a device verification step. Install the Google Play Console mobile app on an Android device, sign in, and follow the verification steps.
Part 7: The Closed Testing Requirement
New personal developer accounts cannot publish directly to production. Google requires:
Uploading your app to a closed test track
Having at least 12 testers opted in
Those testers must remain opted in for 14 consecutive days
Only then can you apply for production access
7.1 Create your app listing
In Google Play Console, click Create app and work through all required sections:
Store listing — description, at least 2 screenshots, 1024×500 feature graphic, 512×512 icon, category, contact details
Content rating — complete the IARC questionnaire honestly
Target audience — do not select children unless your app specifically targets them
Privacy policy — required if your app collects any user data
7.2 Set up closed testing and upload your build
Go to Testing > Closed testing in the left sidebar
Create a tester email list with at least 12 Gmail addresses
Click Create new release, accept Play App Signing, upload your .aab
Add release notes and click Start rollout
Share the generated opt-in link with your testers — they must install the app on a real Android device
After 14 days with all testers opted in, apply for production access from the app Dashboard.
Part 8: Publish to Production
Once you have production access:
Production > Create new release
Upload your .aab, add release notes, select distribution countries
Click Start rollout to production
Part 9: Updating Your App
# 1. Make your code changes# 2. Increment the build number in pubspec.yaml# e.g., 1.0.0+1 → 1.0.0+2# 3. Rebuildflutter build appbundle --release# 4. Upload the new .aab in Google Play Console
Gradle build fails — run flutter clean then rebuild. Check the full error output — Gradle errors name the problem precisely.
App crashes at launch — run flutter run in debug mode and read the stack trace.
Emulator is extremely slow — enable hardware virtualization in BIOS/UEFI and enable Windows Hypervisor Platform in Windows Features.
Realistic Expectations
The timeline is longer than you expect. The 14-day testing requirement plus review means 3–4 weeks from start to live.
AI-generated Flutter code frequently has plugin issues. Flutter plugins often require minimum SDK versions or extra setup steps. Budget time for resolving them.
Google can reject your app. Common reasons: missing privacy policy, misleading store listing, or the app crashing during review.
Finding 12 testers is harder than it sounds. Start recruiting early. Developer communities on Discord and Reddit (r/flutterdev, r/androiddev, r/betatesting) organize tester exchanges.