实测结论:
- glibc Vulkan loader + 自写 ICD 能加载
- Termux glibc Mesa 24.2.6 不认识 Adreno 840(chip 0x44050A31 unsupported)
- Arch vulkan-freedreno 26.2.6 能加载但 Linux/DRM 构建找不到设备(缺 KGSL,
/dev/dri 对 untrusted_app 被 SELinux 拒绝)
- GPU 变体会打印具名错误并自动降级 tiny-skia
README.termux 同步:GPU 标 ⛔、MC 走 glibc JVM 的结论与后续路线
2.7 KiB
2.7 KiB
Unlucky Launcher · Termux 适配(termux-glibc 分支)
这条分支把启动器带到 Termux(Android):用 glibc 工具链编出 aarch64-unknown-linux-gnu
二进制,在 termux-x11 里跑 GUI;同时补上 Termux 平台识别、系统 JDK 安装与中文字体。
已验证
| 项 | 状态 | 证据 |
|---|---|---|
| 源码构建(GUI + CLI) | ✅ | Rust 1.99.1 gnu + clang/lld + glibc 运行时;CPU-only(tiny-skia) |
| 窗口显示 | ✅ | termux-x11 :0,截图 1180×760,首帧 ~330 ms |
| 中文 | ✅ | 启动时注册 /system/fonts/NotoSansCJK-Regular.ttc |
| 微软登录 id | ✅ | 构建期注入,日志 client_id=configured source=build |
| 横屏适配 | ✅ | 默认窗口按 X 屏幕等比自适应(source=termux-screen) |
| Java 发现 | ✅ | JAVA_HOME/PATH + $PREFIX/lib/jvm 扫描 |
| Java 自动安装 | ✅ | ull java install 17 由内置镜像装完 openjdk-17(约 20 s) |
| GPU(wgpu) | ⛔ | glibc 侧 Mesa 24.2.6 不支持 Adreno 840;Arch 26.2.6 缺 KGSL。CPU 渲染可用 |
| Minecraft 运行 | ⏳ | 无官方 Android natives;计划走 glibc JVM(见下) |
快速开始
完整配方(工具链、patchelf、linker、门禁)见
packaging/docs/termux-glibc-build.md。最短路径:
termux-x11 :0 -ac &
DISPLAY=:0 ./unlucky-launcher-iced --software-renderer
- 没有 GPU 栈时必须加
--software-renderer(CPU 渲染)。 - 窗口尺寸默认按屏幕自适应;
ULL_WINDOW_SIZE=1520x900可覆盖。 - Java:
ull java install 17|21|25在 Termux 上默认用系统包(内置镜像 + 隔离 apt 状态)。
已知边界
- 仅单机(OnePlus 15 / Android 17)验证,试验级、不在发布矩阵内。
- GPU:bionic 侧 zink/turnip 可用;glibc 侧被驱动挡住——Termux 的 glibc Mesa 24.2.6 不认识 Adreno 840,Arch 的 26.2.6 是 Linux/DRM 构建、缺 KGSL。需要 Mesa 26+ 的 glibc+KGSL 构建;在那之前用 CPU(tiny-skia)。GPU 变体会自动降级,不会崩。
- MC:Android 原生 natives 走不通(LWJGL 没有官方 Android/bionic 产物,且 GLFW 的 窗口模型与 termux-x11 的 X11 不兼容)。可行路线是 glibc JVM(Temurin linux-aarch64 + glibc Mesa),让 MC 的 Linux natives 在 glibc 进程里正常加载。
- Termux 上三条测试失败是环境差异(
/proc/*/children、长路径脱敏、mtime flaky), PC 的 Linux CI 不受影响。
后续
- Mesa 26+ 的 glibc/KGSL 构建(解锁 GPU)
- MC 运行链:glibc JVM(Temurin linux-aarch64 + glibc Mesa);proot 作为备选
- 剪贴板/IME 在 termux-x11 下的行为验证