github ExTV/Podroid v1.1.8

latest releases: v1.2.9, v1.2.8, v1.2.7...
5 months ago

What's New in v1.1.8

This release ships a fully-featured in-app terminal — inline images, modern escape-sequence support, ligatures, and a top-sheet Quick Settings panel with custom font and theme import — and resolves two long-standing stability bugs (Pixel 10 SIGILL, orphan VM after uninstall).

Terminal — image protocols

  • Sixel: chafa, lsix, img2sixel, lazygit thumbnails, and any tool that emits DCS-Sixel now render inline. Fixed two parser bugs in the upstream fork along the way (the bare Pa;Pb;Pcq intro and the missing $ / - flush triggers).
  • iTerm2 (OSC 1337): imgcat and friends just work.
  • Kitty graphics protocol (a=T,f=100,t=d,m=0/1,c=,r=): multi-chunk PNG support, used by yazi/lf preview panes and kitty +kitten icat.

Terminal — modern features

  • DECSET 2026 synchronized output: the emulator advertises and honors atomic-frame mode, so btop / nvim / lazygit no longer flicker during partial redraws.
  • OSC 8 hyperlinks: tap-to-open URLs from git, gh, lazygit, etc.
  • HarfBuzz ligatures: 'liga' on, 'calt' on is enabled on the Paint, so JetBrains Mono / FiraCode / Cascadia render ===, =>, !=, -> as fused glyphs.
  • XTVERSION (CSI > 0 q): emulator answers \eP>|Podroid <ver>\e\ so Neovim ≥0.10 and other modern apps detect the terminal correctly.
  • COLORTERM=truecolor is now exported from /etc/profile.d inside the VM, so apps detect 24-bit color support without manual configuration.

Quick Settings — minimal top-sheet rewrite

  • Drops down from the header in one tap, height-capped so the extra-keys row stays visible in landscape.
  • Three-column grid per section: 4 visible swatches + More (full picker with search) + + Add (import).
  • Continuous font-size slider, compact toggles for haptics and extra keys.
  • Custom fonts: + Add opens the system file chooser (SAF). Drop in any .ttf or .otf; long-press a custom font to remove. No file-manager permission gymnastics required.
  • Custom themes: paste a terminalcolors.com URL and the app fetches the Alacritty TOML, parses it, and adds it to the picker.

Fixes

  • Pixel 10 SIGILL on launch: QEMU's coroutine layer used Bionic's sigsetjmp/siglongjmp, which fail PAC AUTH on ARMv9.2 (Tensor G6) when Downloads sharing is enabled. Replaced with a PAC-free aarch64 asm shim (libqemujmp.a) linked into coroutine-ucontext.c.
  • Orphan VM after uninstall / OOM kill: a tiny native launcher (libpodroid-launcher.so) now wraps QEMU and sets PR_SET_PDEATHSIG = SIGKILL before execv. The VM dies with the app instead of reparenting to PID 1 and continuing to consume RAM until reboot. Verified on Android 12 (rooted) and Android 16 (unrooted).
  • Update prompt regression: 1.1.x-debug no longer compares as older than 1.1.x, so the in-app update banner stops nagging on every launch.
  • Cursor flicker on keyboard slide: removed a redundant forceUpdateSizeFromView call that was racing with tv.updateSize() and triggering two SIGWINCH resizes per keyboard animation.
  • Cursor flicker on extra-keys toggle: cached the last applied font size so flipping CTRL/ALT no longer re-pushes setTextSize + updateSize on every recomposition.
  • dmesg cleanup: 9p msize lowered to virtio's actual cap (512000); deprecated kernel elevator= cmdline replaced with per-device sysfs writes in podroid-bootstrap.

Performance (TCG, no KVM)

  • -cpu max,sve=off: SVE's variable-length vector instructions are expensive to translate and effectively unused by Node, Podman, and most container workloads. Dropping them speeds general guest workloads.
  • tb-size=512: bigger translation-block cache helps JIT-heavy guests like V8/Node.

Internals

  • The terminal layer now lives as two local Gradle subprojects (terminal-emulator, terminal-view) vendored from MatanZ/termux-app:sixel4, instead of a JitPack AAR. We can patch the parser in-tree.
  • 64 KB PTY buffers, deduplicated MSG_NEW_INPUT, and a hoisted RectF reduce wakeups and GC pressure on image-heavy frames.

Installation

Important: Delete any older Podroid app versions before installing.

  1. Uninstall the existing Podroid app completely
  2. Download and install the new APK
  3. You may need to allow installation from unknown sources

Note: This is a debug build as per project convention.

Don't miss a new Podroid release

NewReleases is sending notifications on new releases.