Guide APK compatibility

How to Run APK on Linux (Waydroid, Anbox and More)

Run APK files on Linux with Waydroid, Genymotion, Android-x86, or Android Studio. Distro-specific commands, kernel requirements, and the fixes that usually fail.

Illustration for the article “How to Run APK on Linux (Waydroid, Anbox and More)”, Android guides on APK compatibility
Contents

You can run APK files on Linux with Waydroid, which runs Android inside a container on your desktop in about ten seconds of startup time. Alternatives exist for specific cases: Genymotion and Android Studio run Android in a virtual machine, and Android-x86 boots it as the entire operating system. Linux has no native Android runtime, so every route here builds one.

Can You Run APK on Linux?

Five routes exist, and one of them is dead. Waydroid is the current standard for desktop use, Genymotion and Android Studio cover developer needs, Android-x86 runs Android as a dual-boot operating system, and Anbox should be avoided entirely since its project was deprecated in February 2023.

The choice comes down to two questions. Do you want Android in a window alongside your desktop, or as the whole system? And does your machine run Wayland, which Waydroid requires?

Route Type Best for Cost
Waydroid Container Daily desktop use, fast startup Free
Genymotion Virtual machine x86 images, testing Free for personal use
Android Studio Virtual machine Developers, exact API levels Free
Android-x86 Bare metal or VM Old hardware, full-screen Android Free
Anbox Container Nothing, project archived Free

Method 1: Waydroid

Waydroid runs a LineageOS-based Android system inside a container and draws its windows through Wayland. It shares your kernel rather than booting a full virtual machine, so it starts quickly and uses less memory than a VM.

Install Waydroid on Your Distribution

Packaging is now handled by the distributions themselves on recent releases:

  • Ubuntu 26.10 and Debian 14: available in the repositories. Debian 13 users pull it from backports.
  • Fedora: sudo dnf install waydroid.
  • Arch: the waydroid package from the community repository or AUR.
  • Void and NixOS: community packages exist and are documented on the Waydroid install pages.
Distribution Command Where the package comes from
Debian 13 sudo apt install -t trixie-backports waydroid Backports
Debian 14 sudo apt install waydroid Main archive
Ubuntu 26.10 sudo apt install waydroid Main archive
Fedora sudo dnf install waydroid Fedora repositories
Arch Linux sudo pacman -S waydroid Extra repository
Void Linux sudo xbps-install -S waydroid Community repository
NixOS services.waydroid.enable = true NixOS module

Every row gives you the same waydroid command and the same service name. Older releases without a package still install through the script documented on the Waydroid site, after which the rest of this guide applies unchanged.

Before the first start, load the binder modules. On Ubuntu and Debian that is sudo apt install waydroid plus a reboot if the package pulls them in; on Arch and Fedora, confirm binder_linux appears in lsmod. Then initialize an image with sudo waydroid init.

Confirm You Are on Wayland

Run:

echo $XDG_SESSION_TYPE

If it prints x11, Waydroid will fail. On a Wayland session, start the service and open the container:

sudo systemctl enable --now waydroid-container
waydroid show-full-ui

Install an APK in Waydroid

Two paths work. Right-click the file in your file manager and choose Open With Waydroid, or push it from a terminal:

waydroid app install /path/to/file.apk

adb install works too once you enable debugging inside the container, which is covered in the ADB install guide.

Waydroid Limitations

Waydroid ships an ARM translation gap. An x86 image installs x86 packages and rejects ARM-only ones with INSTALL_FAILED_NO_MATCHING_ABIS, which is the single most common install failure here. Google Play also needs an image with Google apps baked in, chosen during waydroid init. GPU acceleration depends on your driver: Mesa on Intel and AMD hardware works well, while older NVIDIA drivers need the proprietary stack and a manual configuration step.

Load the Binder Modules at Every Boot

Waydroid needs the binder kernel module before its container starts, and sudo modprobe binder_linux lasts only until the next reboot, so write the module name into your distribution’s boot configuration to keep it loaded, otherwise the first launch after a restart fails with a missing binder error.

Distribution Where the line goes Finish with
Debian 13 and 14, Ubuntu 26.10 binder_linux in /etc/modules-load.d/waydroid.conf sudo update-initramfs -u
Fedora binder_linux in /etc/modules-load.d/waydroid.conf Reboot
Arch binder_linux in the MODULES array in /etc/mkinitcpio.conf sudo mkinitcpio -P
Void Linux binder_linux in /etc/rc.local Reboot
NixOS boot.kernelModules = [ "binder_linux" ]; sudo nixos-rebuild switch

Verify after the reboot with lsmod | grep binder. One line starting with binder_linux means it loaded. No output means edit the file again.

If sudo modprobe binder_linux answers with Module binder_linux not found, the running kernel ships no binder support at all. Install your distribution’s extra modules package or move to a kernel that includes binder. No Waydroid reinstall fixes a kernel that lacks the module.

Run Google Play Inside Waydroid

The default Waydroid image ships without Google apps, so the Play Store never appears in the launcher until you re-run sudo waydroid init, pick the Open GApps image option at the prompt, and restart the container to let the new image load. Until that succeeds, waydroid app install is the only route to any app.

  1. Stop the service with sudo systemctl stop waydroid-container.
  2. Run sudo waydroid init and choose the Open GApps image option when asked.
  3. Start the service with sudo systemctl start waydroid-container, then open waydroid show-full-ui.
  4. Sign in on the first launch. The store then installs and updates apps as usual.

Two things surprise first-time users. The Google package adds several hundred megabytes to the image download, and a sign-in can fail while the container registration is refused. Both usually clear after a second waydroid init and another attempt. Apps you sideload in the meantime keep working through waydroid app install /path/to/file.apk.

Install Apps Without the Play Store

Four routes get an app into Waydroid when the Play Store is absent: sideload with waydroid app install, sign into an anonymous store client such as Aurora Store, browse F-Droid for open source tools, or rebuild the image with Open GApps during waydroid init for the full store.

Route What you get Best for
waydroid app install One package, no store APK files you already downloaded
Aurora Store Google Play’s catalog with an anonymous sign-in Apps that expect a store account
F-Droid Open source catalog Utilities and privacy tools
Open GApps image Full Play Store and automatic updates People who want the normal experience

The management commands are short. waydroid app list shows what is installed, waydroid app launch com.example.app opens one, and waydroid app remove com.example.app deletes it. All three work on every image.

A second build with a different signing key prints INSTALL_FAILED_UPDATE_INCOMPATIBLE. Remove the old package first, then install again. The same rule applies on phones.

Set Up Graphics for Waydroid

Waydroid renders through your compositor, so Intel and AMD GPUs need the open Mesa driver that most distributions already ship, while NVIDIA cards need the proprietary driver plus nvidia_drm.modeset=1 set on the kernel command line before the Waydroid container starts. A wrong setup shows up as a black window, heavy flicker, or an app that quits at launch.

Two commands show what the container really uses. Run both before you change a driver.

glxinfo | grep "OpenGL renderer"
waydroid log | tail -50

Three cases cover almost every report. Mesa on Intel and AMD needs no configuration at all. The proprietary NVIDIA stack works once modeset is set on the kernel command line. Software rendering works everywhere and runs slow everywhere, so treat it as a test rather than a fix.

The Waydroid documentation carries the driver notes for each case. Read them before swapping drivers, because a mismatched NVIDIA setup takes longer to unwind than a slow frame rate does.

Update Waydroid and Its System Image

Update Waydroid with your package manager for the container tools and with waydroid upgrade for the Android image, because the two components move on separate schedules and updating only one of them leaves a mismatch that breaks the next container boot. The current release is 1.6.3 from May 28, 2026, and it brought initial support for Android 16 images.

  1. Update the package first: sudo apt upgrade waydroid on Debian and Ubuntu, sudo dnf upgrade waydroid on Fedora, sudo pacman -Syu waydroid on Arch.
  2. Run waydroid upgrade to refresh the system image inside the container.
  3. Confirm the result with waydroid version, which prints the installed release number.

The two updates are independent. A new package without waydroid upgrade leaves the old Android image in place. An image refresh with an old package can leave a stale service file behind. Run both in the same session.

Restart the container afterwards with sudo systemctl restart waydroid-container. Installed apps keep their data across an ordinary upgrade. Export anything irreplaceable before a major image change, because app data can be cleared with it.

Reset or Uninstall Waydroid

A broken Waydroid install usually needs an image reset instead of a package removal, because the Android files corrupt more often than the package does: stop the container, run sudo waydroid init again to fetch a fresh system image, then reinstall your APK. Complete removal takes three commands and deletes every app inside the container.

Reset in this order. Each step waits for the one before it.

  1. sudo systemctl stop waydroid-container
  2. sudo waydroid init to pull a new image into place
  3. sudo systemctl start waydroid-container, then install your APK again

Clear a single app rather than everything by running waydroid shell, then pm clear com.example.app at the Android prompt. Waydroid also stores runtime switches under the persist.waydroid. prefix, and waydroid prop set persist.waydroid.multi_windows.on true flips one without an image rebuild.

For complete removal, disable the service and delete both data directories. Nothing stored in either location survives this.

sudo systemctl disable --now waydroid-container
sudo apt remove waydroid
sudo rm -rf /var/lib/waydroid ~/.local/share/waydroid

Change the package manager command to match your distribution. The last line deletes the image and every app in it, so export anything you need first.

Run Android Apps in Their Own Windows

Waydroid can put every app in a resizable window instead of one full-screen tablet, and the switch is a single property, persist.waydroid.multi_windows.on, set to true and followed by a container restart, after which Android apps behave like ordinary programs on your desktop.

  1. Run waydroid prop set persist.waydroid.multi_windows.on true.
  2. Restart the container with sudo systemctl restart waydroid-container.
  3. Open the desktop with waydroid show-full-ui.
  4. Launch two apps and drag the edges of each window.

Check the current value with waydroid prop get persist.waydroid.multi_windows.on. Switch it back by ending the same command with false. No new download is needed either way.

Full-screen games still claim one window. Multi-window suits messaging apps, launchers, and anything you want beside a terminal.

Method 2: Genymotion Desktop

Genymotion boots Android as a proper virtual machine, which costs more memory than Waydroid and delivers a clean x86 image in return. The personal edition is free for individual use, without support and without the newest Android images.

Install the AppImage from Genymotion’s site, create a virtual device, then drag your APK onto the window. It runs on Windows, macOS, and Linux, so the same workflow carries across machines. Pick it when an app refuses to install under Waydroid for architecture reasons.

Method 3: Android-x86 and Android TV Builds

Android-x86 boots Android directly on PC hardware from a USB stick, dual-booting alongside Linux. It runs APKs normally once Android is the operating system rather than a guest.

Its status is worth stating plainly: the newest release is 9.0-r2, dated March 25, 2020, and no Android 10 or newer build has shipped from the project. It is fine for old hardware and pointless on a modern machine where Waydroid is available.

Dual-Boot Android-x86 With Linux

Android-x86 installs like any Linux distribution: write the 9.0-r2 ISO to a USB stick, boot it, choose Create or modify partitions, and let the installer add a GRUB entry that boots Android beside your existing system without touching your files. The whole job takes about 30 minutes on a spare disk.

Read these four points before you start. Three of them prevent a reinstall.

  1. Write the ISO with a tool that verifies the image after copying. A truncated write produces a boot loop.
  2. Give Android its own partition, because the installer formats the target it is given.
  3. Reboot and select the new GRUB entry. When it is missing, run sudo update-grub from Linux.
  4. Install your APK the normal way once Android reaches the home screen.

Two limits decide whether this is worth doing. The newest release stays at 9.0-r2 dated March 25, 2020, so apps asking for Android 10 or newer refuse to install. Hardware that already runs Waydroid has no reason to take this path.

Boot Android-x86 in a Virtual Machine

Android-x86 9.0-r2 also boots inside a virtual machine, which costs nothing, risks no data on your real disk, and finishes setup in ten minutes, so you can test the image on the desktop before deciding whether to dual-boot it beside Linux.

  1. Create a virtual machine with 4 GB of RAM and an 8 GB disk. Set the type to Linux, Other Linux.
  2. Attach android-x86_64-9.0-r2.iso as the optical drive, then boot from it.
  3. Choose Live CD - Run Android-x86 without installation first. The desktop appears in about a minute with KVM enabled.
  4. Choose Installation only when you want Android on the virtual disk.

QEMU does the same job in one line: qemu-system-x86_64 -enable-kvm -cpu host -m 4096 -cdrom android-x86_64-9.0-r2.iso. KVM must be reachable at /dev/kvm, and your user must belong to the kvm group. Add yourself with sudo usermod -aG kvm $USER, then log out and back in.

The live mode writes nothing. The build stays at 9.0-r2 from March 25, 2020, so apps that ask for Android 10 or newer still refuse to install. Waydroid remains faster on anything that runs a current kernel.

Method 4: Android Studio’s Emulator

Android Studio’s emulator runs on Linux exactly as it does on Windows and macOS. Create an AVD, pick an image, boot it, and install your APK by dragging it onto the window. This is the route for developers and for anyone who needs a specific API level to test against.

The first boot downloads a system image of one to two gigabytes, and cold starts are slower than Waydroid. In exchange you get a stock Google build, current API levels, and no community packaging to debug.

Speed Up Android Studio’s Emulator With KVM

Android Studio’s emulator on Linux uses KVM for speed, and without it a virtual device runs at a fraction of the speed, so check /dev/kvm, add your user to the kvm group, and restart the session before you create a device.

  1. Confirm the CPU offers virtualization: grep -Ec '(vmx|svm)' /proc/cpuinfo must print a number above zero.
  2. Check the device node with ls -l /dev/kvm, then check your groups with groups.
  3. Add yourself to the group: sudo usermod -aG kvm $USER. Log out and back in, because a group change only applies to a new session.
  4. If /dev/kvm is missing, install the virtualization packages of your distribution, such as qemu-kvm on Debian and Ubuntu.

KVM matters because the emulator starts a real virtual machine. Without it the guest falls back to slow translation, cold boots stretch into minutes, and games become unusable. Create the AVD after the group change, since a device created before it keeps failing on /dev/kvm with a permission error.

Method 5: Cloud Android Streaming

When nothing local installs the app, a cloud device finishes the job. Redfinger (redfinger.cloud) and BlueStacks X (x.bluestacks.com) stream a remote Android session to your browser, so your distribution, kernel, and GPU stop mattering.

This suits weak hardware and apps you only open occasionally. It costs a subscription and adds visible input latency in fast games.

Which APK Variant Works on Linux

Architecture decides more on Linux than anywhere else, because the guest image picks the rule:

  • x86 image, x86 APK. Direct load, full speed. This is the configuration Genymotion and Android-x86 give you.
  • x86 image, ARM-only APK. Fails with INSTALL_FAILED_NO_MATCHING_ABIS. Waydroid does not ship ARM translation, so the package has no libraries to load.
  • arm64 host with an arm64 image. Native speed, and the common case on ARM single-board computers such as the Raspberry Pi.

When a download offers multiple files, take the x86 or universal build on a desktop. The reasoning behind each ABI name is in APK file size and architecture.

Read an APK’s Requirements Before Installing

Read an APK’s requirements on Linux with the same command as everywhere else: aapt dump badging file.apk prints the minimum Android version and the CPU architectures inside the package, and those two lines decide whether your x86 Waydroid image accepts the file.

The binary ships with the Android SDK at ~/Android/Sdk/build-tools/34.0.0/aapt, and Android Studio creates that folder on first run. Debian and Ubuntu carry the same tool as the aapt package. Read the file before you push it into the container.

package: name='com.example.app'
sdkVersion:'26'
native-code: 'arm64-v8a'
Line in the output What happens on a Waydroid x86 image
sdkVersion:'26' Installs when the image is Android 8.0 or newer
sdkVersion above the image Refused with INSTALL_FAILED_OLDER_SDK
native-code: 'arm64-v8a' only Refused with INSTALL_FAILED_NO_MATCHING_ABIS
native-code: 'x86_64' present Loads directly at full speed
No native-code line Installs on any image that meets the SDK line

Waydroid has no ARM translation. One look at the architecture line saves a reinstall attempt.

Common Linux APK Errors

Symptom Cause Fix
waydroid command not found Package not installed or not in PATH Reinstall from your distro repository, then open a new shell
Container starts, window never appears X11 session Switch your display manager to a Wayland session
Failed to start binder module Binder not loaded sudo modprobe binder_linux, then add it to your initramfs
INSTALL_FAILED_NO_MATCHING_ABIS ARM-only APK on an x86 image Find an x86 or universal package, or switch to Genymotion
Black or flickering app window GPU driver mismatch Force the software renderer, or install the proprietary driver
Play Store missing Image built without Google apps Re-run waydroid init with the Google image option

Binder problems account for most failed first installs. Check them before reinstalling anything.

Check the Session and Read the Logs

Three commands diagnose most Waydroid failures on any distribution: waydroid status reports whether the session and container are running, waydroid log prints the container’s own output, and sudo journalctl -u waydroid-container -e shows why the systemd service stopped before you ever open an app. Run them in that order before you reinstall anything.

waydroid status prints the lines that matter: Session, Container, and Vendor type. Both Session and Container should read RUNNING. Anything else explains an empty screen.

What status shows Likely cause First command to run
Session: STOPPED Session never started waydroid session start
Container: STOPPED systemd unit is down sudo systemctl start waydroid-container
Both RUNNING, no window X11 session in use Log out and pick a Wayland session
Both RUNNING, app absent APK never registered waydroid app install /path/file.apk

For detail, waydroid log tails the container output and sudo journalctl -u waydroid-container -e opens the service history. Copy the last ten lines before you ask for help. The error string is usually in them.

Compare Waydroid, Genymotion, and Android Studio

Choose Waydroid for daily desktop use because it starts in seconds and shares your kernel, choose Genymotion when an app refuses to install because it needs an x86 image, and choose Android Studio when you must test an exact API level. All three cost nothing for the way most people use them.

Route Startup Typical RAM Android versions Cost Best for
Waydroid 1.6.3 About 10 seconds 2 to 3 GB Android 13 runtime, Android 16 images Free Daily apps on the desktop
Genymotion Under a minute 4 GB Older images on the free tier Free personal edition x86 packages and testing
Android Studio AVD 1 to 2 minutes 4 to 6 GB Any API level you pick Free Exact version checks
Cloud streaming Browser tab Nothing local Whatever the host runs Freemium Machines that run none of the above

Waydroid 1.6.3 shipped on May 28, 2026 with initial Android 16 image support, while its runtime image stays LineageOS-based Android 13. Genymotion and Android Studio boot a full virtual machine instead, which costs more memory and buys better isolation in return.

Which Route Should You Pick

Daily use goes to Waydroid: it starts fast, shares your desktop, and installs from your distribution’s own repositories. Development work goes to Android Studio. An app that refuses to install under Waydroid goes to Genymotion for an x86 virtual machine.

Start with Waydroid, confirm you are on Wayland, and load binder before the first launch. The Raspberry Pi guide covers the same tools on ARM hardware, and the install guide handles permissions and split packages once your APK boots.

Key Takeaways

  • Waydroid is the default route in 2026: a container, not a full virtual machine, and it needs Wayland plus binder modules.
  • Anbox is deprecated since February 2023, and Android-x86 has not shipped past 9.0-r2 from March 2020.
  • Distro packaging now covers Debian, Ubuntu, Fedora, Arch, Void, and NixOS.
  • ARM-only APKs fail on x86 images with INSTALL_FAILED_NO_MATCHING_ABIS.

Frequently Asked Questions

Can I run APK files on Linux?

Yes, through a compatibility layer. Waydroid runs Android in a container on your desktop, Genymotion and Android Studio run it in a virtual machine, and Android-x86 boots it as the whole operating system. Nothing runs natively, because Linux ships no Android runtime.

What is Waydroid?

Waydroid runs an Android system inside a Linux container using Wayland for its display. It starts in about ten seconds, integrates with your desktop, and is the maintained successor to Anbox. Version 1.6.3 shipped May 28, 2026.

Is Waydroid better than Anbox?

Yes, and it is not close. Anbox was deprecated in February 2023 and its repository is archived with development stalled. Waydroid is named as the successor in Anbox's own project notes and receives regular releases.

Does Waydroid work on X11?

No. Waydroid requires a Wayland session, which is why it fails on X11-only setups and on live ISOs. On Ubuntu 22.04 and newer, and on Fedora and Arch defaults, Wayland is already the session your display manager selects.

Can I run APK files on Ubuntu?

Yes. Install Waydroid from its repository, make sure the binder kernel modules load, start a Wayland session, then install your APK with the Waydroid tool or adb. Debian 13 and newer and Ubuntu 26.10 carry Waydroid in their own repositories.

Can I run APK files on Arch Linux?

Yes, through the Waydroid package in the AUR or the community repository. Arch users must load binder modules manually and keep them in the initramfs configuration, which is the step most first-time installs skip.

Which APK variant works on Linux?

x86_64 when your emulator image is x86, because those packages load directly. ARM-only APKs fail with INSTALL_FAILED_NO_MATCHING_ABIS on x86 images, since Waydroid does not ship an ARM translation layer.

Do I need a virtual machine to run APK on Linux?

No. Waydroid uses a container and starts faster than a VM. Genymotion and Android Studio do use virtual machines, which costs more memory and startup time but offers better isolation and x86 images.

Why will Waydroid not start on my distro?

Almost always a missing binder module or an X11 session. Load binder_linux or ashmem, confirm you are on Wayland with echo $XDG_SESSION_TYPE, then restart the Waydroid service.

Is running APK files on Linux legal?

Yes for apps you are licensed to use. Android itself is open source, emulators are ordinary software, and the legal risk in this space comes from pirated packages rather than from running them.

Part of the complete guide

APK Compatibility Guide: Which Devices Can Run APKs?

Also in APK compatibility: