Skip to content
Back to journal
FlutterAndroidAPKTechnical

Flutter Web to APK: 3 Ways to Convert Your Flutter Web App to Android

CCode2Native EngineeringEngineering team
2026-01-27

Flutter Web is impressive. A single codebase that runs in Chrome, Safari, and Edge with near-native performance. But there's a problem: app store users don't type URLs.

If your Flutter Web app is getting traction, you've probably heard the request: "Can we put this on the Play Store?" The answer is yes — but how you do it matters.

I've worked on Flutter projects ranging from simple dashboards to complex e-commerce apps. Here's what I've learned about the three main approaches.

Understanding Flutter Web vs Flutter Mobile

Before diving into options, let's clarify what "Flutter Web" actually is:

  • Flutter Mobile compiles Dart code to native ARM/x64 binaries using the Skia graphics engine.
  • Flutter Web compiles Dart code to JavaScript and renders via CanvasKit (WebGL) or HTML/CSS.

The same codebase, but completely different runtimes. This distinction is crucial because it determines which conversion path makes sense for your project.

💡 Key insight: If you built with Flutter, you already have mobile support. "Converting Flutter Web to APK" often means either compiling the existing code for Android or wrapping the web version — two very different things.

The 3 Approaches

ApproachTimePerformanceCostMaintenance
1. Native Flutter build1-4 hoursExcellent$0Unified
2. WebView wrapper10-30 minGood$0-50Separate
3. PWA wrapper (TWA)15-45 minGood$0Unified

Approach 1: Build Native Flutter Android

Native Flutter Build

RECOMMENDED

If your app was written in Flutter (not just deployed to Flutter Web), you already have everything you need to build a native Android app. This is almost always the right choice.

When to use this approach:

  • You have access to the Flutter source code
  • The app doesn't rely on web-only packages
  • You want the best possible performance
  • You plan to maintain both web and mobile long-term

Step-by-step:

# 1. Navigate to your Flutter project
cd my-flutter-app
# 2. Check if Android is enabled
flutter devices
# 3. If Android is missing, re-enable it
flutter create --platforms=android .
# 4. Resolve any platform-specific issues
flutter pub get
# 5. Build the APK
flutter build apk --release
# 6. Or build AAB for Play Store
flutter build appbundle --release

Your APK will be at build/app/outputs/flutter-apk/app-release.apk.

⚠️ Common issue: If you initialized your project as web-only (flutter create --platforms=web), you'll need to re-enable Android with flutter create --platforms=android .

Approach 2: WebView Wrapper

WebView Wrapper

If you don't have access to the Flutter source code (e.g., you only have the deployed URL) or if rebuilding for Android isn't feasible, you can wrap the web version in a native container.

When to use this approach:

  • You don't have access to the Flutter source code
  • The app uses web-only APIs that don't have mobile equivalents
  • You need to ship quickly and optimize later
  • You're building a prototype or MVP

Option A: Using Code2Native (Fastest)

1

Deploy your Flutter Web app

Run flutter build web and deploy to any hosting (Firebase, Vercel, Netlify, etc.)

2

Create project in Code2Native

Enter your deployed URL (e.g., https://myapp.web.app)

3

Build APK

Click build and download your APK in 2-3 minutes.

Option B: Using Capacitor (DIY)

# 1. Build Flutter Web
flutter build web --release
# 2. Create a wrapper project
mkdir wrapper && cd wrapper
npm init -y
npm install @capacitor/core @capacitor/cli @capacitor/android
# 3. Copy Flutter build output
cp -r ../build/web/* www/
# 4. Initialize Capacitor
npx cap init "My App" com.myapp.app --web-dir www
npx cap add android
npx cap sync
# 5. Build APK in Android Studio
npx cap open android

Approach 3: PWA Wrapper (TWA)

Trusted Web Activity (TWA)

If your Flutter Web app is configured as a Progressive Web App (PWA), you can wrap it in a Trusted Web Activity. This is Chrome rendering your web app in fullscreen without any browser UI.

When to use this approach:

  • Your Flutter Web app has a valid PWA manifest
  • You want automatic updates (when you deploy web, app updates instantly)
  • You don't need native-only features like biometrics

Step-by-step with PWABuilder:

1

Ensure your Flutter app is a valid PWA

Flutter Web includes a manifest.json by default. Verify it's complete at pwabuilder.com

2

Package with PWABuilder

Enter your URL, click "Package for stores", and download the Android package.

3

Set up Digital Asset Links

For TWA to work without a browser URL bar, you need to add an assetlinks.json file to your web host.

Performance Comparison

The three approaches differ mostly in what runs on the device — which is what decides startup time, bundle size, and whether the app works offline:

MetricNative FlutterWebView WrapperTWA
Cold start time~1.2s~2.5s~2.8s
APK size~18 MB~8 MB~2 MB
Scroll smoothness (60fps)
Offline supportPartial
Native featuresVia bridgeLimited

Which Approach Should You Choose?

You have Flutter source code

Native Flutter build. It's the best performance and you already have everything you need.

Need to ship in under an hour

WebView wrapper or TWA. Both can be done in 15-30 minutes.

Web-only dependencies or no source access

WebView wrapper. Wrapping the deployed URL is your only option.

Maximum PWA benefits (auto-updates)

TWA. Updates to your web deployment reflect instantly in the app.

Flutter Web-Specific Issues to Watch For

CanvasKit vs HTML renderer

Flutter Web defaults to CanvasKit (WebGL), which can cause issues in WebView on older Android devices. Consider forcing the HTML renderer for wrappers:flutter build web --web-renderer html

Slow initial load

Flutter Web bundles can be 1-2 MB, causing slow first loads on mobile networks. Enable gzip compression and consider using a CDN with aggressive caching.

Keyboard handling

Keyboard behavior in Flutter Web can be inconsistent in WebView containers. Test thoroughly on real devices, especially for forms and text input.

Need a quick wrapper for your Flutter Web app?

Code2Native can generate an Android APK from your Flutter Web URL in under 5 minutes. A free build credit is included — no credit card required.

C

Code2Native Engineering

Engineering team

Written by the Code2Native engineering team — the people who build and operate the cloud build pipeline.