Kivy Reloader in Windows WSL2 targeting Android devices¶
Instructions are done! Feel free to view the canva link and you will get a complete tutorial on setting up Windows and WSL2 to target Android devices.
Here you will learn how to set up WSL2 and prepare your Windows machine to develop Kivy apps for Android.
Then, you can continue the original Kivy Reloader on Linux tutorial and follow everything step by step within WSL2.
This is only required if you want to create a Kivy app for Android since Buildozer needs WSL2.
If you want to develop a Windows app ONLY with Kivy
If you want to develop a Windows app ONLY with Kivy, you do not need WSL2 and can follow the original Kivy Reloader on Windows tutorial step by step.
GitHub link¶
GitHub Repository for Kivy Reloader
Kivy Reloader Showcase Windows WSL2 Targeting Android¶
Prerequisites:
You need:
- A real Android phone
- USB cable
- Updated Windows 10 OR Windows 11
What you will install
- ✔️ VS Code on Windows with WSL extension
- ✔️ WSL2
- ✔️ Git in WSL2
- ✔️ pyenv in WSL2
- ✔️ python in WSL2
- ✔️ poetry in WSL2
- ✔️ scrcpy in WSL2
- scrcpy automatically installs ✔️ adb
- ✔️ Chocolatey in Windows
- ✔️ install scrcpy in Windows through Chocolatey
- (scrcpy automatically installs ✔️ adb on Windows as well)
- ✔️ install scrcpy in Windows through Chocolatey
- Optionally:
- ❓ VcXserv for native Windows look on WSL apps instead of WSLg
How to install WSL2¶
Microsoft instructions for installing WSL
Prerequisites:
You must be running Windows 10 version 2004 and higher (Build 19041 and higher) or Windows 11 to use the commands below. If you are on earlier versions please see the manual install page.
This tutorial assumes you have an updated Windows version 10 or Windows 11. If you do not, please update your Windows version and avoid suffering.
What is WSL2?
WSL means Windows Subsystem for Linux. This means that you can access the power of Linux and Windows running on the same machine.
In the Kivy for Android context, Buildozer is maintained by the core Kivy developers only on Linux builds targeting Android.
Buildozer is only tested with WSL2. (As of Aug 2024, does NOT work with WSL1)
Instead of making a new Linux partition, we will use the official Microsoft solution and enable WSL2.
How do I install WSL2?
Step 1: Open PowerShell or Command Prompt in Administrator mode
Step 2: Install WSL2 in Admin Powershell
- Execute this in your Admin PowerShell/CMD
$ wsl --install
(Step 2 Optional) Choose your Linux distribution
Step 2 (optional): Choose your Linux distribution
By default, wsl --install
installs Ubuntu. If you want another Linux distribution, you can see the list with:
$ wsl -l -o
You can then install the version you want with
$ wsl --install -d DistributionName
Step 3a Restart your machine
Step 3b Set your user info
- Reminder that in Linux, your keystrokes are recorded but NOT displayed with
*****
so be careful what you type in!
If you forget your Linux user/password (click this bar to open instructions)
- You have two options: official Microsoft WSL documentation
- OPTION 1: In Powershell:
$ wsl -u root
$ passwd <username>
You will be prompted to enter a new UNIX password and then confirm that password
Exit WSL in Powershell:
$ exit
-
OPTION 2: Manual backup and reset
-
If you forget your Linux user/password, make sure to back up your files and uninstall WSL2 and reinstall again, or else you will lose all your progress.
Step 4 Check that you are running WSL2
- In Command Prompt, type:
$ wsl -l -v
For Buildozer to work, you MUST use WSL2!
Step 5 Update your drivers
-
Check the section named “Installed driver for vGPU”
NVDIA driver example
-
Go on task manager and copy your GPU stats
-
For NVIDIA, you want to get the "Game Ready Driver" or "NVIDIA Studio Driver" (They are effectively the same, the "Game Ready Driver" updates more frequently to match big game releases.)
(Step 6 Optional) Further Reading
If you want to learn more:
Microsoft Guide to setting up WSL environment
Important notes:
-
File storage: TL:DR; files are accessed through both systems
-
For example, when storing your WSL project files:
-
Use the Linux file system directory to keep things pure Linux. You DO NOT want to keep Linux files on the Windows filesystem and Windows files in the Linux filesystem.
-
This is the Linux file system root directory:
£ \\wsl$\<DistroName>\home\<UserName>\Project
- This is the Windows file system that you access from WSL2:
£ /mnt/c/Users/<UserName>/Project$
or
£ C:\Users\<UserName>\Project
-
How to install Chocolatey¶
What is Chocolatey?
Chocolatey is a package manager for Windows. Chocolatey AVOIDS having MULTIPLE BROKEN INSTALLS OF SOFTWARE that happens when doing manual installs.
Chocolatey automatically adds installed programs to PATH.
Choco also uninstalls apps cleanly, no need to find an uninstall guide.
You also do not have to remember where you manually install software.
Also has the useful refreshenv
command so you don't have to keep reopening CMD/Powershell when you update PATH. Just type refreshenv
and PATH will automatically update.
Warning
If you can use Chocolatey for a package, you SHOULD.
How do I install Chocolatey?
Step 1 Check that Get-ExecutionPolicy is NOT Restricted
- Open PowerShell in Administrator mode
- Type:
$ Get-ExecutionPolicy
- If it returns
Restricted
, run:
$ Set-ExecutionPolicy Bypass -Scope Process
- Type
Y
and pressEnter
to accept.
Step 2 Install Chocolatey
- Run this command in your Admin PowerShell:
$ Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
Step 3 Wait for installation to complete
Step 4 Verify installation
- Type:
$ choco
OR
$ choco -?
Install scrcpy through Chocolatey¶
How do I Install scrcpy (Screen Copy) through Chocolatey?
-
Scrcpy lets you mirror your Android phone through desktop.
-
Scrcpy will also install
adb
for you! If you need to manually installadb
, the instructions are in the next section.
Step 1: Install scrcpy through Choco
- Type:
$ choco install scrcpy
- Type
Y
for "yes to all"
Step 1b: make sure adb (android debug bridge) got installed with scrcpy
- Type
adb
in Windows to confirmadb
installation:
$ adb
Step 2: make sure scrcpy is installed
- Open a new Command Prompt (or type
refreshenv
) and type:
$ scrcpy
- scrcpy should complain because your phone is not connected yet.
- If there are no errors, proceed to the next step!
How do I Install ADB (Android Debug Bridge) through Chocolatey?
scrcpy
should automatically install adb
for you, but if you need to install adb
manually, here are the steps to do it in Chocolatey
Step 1: Open PowerShell in Administrator mode
Step 2: Make sure choco is installed
- Type:
$ choco
OR
$ choco -?
Step 3: Install adb
- Type
$ choco install adb
- Type
Y
for "yes to all"
Step 4: Make sure adb is installed
- Open a new Command Prompt (or type
refreshenv
) and type:
$ adb
- If there are no errors, proceed to the next step!
Set up VSCode for WSL2¶
How do I set up VSCode for WSL2?
Step 1: Install VSCode for Windows
-
Defaults are good to use, just say yes to all defaults.
Step 1b: Install WSL Extension for VSCdoe
-
The WSL extension lets you code using your Windows VSCode and use the WSL virtual environment.
-
Select the Extensions icon
-
In extensions, type
WSL
-
Select
Install
Setting up your Ubuntu WSL2 Installation¶
Preparing your WSL2 install to handle Kivy projects
Next we will follow the Ubuntu installation on kivyschool.com with changes to make it work for WSL.
We will install these programs in WSL. Reminder that even if you have these programs installed in your host Windows, they will not be installed in your WSL Ubuntu side!
- Git
- pyenv
- Python
- poetry
How do I prepare WSL for Kivy projects?
These steps will be mostly the same as the Ubuntu install with a few notable exceptions, mainly the pyenv export so that WSL pyenv does not try to use the Windows pyenv.
WSL: Step 1: Update WSL, source ~/.bashrc and install Git¶
Step 1: How do I update WSL, source ~/.bashrc and install Git?
Step 1: Open WSL
- Press the
⊞
Windows key and typewsl
OR
- Open
Command Prompt
and typewsl
Step 1b: Update WSL
In your WSL terminal, make sure WSL is updated:
$ sudo apt-get update
note: The terminal is grey because WSL ubuntu-22.04 does not automatically source ~/.bashrc
but ubuntu-24.04 does automatically source ~/.bashrc
.
Step 1c: Source ~/.bashrc
- Run Bashrc file by typing:
$ bash
OR
$ source ~/.bashrc
Step 1d: check if Git is installed
$ git --version
If Git is not installed, install it.
$ sudo apt-get install git
Check if Git is installed again:
$ git --version
WSL: Step 2: Install Buildozer build dependencies¶
Step 2: How do I install Buildozer build dependencies?
Step 2: Install Buildozer build dependencies
Reference link: buildozer docs
$ sudo apt install zip unzip openjdk-17-jdk cmake autoconf libtool pkg-config build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev curl libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev libncurses5-dev
Optionally, you can also install the legacy library libtinfo5
(does not exist in Ubuntu 24.04 but does exist in Ubuntu 22 and Ubuntu 20)
$ sudo apt install libtinfo5
Quick library overview:
- zip/unzip: for zipping/unzipping, in case you don't have it.
- openjdk-17-jdk: for building with java
- autoconf: auto configure files
- libtool pkg-config build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev curl libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev: required for building with buildozer
- libncurses5, libtinfo5: legacy libraries (buildozer may work without these)
WSL2: Step 3: Install and Configure Pyenv¶
Step 1: How do I Install and Configure Pyenv?
Reference: Kivy School Ubuntu Installation
Step 3a: Install Pyenv
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
Step 3b: make Pyenv
$ cd ~/.pyenv && src/configure && make -C src
Step 3c: add pyenv to PATH
- Run the following commands on your terminal to add pyenv to your path
- The path is changed from the Ubuntu install because you need to prevent your WSL pyenv from trying to use pyenv on Windows.
- More Reading
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
User Report! On step "Step 3c: add pyenv to PATH"
From @Monochromatic:
On step "WSL2: Step 3: Install and Configure Pyenv" -> Step 3c: add pyenv to PATH
Whenever I would then try to source .bashrc
it would tell me something along the lines of "no permissions, line 73 in .bashrc"
After looking at the file and said line, it uses the variable $PWD that when I printed it, instead of giving me /home/[user name] it was giving root.
What the problem was: For whatever reason everytime I install WSL it always gets stuck at the command line window saying "This may take a few minutes.....", no matter how long I leave it, it never continues so after a while I just closed it and restarted the machine.
Turns out that Ubuntu was installed fine but since it stuck on that stage I never got to the stage where it prompts you to create a user.
So I created a user manually and I just did su [username]
everytime to log in my user. BUT, turns out that this doesn't change the $PWD
variable, so what I had to do was edit the /etc/wsl.conf file and add this at the start
$ [user]
$ default=[myusername]
I might have edited another file for permissions but I don't remember now.
Anyway, this is obviously not an error with the guide itself, just a sidenote for people that might encounter the same problem as me and don't know why they can't get past step 3. I still have no idea why the WSL installer is getting stuck at the same place everytime
Step 3d: check pyenv is installed
Close the terminal and open it again OR source ~/.bashrc
Do not forget this step or else you WILL see an error.
- Type
$ pyenv --version
- If you see something like
pyenv 2.3.14
, you have successfully installed Pyenv.
WSL2: Step 4: Install Python using Pyenv¶
Step 4: How do I Install Python using Pyenv?
Step 4: Install Python using Pyenv
- Type
pyenv install 3.10.9
(you can install any Python version you want)
$ pyenv install 3.10.9
Step 4b: check Python version
- Type
$ pyenv versions
- This will show you all the Python versions you have installed with Pyenv.
Step 4c: set global Python version
- Type
$ pyenv global 3.10.9
- This will set the global Python version to 3.10.9.
Step 4d: check global Python version
- Type
$ python --version
- If you see
Python 3.10.9
, you have successfully set the global Python version to 3.10.9.
WSL2: Step 5: Install and configure Poetry¶
Step 5: How do I install and configure Poetry?
Step 5a: Install Poetry
- Type to install Poetry:
$ curl -sSL https://install.python-poetry.org | python3 -
Step 5b: Add Poetry to PATH
- Type to add Poetry to PATH:
$ echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
Step 5c: check Poetry installation
Close the terminal and open it again OR source ~/.bashrc
Do not forget this step or else you WILL see an error.
- Type
$ poetry --version
- If you see something like Poetry version 1.4.0, you have successfully installed Poetry.
Step 5d: Poetry Configuration
- Type
$ poetry config virtualenvs.in-project true
- This will set the virtual environment to be created in the project folder.
Step 5e: Poetry Configuration
- Type
$ poetry config virtualenvs.create true
- This will set the virtual environment to be created automatically when you run
poetry install
.
WSL2: Step 6: Install latest scrcpy on WSL¶
Step 6: How do I install scrcpy on WSL?
Step 6: Install scrcpy on WSL
-
For Ubuntu at the time of writing, scrcpy from
apt
is not yet the latest version, so we have to get it manually. -
In WSL, type to install the required build packages:
$ # for Debian/Ubuntu
$ sudo apt install ffmpeg libsdl2-2.0-0 adb wget \
$ gcc git pkg-config meson ninja-build libsdl2-dev \
$ libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev \
$ libswresample-dev libusb-1.0-0 libusb-1.0-0-dev
- Next, cd to home directory:
$ cd ~
- Clone the repo and run the installer
$ git clone https://github.com/Genymobile/scrcpy
$ cd scrcpy
$ ./install_release.sh
To update or uninstall scrcpy on WSL:
-
To update:
-
cd to scrcpy folder (if you followed instructions it should be
cd ~/scrcpy
)
$ cd ~/scrcpy
- Then update repo and reinstall scrcpy.
$ git pull
$ ./install_release.sh
-
To uninstall:
-
cd to scrcpy folder (if you followed instructions it should be
cd ~/scrcpy
)
$ cd ~/scrcpy
- Run the uninstaller:
$ sudo ninja -Cbuild-auto uninstall
How do I install adb
on WSL?
scrcpy
should automatically install adb
for you, but if you need to install adb
manually, here are the steps to do it in WSL Ubuntu
How to install adb
- Type to install
adb
in WSL:
$ sudo apt-get install adb
-
This will install android debug tools (adb) in WSL.
-
Type to
adb
to check for proper installation:
$ adb
WSL2: Step 7 (OPTIONAL): Install and Configure VcXsrv¶
Step 7: Why should I Install and Configure VcXsrv for WSL?
WSLg is the default window provider.
-
PRO:
- Preinstalled with WSL
-
CON:
- It's ugly (subjective).
VcXsrv is basically a native window.
-
PRO:
- It looks good
-
CON:
- You might confuse Windows apps with WSL apps when developing
- More installation work
Step 7 (OPTIONAL): How do I Install and Configure VcXsrv for WSL?
Step 1: turn off WSLg
-
You need to turn off WSLg since it takes priority over VcXsrv
-
Make a
.wslconfig
file in%UserProfile%
directory -
Example:
C:\Users\Pengin\.wslconfig
- Add this in the
.wslconfig
file
$ [wsl2]
$ guiApplications=false
- Restart WSL in CMD
$ wsl --shutdown
$ wsl
Step 2: Install VcXsrv
-
Get the regular release that has
64
andinstaller
in it. - Skip
debug
-
Skip
noadmin
-
Get
64
if you have ax64
bit PC (most modern computers are this) - If you have
x32
get the one that DOESN'T say64
(older computers and budget computers arex32
)
-
Run the installer
-
Windows will protect your PC
-
Click
More info
>run anyway
- Click
Yes
to install
-
Defaults are OK
-
Click
Next
-
Defaults are OK
-
Click
Install
- Installing...
- Go to where you installed VcXsrv
- Start
xlaunch.exe
- Click
Next
- Default is OK
- Click
Next
- Check
Disable Access Control
- Click
Next
DO NOT CLICK FINISH YET
- Click
Save configuration
-
Save the
.launch
profile on your Desktop -
Name it
KivyWSL.xlaunch
- Click
Finish
- Now you will have
KivyWSL.xlaunch
on your Desktop
If you want to see a GUI application when running WSL2, you NEED to run KivyWSL.xlaunch
You NEED to run KivyWSL.xlaunch
. This is especially true because WSLg is also disabled (so there is no backup window provider).
If you want to go back to WSLg, simply remove the .wslconfig
file created earlier.
- When you run you might get a firewall alert, just enable on Private and Public networks, otherwise you will have to do it manually later (using wf.msc)
- You will know VcXsrv is running when you click on the system tray and see a VcXsrv icon
Every time you want a window from WSL you must run the launch config.
You have two options:
- Add a shortcut on windows desktop which this tutorial has provided you
- Add that config to Windows startup
Step 3: Update WSL and export display to send to VcXsrv
$ echo 'export DISPLAY=$(grep -m 1 nameserver /etc/resolv.conf | awk "{print \\$2}"):0.0' >> ~/.bashrc
- The command has been modified to work correctly with export. This lets WSL find your Windows IP and send display information to VcXsrv on your Windows machine
- This is because WSL2 does not share the localhost of your Windows machine.
-
In WSL1 you could just do export DISPLAY=localhost:0.0 BUT WSL1 is not compatible with Buildozer
-
This should be in your
~/.bashrc
file:
- Remember to
source ~/.bashrc
orbash
to update your WSL terminal!
Step 4: Allow VcXsrv in Windows Defender Firewall
-
In Windows Command Prompt:
$ wf.msc
- Go to Inbound Rules
- Make sure VcXsrv is allowed on everything
WSL2: Step 8 (OPTIONAL): Proper Git setup for WSL¶
Step 8 (OPTIONAL): How do I configure Git in WSL?
-
What you should do:
-
Install Git Credential Manager (GCM) and use it as your credential manager on Windows
-
The commands are different because
manager-core
was renamed tomanager
a while ago. -
Since Git 2.39+, in Windows CMD
$ git config --global credential.helper manager
- older Git versions, in Windows CMD
$ git config --global credential.helper manager-core
-
Make sure that GCM is used by Git on your host Windows.
-
To use GCM from Windows on your WSL install, type the correct command:
-
If GIT installed is >= v2.39.0, in WSL terminal
$ git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/bin/git-credential-manager.exe"
- else if GIT installed is >= v2.36.1, in WSL terminal
$ git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/libexec/git-core/git-credential-manager.exe"
- else if version is < v2.36.1 enter this command, in WSL terminal
$ git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/bin/git-credential-manager-core.exe"
Recap:¶
By the end of this tutorial, you will have:
- ✔️ Real Android phone
- ✔️ USB cable
- ✔️ VS Code on Windows with WSL extension
- ✔️ WSL2
- ✔️ Git
- ✔️ pyenv
- ✔️ Python (installed through pyenv)
- ✔️ poetry
- ✔️ scrcpy in WSL2
- scrcpy automatically installs ✔️ adb
- ✔️ Chocolatey in Windows
- ✔️ install scrcpy in Windows through Chocolatey
- (scrcpy automatically installs ✔️ adb on Windows as well)
- ✔️ install scrcpy in Windows through Chocolatey
- Optionally:
- ❓ VcXsrv for native Windows instead of WSLg
🎉 Congratulations! 🎉 Now it is time to learn how to use kivy-reloader on WSL.¶
🎉 Congratulations! 🎉 Now it is time to learn how to use kivy-reloader on WSL.
Closing notes: Tips for first time WSL users¶
Tips for first time WSL users.
-
Always source
~/.bashrc
(in WSL Ubuntu 24.04 this is done for you) -
Every time you enter WSL and the terminal has no color, you must manually update the terminal.
-
Type:
bash
orsource ~/.bashrc
$ bash
$ source ~/.bashrc
-
If you do not source
~/.bashrc
or it is not automatically sourced for you,NOTHING WILL WORK
. -
WSL2 Ubuntu24.04 automatically sources ~/.bashrc from experience
If you installed VcXsrv but no window shows.
- Remember to turn on
KivyWSL.xlaunch
if you have VcXsrv installed so your WSL apps show up on your Windows desktop.
Useful commands to know in WSL/Linux:
- How to make a directory:
$ mkdir foldername
- How to remove a folder recursively:
$ rm -r foldername
Contribution¶
If you have any idea or suggestion, please open an issue or a pull request.
Do you need help?¶
If you need help with Kivy Reloader, you can ask on Kivy Discord support channels. We'll be happy to help you.
Article Error Reporting¶
Message @BadMetrics on the Kivy Discord.