Skip to content

Add 32-bit ARM support and a lightweight desktop for low-memory phones - #42

Open
encryptedtouhid wants to merge 2 commits into
orailnoor:mainfrom
encryptedtouhid:feat/armeabi-v7a-32bit-support
Open

encryptedtouhid wants to merge 2 commits into
orailnoor:mainfrom
encryptedtouhid:feat/armeabi-v7a-32bit-support

Conversation

@encryptedtouhid

@encryptedtouhid encryptedtouhid commented Jul 21, 2026 •

Copy link
Copy Markdown

What this does

DroidDesk only shipped an arm64 build, which left out the many budget Android phones that still run a 32-bit system. This adds an armeabi-v7a build so those devices can install and run the Linux desktop.

Runtime changes

  • 32-bit builds of the native libraries now live under jniLibs/armeabi-v7a: the Xlorie X server, proot and its loader, talloc, the shared-memory shim, and the socket hook.
  • A 32-bit Termux bootstrap ships next to the arm64 one, and the runtime picks the right archive from the device's primary ABI.
  • armeabi-v7a is enabled in the Gradle ABI filters.

Lite mode for low-memory devices

Phones with around 2 GB of RAM now start on a minimal Openbox session instead of a full desktop. The compositor stays off and the optional "recommended" packages are skipped, which keeps the install small enough to finish without running the device out of memory.

Fixes found along the way

Taking a low-end phone all the way through setup turned up a few real bugs:

  • apt's download methods came out of the bootstrap without an execute bit, so package setup failed with "method https has died unexpectedly". The extractor restores it now.
  • The home screen launched the picker's default desktop rather than the one that was installed, so it tried to reinstall the wrong environment.
  • Display scaling asked an Activity for a system service before it was ready and crashed the desktop on launch. It reads from an application context now.
  • The desktop rendered at a third of the screen and looked blocky. Low-memory devices render at native resolution.

Walkthrough on a 32-bit device

A low-RAM phone taken from first launch to a running desktop.

Low-RAM device picks Openbox automatically Installing X11 and audio (arm packages)
Choose desktop, low RAM detected Installing X11 and audio
Installing Mesa (arm packages) Setup complete
Installing Mesa Setup complete

The Openbox desktop running with software rendering:

Openbox desktop running on a 32-bit device

DroidDesk shipped arm64 only, so it would not install on the many
budget Android phones that still run a 32-bit system. This builds an
armeabi-v7a variant next to the existing arm64 one.

Runtime:
- Bundle 32-bit builds of the native libraries under jniLibs/armeabi-v7a:
  the Xlorie X server, proot and its loader, talloc, the shared-memory
  shim, and the socket hook.
- Add a matching 32-bit Termux bootstrap and choose the right archive at
  runtime from the device's primary ABI.
- Turn on armeabi-v7a in the Gradle ABI filters.

Lite mode for low-memory hardware:
- Detect low-RAM devices and start them on a minimal Openbox session with
  a panel, file manager, and terminal rather than a full desktop.
- Turn off the compositor and skip recommended-but-optional packages so
  the install fits within a couple of gigabytes of RAM.

Fixes uncovered while taking a low-end device through setup:
- The bootstrap extractor left apt's download methods without an execute
  bit, so package configuration failed with "method https has died
  unexpectedly". The execute bit is now restored on lib/apt/methods.
- Launching the desktop used the picker default instead of the desktop
  that was actually installed, which then tried to reinstall the wrong
  one. It now launches whatever is installed.
- Display scaling asked an Activity for a system service before it was
  ready and crashed on launch. It reads from an application context now.
- The desktop rendered at a third of the screen size and looked blocky.
  Low-memory devices render at native resolution instead.
Captures the low-RAM device picking Openbox automatically, the arm
package install running, and setup finishing.
@encryptedtouhid

Copy link
Copy Markdown
Author

@orailnoor would you please have a look at the pr :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant