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 (1)
Thank you for the guide!
Though it's not entirely clear how to configure Android Studio itself in the end. Please share the details.