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
Set the following environment variables:
-
ANDROID_HOMEandANDROID_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
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
π§© 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
π‘ 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/
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"
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
Step 2 β Install FVM and Flutter
Install FVM (see docs):
fvm install stable
fvm global stable
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"
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
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"
Step 6 β Create ADB Symlink
ln -s ~/bin/adb /mnt/c/Users/<your_windows_username>/AppData/Local/Android/Sdk/platform-tools/adb
Step 7 β Configure Flutter
flutter config --jdk-dir "/usr/lib/jvm/java-17-openjdk-amd64"
Step 8 β Reload and Verify
source ~/.bashrc
flutter doctor -v
π§± Project Configuration
android/local.properties
Make sure it uses Windows path format:
sdk.dir=C:\\Users\\<your_windows_username>\\AppData\\Local\\Android\\Sdk
β
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 β β
β βββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββ
π 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"
Problem: ADB not finding devices
β
Solution:
adb kill-server && adb start-server
Problem: Gradle build fails
β
Solution:
flutter clean
rm -rf android/.gradle
β
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)