DEV Community

Abdullah Yasir
Abdullah Yasir

Posted on • Edited on

Flutter Development Setup for WSL2 + Windows Android Studio (Complete Guide)

Flutter + Android + WSL2 Arch Overview

If you love using WSL2 for development but also need Android Studio on Windows β€” this guide is for you.

This setup runs Flutter (via FVM) natively inside WSL2, while all Android tools (SDK, Studio, emulators) stay on Windows.

After a lot of trial and error, I documented this configuration that works perfectly β€” Flutter builds, devices connect, and Gradle behaves nicely.


🧠 Overview

We’ll be combining the best of both worlds:

  • WSL2 (Ubuntu) β†’ Flutter, FVM, Java, Gradle
  • Windows β†’ Android Studio, Android SDK, emulators
  • Wrapper scripts β†’ To bridge WSL2 and Windows SDK tools seamlessly

βš™οΈ Environment Configuration (~/.bashrc)

Android SDK (on Windows)

Your Android SDK lives here:


/mnt/c/Users/<your_windows_username>/AppData/Local/Android/Sdk

Enter fullscreen mode Exit fullscreen mode

Set the following environment variables:

  • ANDROID_HOME and ANDROID_SDK_ROOT β†’ point to that SDK path
  • Add Android tools (cmdline-tools, emulator) to your PATH

Java (WSL2 native)

We’ll use OpenJDK 17 installed inside WSL2:


JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64

Enter fullscreen mode Exit fullscreen mode

Add its bin folder to your PATH.

Flutter (via FVM)

Add your FVM-managed Flutter to PATH and set the Dart PUB_CACHE:


~/fvm/default/bin

Enter fullscreen mode Exit fullscreen mode

🧩 Wrapper Scripts (~/bin/)

Since WSL2 can’t directly execute .exe files from Linux PATH, we’ll create small bash wrapper scripts to call the Windows versions transparently.


~/bin/adb       β†’ wraps adb.exe
~/bin/aapt      β†’ wraps aapt.exe
~/bin/aapt2     β†’ wraps aapt2.exe
~/bin/zipalign  β†’ wraps zipalign.exe

Enter fullscreen mode Exit fullscreen mode

πŸ’‘ Java wrappers are not needed β€” we’re using native WSL2 Java.


πŸ› οΈ Android SDK Build Tools

We’ll make Windows executables appear Linux-friendly.

Go to:


/mnt/c/Users/<your_windows_username>/AppData/Local/Android/Sdk/build-tools/36.1.0/

Enter fullscreen mode Exit fullscreen mode

Then copy and symlink the essential build tools as shown below.


πŸͺ„ Flutter Configuration

Tell Flutter to use WSL2’s Java:

flutter config --jdk-dir "/usr/lib/jvm/java-17-openjdk-amd64"
Enter fullscreen mode Exit fullscreen mode

Project files will still reference the Windows SDK path (which is fine).


🧰 Step-by-Step Setup Guide

Step 1 β€” Install Prerequisites

sudo apt update
sudo apt install -y openjdk-17-jdk openjdk-17-jre
java -version
Enter fullscreen mode Exit fullscreen mode

Step 2 β€” Install FVM and Flutter

Install FVM (see docs):

fvm install stable
fvm global stable
Enter fullscreen mode Exit fullscreen mode

Step 3 β€” Configure ~/.bashrc

Append the following block:

# --- Android SDK + Flutter Development (WSL2 with Windows Android Studio)

# User bin (for wrappers like adb)
export PATH="$HOME/bin:$PATH"

# Android SDK (Windows)
export ANDROID_HOME=/mnt/c/Users/<your_windows_username>/AppData/Local/Android/Sdk
export ANDROID_SDK_ROOT=$ANDROID_HOME

# WSL2 native Java (OpenJDK 17)
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH

# Add Android tools
export PATH="$PATH:$ANDROID_HOME/cmdline-tools/latest/bin"
export PATH="$PATH:$ANDROID_HOME/emulator"

# Flutter (FVM)
export PATH="$HOME/fvm/default/bin:$PATH"
export PUB_CACHE="$HOME/.pub-cache"
export PATH="$PATH:$PUB_CACHE/bin"
Enter fullscreen mode Exit fullscreen mode

Step 4 β€” Create Wrapper Scripts

mkdir -p ~/bin

cat > ~/bin/adb << 'EOF'
#!/bin/bash
exec /mnt/c/Users/<your_windows_username>/AppData/Local/Android/Sdk/platform-tools/adb.exe "$@"
EOF

cat > ~/bin/aapt << 'EOF'
#!/bin/bash
exec /mnt/c/Users/<your_windows_username>/AppData/Local/Android/Sdk/build-tools/36.1.0/aapt.exe "$@"
EOF

cat > ~/bin/aapt2 << 'EOF'
#!/bin/bash
exec /mnt/c/Users/<your_windows_username>/AppData/Local/Android/Sdk/build-tools/36.1.0/aapt2.exe "$@"
EOF

cat > ~/bin/zipalign << 'EOF'
#!/bin/bash
exec /mnt/c/Users/<your_windows_username>/AppData/Local/Android/Sdk/build-tools/36.1.0/zipalign.exe "$@"
EOF

chmod +x ~/bin/adb ~/bin/aapt ~/bin/aapt2 ~/bin/zipalign
Enter fullscreen mode Exit fullscreen mode

Step 5 β€” Copy Android Build Tools

cd /mnt/c/Users/<your_windows_username>/AppData/Local/Android/Sdk/build-tools/36.1.0/
cmd.exe /c "copy aapt.exe aapt"
cmd.exe /c "copy aapt2.exe aapt2"
cmd.exe /c "copy zipalign.exe zipalign"
cmd.exe /c "copy aidl.exe aidl"
Enter fullscreen mode Exit fullscreen mode

Step 6 β€” Create ADB Symlink

ln -s ~/bin/adb /mnt/c/Users/<your_windows_username>/AppData/Local/Android/Sdk/platform-tools/adb
Enter fullscreen mode Exit fullscreen mode

Step 7 β€” Configure Flutter

flutter config --jdk-dir "/usr/lib/jvm/java-17-openjdk-amd64"
Enter fullscreen mode Exit fullscreen mode

Step 8 β€” Reload and Verify

source ~/.bashrc
flutter doctor -v
Enter fullscreen mode Exit fullscreen mode

🧱 Project Configuration

android/local.properties

Make sure it uses Windows path format:

sdk.dir=C:\\Users\\<your_windows_username>\\AppData\\Local\\Android\\Sdk
Enter fullscreen mode Exit fullscreen mode

βœ… Expected flutter doctor Output

Component Status Notes
Flutter βœ… Fully functional
Android toolchain ⚠️ Minor warnings are fine
Chrome ❌ Optional (for web)
Linux toolchain ❌ Optional (for desktop)
Android Studio ⚠️ β€œNot installed” β€” totally normal (it’s on Windows)
Connected devices βœ… Works fine
Network resources βœ… All good

πŸ—οΈ Architecture Overview

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         WSL2 (Ubuntu)               β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”‚
β”‚  β”‚ Flutter (FVM)             β”‚      β”‚
β”‚  β”‚ Java (OpenJDK 17)         β”‚      β”‚
β”‚  β”‚ Gradle                    β”‚      β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚
β”‚            ↓                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”‚
β”‚  β”‚ Wrappers (~/bin/)         β”‚      β”‚
β”‚  β”‚ - adb, aapt, aapt2, etc   β”‚      β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚
β”‚            ↓                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚    Windows Host                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”‚
β”‚  β”‚ Android SDK               β”‚      β”‚
β”‚  β”‚ Android Studio            β”‚      β”‚
β”‚  β”‚ Emulators/Devices         β”‚      β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Enter fullscreen mode Exit fullscreen mode

πŸ“‚ Files Modified or Created

File Purpose
~/.bashrc Environment config
~/bin/adb, ~/bin/aapt, etc. Wrapper scripts
android/local.properties Windows SDK path

🧩 Troubleshooting

Problem: JAVA_HOME invalid
βœ… Solution:

java -version
flutter config --jdk-dir "/usr/lib/jvm/java-17-openjdk-amd64"
Enter fullscreen mode Exit fullscreen mode

Problem: ADB not finding devices
βœ… Solution:

adb kill-server && adb start-server
Enter fullscreen mode Exit fullscreen mode

Problem: Gradle build fails
βœ… Solution:

flutter clean
rm -rf android/.gradle
Enter fullscreen mode Exit fullscreen mode

βœ… That’s it!

Your Flutter + WSL2 setup is now fully functional.
No more Gradle confusion or path issues β€” just smooth, native Flutter builds in WSL2 with Android Studio staying comfortably on Windows.

Top comments (0)