Intercept content, file and PackageInstaller requests in managed Lepton containers and route retained APKs through the normal review, backup and installation flow. Persist presentation receipts, retry delivery, and reopen repeated requests without duplicating packages. Use authenticated localized update windows with visible laser cursors, and switch native Steam runtime aliases back to stable context names for installation. Verified all three request paths and a live Steam-runtime reinstall on Frame with backup creation and unchanged save data.
2.9 KiB
Android task window helper
FramelyWindow.java uses the Android 11 task service to put only the requested
package's foreground task into fullscreen. A startup windowing-mode option alone
can leave a restored Lepton task in freeform mode. This helper changes task mode
without stopping the game or changing its installation, data, Android image or
host compositor. VR launches do not invoke it. It exits after success or a bounded
five-second wait; it does not prevent later manual window adjustments.
The small checked-in DEX is embedded in Framely. window.sh supplies ART's runtime
environment for podman exec; both files are mounted read-only into the container.
No APK installation or network access is required at runtime. An unsupported task
API fails explicitly instead of guessing Binder transaction numbers.
Rebuild with bash tools/build-android-window.sh (JDK and curl required). This
uses Google's D8 8.3.37, pinned by SHA-256. D8 is a build tool and is not shipped.
中文
FramelyWindow.java 通过 Android 11 的任务接口,只将指定包的前台任务切换为全屏。
Lepton 恢复已有任务时,仅指定启动窗口模式仍可能留下自由窗口。此助手不停止游戏,
不修改安装、数据、Android 镜像或宿主合成器。VR 启动不调用助手。成功后立即退出,
等待最多五秒,不持续限制用户之后手动调整窗口。
小型 DEX 随 Framely 内置;window.sh 为 podman exec 补充 ART 运行环境。二者以
只读方式挂载,运行时无需安装 APK 或联网。不支持的任务接口会明确失败,不猜测
Binder 调用编号。
执行 bash tools/build-android-window.sh 可重新生成,需要 JDK 和 curl。
构建使用 Google D8 8.3.37,并校验固定 SHA-256;安装包不包含 D8。
APK update interception
FramelyUpdates.java runs as Android root inside Framely-launched Lepton containers.
The private launch adapter mounts the helper and a package allowlist read-only,
redirects Lepton's VIEW pipe to a bounded reader, and retains the original pipe
for unrelated links. Android's activity controller intercepts installer intents
and pending PackageInstaller confirmations. Complete, single-package APKs are
retained in a private host queue; review and installation use Framely's existing
APK manager. No system image, host root daemon or runtime JDK is required.
The helper targets Android 11's Binder APIs. If startup fails, its supervisor forwards URI requests through the original Steam pipe. Split APK, multi-package and staged sessions are reported as unsupported rather than partially installed. The controller does not intercept privileged silent package-manager installations. Source URIs, credentials and tokens are never written to the queue or its logs.
Rebuild the embedded DEX with bash tools/build-android-updates.sh. Android SDK
platform 30 and D8 are downloaded with pinned SHA-256 checksums at build time only.