Complete guide to running Android applications on Linux using Waydroid - a container-based solution with native Wayland integration.
Overview
Waydroid is a container-based approach to boot a full Android system on a regular GNU/Linux system. It uses Linux namespaces (user, pid, uts, net, mount, ipc) to run a full Android system in a container and provides Android applications on any GNU/Linux-based platform with near-native performance.
Key features:
Wayland Integration: Full support for Wayland compositors with smooth windowing
GPU Acceleration: Hardware-accelerated graphics for games and GPU-intensive apps
Native Performance: Near-native speed with reduced overhead compared to emulators
LineageOS-based: Uses customized Android system images based on LineageOS
binderfs: Uses Android binder IPC mechanism for communication between container and host
# Start the container servicesudo systemctl start waydroid-container.service
# Enable on bootsudo systemctl enable waydroid-container.service
# Start a session
waydroid session start
Manual start (without systemd)
# Start container (requires sudo)sudo waydroid container start
# Start session (in new terminal, no sudo)
waydroid session start
CLI Commands
App Management
# Install an APK
waydroid app install /path/to/app.apk
# List installed apps
waydroid app list
# Launch an app (use package name from list)
waydroid app launch com.package.name
# Uninstall an app
waydroid app uninstall com.package.name
Shell Access
# Enter Android shell
waydroid shell
# Execute a single command
waydroid shell pm list packages
waydroid shell getprop ro.product.model
waydroid shell su -c "ls -la /sdcard/"
UI Control
# Show full Android UI (fullscreen)
waydroid show-full-ui
# Take screenshot
waydroid screenshot
# Set window mode
waydroid window set <fullscreen|windowed|tablet> [position]
Status and Info
# Check Waydroid status
waydroid status
# View logs
waydroid log
waydroid log -cat main # Filter by logcat
waydroid log -cat all # All logs# Get device properties
waydroid prop get
waydroid prop get ro.product.model
Waydroid supports NVIDIA GPUs through the native Wayland renderer. Ensure you have:
NVIDIA driver installed
Wayland compositor with NVIDIA support (e.g., GNOME on Wayland, Sway)
AMD/Intel
Works out of the box with Mesa drivers. For best performance:
Ensure mesa drivers are up to date
Use a Wayland compositor
Performance Tuning
# Enable hardware GPU rendering (usually enabled by default)
waydroid prop set ro.hardware.gralloc gbm
waydroid prop set ro.hardware.egl emulated
Networking
Waydroid creates a network bridge automatically. To verify:
# Check network interfaces
ip addr show waydroid0
# Network is usually NAT'd behind host# Android sees eth0 with DHCP
Sharing Host Network
# Waydroid shares the host network by default# To isolate, you would need to modify the container configuration
Internet Access
Waydroid container should have internet access automatically. If not:
# Check DNS
waydroid shell getprop net.dns1
# Test connectivity
waydroid shell ping -c 3 google.com
Window Modes
Fullscreen Mode
waydroid show-full-ui
Windowed Mode
# Launch in window
waydroid app launch com.package.name
# Or set windowed mode explicitly
waydroid window set windowed
Multi-Window (Tablet Mode)
# Enable tablet/multi-window mode
waydroid window set tablet
GAPPS Support
Installation
Initialize with GAPPS support:
sudo waydroid init -s GAPPS
This installs:
Google Play Services
Google Play Store
Core Google apps
Google Play Certification
To use Google Play Store fully:
Open Play Store on Waydroid
Sign in with Google account
The device should auto-register
For certification issues:
# Check certification status
waydroid shell settings get secure android_id
Manual GApps Installation
If you initialized without GAPPS, you can add it later:
# Download GApps from OpenGApps# Extract to /var/lib/waydroid/# Restart waydroid
ADB Integration
Connect to Waydroid via ADB
# Default ADB connects to localhost
adb connect 192.168.250.1:5555
# Or use waydroid's adb over network
waydroid shell getprop ro.debuggable # Check if ADB is enabled
Enable ADB Network Debugging
# In Waydroid shell
waydroid shell setprop persist.adb.enable 1
waydroid shell setprop service.adb.tcp.port 5555
# Then connect
adb connect 192.168.250.1:5555
The Android container sees /sdcard/ as internal storage:
# Access from host (read-only)ls /var/lib/waydroid/data/media/0/
# Or use waydroid shell
waydroid shell ls /sdcard/
Shared Folders
Create a shared folder between host and Android:
# Create directory on hostmkdir -p ~/waydroid/shared
# Bind mount (add to /etc/fstab or systemd mount)sudo mount --bind ~/waydroid/shared /var/lib/waydroid/data/media/0/Download/shared
Using ADB for Files
# Push files to Android
adb push /path/on/host /sdcard/Download/
# Pull files from Android
adb pull /sdcard/screenshots/ /path/on/host/
Desktop Environment Integration
GNOME
Waydroid integrates well with GNOME on Wayland. Apps appear in the application overview. Use GNOME Extensions like: