Skip to content

Shield Optimizer v2-2.0.0

Latest

Choose a tag to compare

@github-actions github-actions released this 15 Jun 13:49

The first stable release of the v2 rewrite — Shield Optimizer is a full
Rust/Tauri desktop app for debloating and tuning Android TV devices, no
PowerShell required. Everything from the beta line, now stable:

Highlights

  • One-click device management over ADB — auto-discovers devices on USB and
    the local network (including Android 11+ wireless debugging), with guided
    on-TV authorization.
  • Optimize wizard with safe, reversible recommendations: per-app RAM and
    last-used cues, a "remove if unused" review tier, and a mandatory
    do-not-disable safety gate so you can't brick a device.
  • Snapshots — capture and restore the full disable/launcher/settings state.
  • App List, Launcher takeover, Install APK, Files, Health report.
  • Instant Remote control — a low-latency scrcpy channel (key presses in
    milliseconds), full-UTF-8 typing, hold-to-repeat D-pad, Recents and Settings
    buttons, with a compatible-mode fallback.
  • Tweaks — HDMI-CEC, display scaling, frame-rate matching, background
    process limit, the Nvidia system-hooks and Assistant-mic toggles, and
    Private DNS (DNS-over-TLS) with a dead-host safety revert.
  • In-app auto-update — signed updates with an auto-update toggle and an
    "Update now" button.
  • Cross-platform: macOS (universal .dmg + Homebrew tap), Windows (.msi/.exe),
    Linux (.deb/.AppImage/.rpm).

Added

  • Instant Remote control. The Remote tab now drives the TV over a persistent
    scrcpy control channel instead of a fresh ADB call per press — key presses go
    from ~0.7s to near-instant, typing supports full UTF-8, and holding a D-pad
    direction repeats. A live ● instant / ○ compatible cue shows which transport
    is active, with a Force compatible mode toggle as a fallback.
  • Recents and Settings buttons on the Remote. Settings opens via an intent
    (the Shield's gear/hamburger button), so it works where a raw keycode doesn't.
  • Private DNS (DNS-over-TLS) in Tweaks — Off / Automatic / Custom hostname,
    with a safety net that reverts a dead custom host back to automatic so the
    device never loses DNS.

Fixed

  • Wireless-debugging devices (Android 11+) are now labeled Network, not USB.
  • Google Pixel phones are no longer mislabeled as Google TV — device type is
    detected from the actual TV build characteristic, not brand alone.

Added

  • Auto-updater — the app now checks for updates on launch using Tauri's
    signed updater. An "Auto-update" checkbox in the header controls whether
    updates download automatically; an "Update now" button appears when one is
    available. Builds are signed with an Ed25519 key.
  • Network scan after ADB install — installing platform-tools now
    automatically scans the local network for devices, matching boot behavior.
  • Dev toolingMakefile (make dev, make brew, make setup) and
    .nvmrc for consistent Node versions.
  • appops commands — new set_app_op / get_app_op Tauri commands for
    future use (AppOps-level permission control).

Fixed

  • Tweaks: Nvidia System Hooks description — corrected from "disables
    Netflix button" to its actual function (Xbox controller Guide → Home
    remapping). The Shield remote's Netflix button is firmware-level and cannot
    be disabled via ADB.

Fixed

  • Linux: AppImage blank window / EGL crash on modern Wayland systems
    (CachyOS, Arch, and other rolling distros — "Could not create default EGL
    display: EGL_BAD_PARAMETER"). The AppImage bundled its own copies of
    libwayland, which clash with current Mesa graphics drivers; they are now
    removed so the system's own libraries are used, matching current AppImage
    tooling defaults. The crash was reproduced and the fix verified in CI
    against an Arch userspace. No more LD_PRELOAD workaround. (#60)

The audit release: a full codebase review, every finding fixed, plus a big
Optimize-wizard usability pass.

Fixed

  • Runaway memory / CPU in long sessions. Opening the Snapshot tab with no
    saved snapshots (or the Install APK tab with an empty remembered folder)
    silently re-fetched in a tight loop forever. This is the likely cause of
    multi-GB memory reports.
  • Large file transfers no longer time out. APK backups, app cloning, and
    file-manager uploads/downloads previously died at exactly 30 seconds —
    guaranteed failure for big apps and media files. Transfers now get a
    15-minute ceiling.
  • "Connect IP" honesty. adb connect reports success even when it fails;
    the app now reads the actual result, and an unauthorized connection tells
    you to approve this computer on the TV.
  • Snapshot apply / panic recovery now refresh the App List, Optimize, and
    Launcher views immediately instead of showing stale states.
  • Linux: blank window on some Wayland setups (EGL_BAD_PARAMETER crash) —
    fixed by disabling WebKit's DMABUF renderer at startup; no more LD_PRELOAD
    workaround.
  • Action-result messages (e.g. after an APK backup) are now dismissible
    instead of sticking around for the whole session.

Optimize wizard

  • Review apps are spotlighted, not buried. Streaming apps that need your
    judgment keep full opacity with an orange accent bar, the summary calls out
    how many — and which ones show no recent use ("3 show no recent use:
    Apple TV, …") — and each row's control now carries the rule itself:
    Keep (if you use it) / Uninstall, with an "Uninstall / disable if
    unused" hint.
  • Same look as the App List. One shared row component drives both tabs:
    state badge, labeled RAM, "last used" cue, and REVIEW pill all match, and
    the wizard gains the same default-on Hide not installed filter.
  • Usage cues now read "last used 5d ago" instead of a bare "5d ago".

Changed

  • Overview's "Send text to TV" box is gone — the Remote tab's live typing
    replaced it.
  • The footer now links to Ko-fi if you want
    to support development.
  • App catalog accuracy pass: Discovery+ is correctly reinstallable;
    YouTube Kids (TV), Showtime, and Epix Now are marked defunct (services
    discontinued); the STARZPLAY entry is renamed LIONSGATE+.

Hardening & internals

  • Device-shell input validation closed its last gaps (snapshot package names,
    settings keys/values are now validated or quoted everywhere).
  • The launcher-takeover logic — the most safety-critical code path — gained
    its first full test suite (149 tests total), including the revert path.
  • The 3,900-line device page was decomposed into per-tab components; CI now
    runs the full lint/test surface; docs were brought back in line with
    reality.

A big App List / Optimize update centered on smarter, safer recommendations.

Added

  • "Remove if unused" review tier. Preinstalled streaming apps (Netflix,
    Disney+, Showtime, …) are surfaced as candidates to remove if you don't use
    them
    — never auto-selected — with a last-used cue ("used 3d ago", "no
    recent use") from usage stats so you can decide.
  • Per-app RAM badges. The App List now shows live RAM (e.g. RAM 243 MB) on
    apps that are running right now — the cue for which unused app is quietly
    eating memory.
  • Friendly names + search for sideloads. "Everything else" recognizes
    popular sideloads (Artemis/Moonlight, Overseerr, SmartTube, Jellyfin, …) by
    name, and search matches the name you actually see, not just the package id.
  • Files: optional system paths (power user). A toggle lets you browse the
    whole filesystem beyond /sdcard; deletes outside /sdcard are
    double-confirmed and critical mounts are refused.
  • Tweaks: Background Process Limit. Cap background apps to free RAM (with a
    clear note that Android resets it on reboot).

Changed

  • Uninstall safety. The wizard never recommends uninstalling an app you
    can't easily get back — non–Play-Store, non-defunct apps are disabled instead.
  • Recommendations reflect real benefit. Dropped no-op suggestions (idle
    language keyboards), and RAM figures now only show for running, reclaimable
    apps.
  • App List defaults to installed apps ("Hide not installed" on).
  • The App List and Optimize tabs now stay in sync after an action.

Fixed

  • App List / Optimize tables no longer blank out, long system package names no
    longer overflow, and the Optimize plan loads faster (no redundant device
    re-detection).

The version now reads as 2.0.0 so the app no longer looks like a v0 build —
it's been a v2 beta all along.

Fixed

  • App List and Optimize tabs rendered blank. Two streaming apps (Pluto TV,
    Tubi) were duplicated in the catalog; the table render aborted on the repeated
    key, so the counts loaded but the rows never appeared. Removed the duplicates
    and hardened the loader so a stray repeat can never blank the UI again.
  • Optimize was slow to load the plan. It re-profiled every connected device
    first (and stalled on unauthorized ones). It now uses the type the page
    already detected and goes straight to the device query.
  • "Update available" link now opens the full releases list instead of
    redirecting to the latest v1 (PowerShell) release.

First-run warnings

These builds are unsigned. Your OS may complain on first launch:

  • macOS (Gatekeeper): the first-launch dialog on macOS 15+ only offers "Move to Trash" or "Done" — click Done, then either:
    • Terminal: xattr -dr com.apple.quarantine "/Applications/Shield Optimizer.app" (one-time, then double-click as normal)
    • GUI: System Settings → Privacy & Security → scroll to the "Shield Optimizer was blocked" message → Open Anyway → enter password
  • Windows (SmartScreen): "More info" → "Run anyway".
  • Linux: chmod +x ShieldOptimizer*.AppImage before running.

See the v2 README for setup and feature docs.