glasses: launch guest on Shizuku VirtualDisplay + binocular render

- VmShizukuService is a Shizuku UserService only; remove its <service> manifest entry (ServiceStarter instantiates it reflectively, an Android service entry causes ClassCastException)
- VirtualDisplayFrameSource: await binder via ShizukuVdClient.bindForResult(5s), expose virtualDisplayId + shizukuBinder, stop the UserService on release
- VmGlassesController: serialize acquire via Mutex, use double-buffered SurfaceTexture (DisplayManagerService rejects single-buffer), launch the guest on the VD with ShizukuVdBinder.launchActivity
- GlassesScreen: render controller.frameSource (Running) directly; drop the LaunchedEffect acquire
- DebugTestReceiver: register at runtime from MainActivity (background manifest receivers are blocked on Android 12+)
This commit is contained in:
2026-09-25 17:19:49 +03:00
parent 5afdde70e1
commit 03f1d7dcc7
6 changed files with 112 additions and 89 deletions
+4 -5
View File
@@ -68,11 +68,10 @@
android:exported="false"
android:foregroundServiceType="mediaPlayback" />
<!-- Shizuku UserService для системных вызовов -->
<service
android:name=".VmShizukuService"
android:exported="true"
android:process=":shizuku_vd" />
<!-- VmShizukuService НЕ объявляется здесь как <service> — это Shizuku UserService,
который ServiceStarter создаёт через reflection в отдельном isolated-процессе.
Если объявить — Shizuku-сервер не сможет привести класс к IBinder
(ClassCastException в moe.shizuku.starter.ServiceStarter). -->
<!-- Shizuku v12+ требует ShizukuProvider в манифесте — он сам вытаскивает binder
через ContentProvider IPC и инициализирует Shizuku-клиент. Без него binder не придёт.