Warning
uDroid is in early development. Expect incomplete features and breaking changes. Use it for testing and keep important data backed up.
This is the standalone Android application for uDroid: a friendly, supervised way to install and use Linux distributions on Android.
Download uDroid from GitHub Releases,
open the newest prerelease, and select its .apk file. Android may ask you to
allow installs from the browser or file manager you used.
Existing stable-signed builds can also download and verify newer releases from the app's About page.
| Area | What is supported |
|---|---|
| Linux installation | Search uDroid and PRoot-Distro archives alongside official Docker Hub operating-system images. Choose a compatible OCI tag, review its architecture and compressed size, resume transfers, verify SHA-256 digests, and retain validated data across retries. |
| Multiple systems | Keep multiple distributions installed. Selecting an installed system opens its own status and controls page instead of immediately starting a terminal. |
| Terminal | Use the bundled Termux terminal emulator and persistent, service-owned PTY without installing Termux separately. Each terminal action targets the selected rootfs. |
| Linux applications | Discover freedesktop .desktop entries, launch graphical or terminal applications, publish dynamic shortcuts, and pin selected applications to the Android home screen. |
| Embedded X11 | Use the bundled Termux:X11 server and uDroid display surface without installing the separate Termux:X11 application. Keyboard, direct-pointer, trackpad-style, native multi-touch, and display settings are available inside uDroid. |
| Desktop environments | Detect installed X11 sessions from standard xsessions directories. Start, stop, or restart the selected desktop while uDroid reports which rootfs and desktop own DISPLAY :0. |
| Compositing | Enable or disable compositing for supported XFCE, Plasma, and MATE sessions, then apply the setting through a supervised desktop restart. GNOME is treated as compositor-required. |
- uDroid currently supervises one active Linux runtime and one X11 display,
DISPLAY :0, at a time. Multiple distributions can remain installed, but their live desktop sessions are not concurrent. - Desktop lifecycle support currently targets X11 sessions advertised through
/usr/share/xsessionsor/usr/local/share/xsessions. Wayland sessions are not launched. - Compositor control is desktop-specific. LXQt and unknown/custom sessions are still launchable, but uDroid does not guess at a compositor switch when no safe standard adapter is known.
- PRoot provides the Linux userspace. It is not a virtual machine, does not provide a normal systemd/logind boot, and cannot reproduce every native Linux service or sandbox boundary.
- The embedded display is functional, but general-purpose GPU acceleration is not yet a supported app contract. Desktop responsiveness depends on the device, resolution, applications, and compositor choice.
- Audio integration, background desktop recovery, multiple displays, and production-level desktop compatibility remain incomplete.
See the distribution catalogue, OCI image architecture, Linux application launcher, X11 runtime architecture, performance notes, and app updates for current behavior and technical details.
Git tags matching v* are built by GitHub Actions. Each resulting prerelease
contains:
- one universal, optimized APK covering
arm64-v8a,armeabi-v7a, andx86_64, signed with the persistent project update key; SHA256SUMSfor verifying the downloaded APK;- GitHub's source archives, including the vendored Termux terminal components and the corresponding third-party notices.
The published v0.0.2 APK predates stable update signing and retains its
original debug asset name. It is a development build, not a Play Store or
production-signed release:
adb install -r udroid-v0.0.2-debug.apkTagged releases after this updater checkpoint require these GitHub Actions secrets:
UDROID_SIGNING_STORE_BASE64UDROID_SIGNING_STORE_PASSWORDUDROID_SIGNING_KEY_ALIASUDROID_SIGNING_KEY_PASSWORD
The first stable-signed development release cannot replace the older ephemeral-debug-signed APK in place. Existing testers must uninstall and install that release once; subsequent releases signed by the same key can use the in-app updater.
Requirements:
- JDK 17 or newer
- Android SDK platform 36
- Android NDK 28.2 (the probes also build with NDK 26+)
export ANDROID_HOME="$HOME/Library/Android/sdk"
export ANDROID_NDK_HOME="$ANDROID_HOME/ndk/28.2.13676358"
./app/src/main/cpp/build-runtime-probe.sh
./tools/build-proot-assets.sh
./tools/build-gnu-tar-assets.sh
./gradlew :app:assembleReleaseThe app targets API 36. On Android 10 and newer it launches packaged Android
ELFs through /system/bin/linker(64). PRoot's static guest loader is installed
as an extracted APK native library so its second execution hop is not blocked
by Android's writable-app-data execution policy.
UI performance is measured from optimized builds with device Macrobenchmarks, Perfetto traces, and generated Baseline Profiles. See Performance for the commands and current catalogue results.
The uDroid-owned Android shell is MIT-licensed, matching
fs-manager-udroid. Packaged PRoot is GPL-2.0 and statically links talloc,
whose library is LGPL-3.0-or-later. The rootfs installer also packages GNU tar
and Termux's BSD-licensed libandroid-glob implementation. The vendored Termux
terminal emulator and view are the Apache-2.0 components identified by
Termux's upstream license exception. The embedded Termux:X11 module is GPLv3,
so APKs containing it are distributed as GPLv3 combined works. Exact source
versions, checksums, local changes, and build commands are recorded in
tools/ and third_party/; binary releases must also provide the applicable
corresponding source and license texts. See
Third-party notices.