Files
rayneo-vm/BOOTSTRAP_TEST.md
T
subochev 59069a741e phone: keep-alive foreground service + notification perm; glasses: clear NoConnection on reconnect
- ConnectionKeepAliveService (foreground, PARTIAL_WAKE_LOCK + WIFI_MODE_FULL_HIGH_PERF,
  started in PhoneVmApp.onCreate): without it HONOR deep-sleeps the phone process on
  screen-off and the glasses lose the WebSocket link. Same mechanic as view-mate.
- MainActivity: request POST_NOTIFICATIONS so the FGS notification is visible.
- VmGlassesController.onPhoneConnected(): drop a stuck NoConnection state when the
  phone (re)connects; returns to Running if a guest is active, else NoAppSelected.
- VmService: call it from onConnected.
- stopGuest/switch: force-stop the previous guest before releasing its display
  (releasing first migrates the guest task to display 0 full-screen); VirtualDisplay
  frame source now destroys its UserService on release.
- Mercury status: retry the first pullGeneralStatus until it lands, refresh every 15s
  and on tab open; GlassesStatusScreen shows 'Ждём статус от очков…' instead of fake zeros.
- MainActivity(glasses): HOME candidate flag + finish() on a non-default display (recursion guard).
- README: Home-launcher setup/rollback section.
- BOOTSTRAP_TEST.md: post-reboot Shizuku bootstrap investigation log.
2026-09-26 13:59:54 +03:00

92 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Тест автономного автозапуска GlassesApp (HOME + adb-бутстрап Shizuku) — ВЫВОДЫ
Цель: доказать, что GlassesApp может подниматься и оживлять Shizuku после холодной
перезагрузки **без Mercury-лаунчера и без USB-компьютера**.
Устройство: RayNeo X3 Pro, adb serial `A06B4AB933C4103`.
Дата экспериментов: 2026-09-25/26.
---
## ИТОГОВЫЙ ВЫВОД (кратко)
1. **Автозапуск через HOME не работает.** Наш пакет можно назначить дефолтным HOME
(`cmd package set-home-activity pw.binom.rayneovm.glasses/.MainActivity`, `isDefault=true`),
но при загрузке ROM-патч system_server всё равно поднимает **свою**
`com.ffalconxr.mercury.launcher/.home.LauncherHomeActivity`. Ручной HOME-intent
(`am start -a MAIN -c HOME`) открывает наш `MainActivity` правильно — то есть наш
домашний экран рабочий, но boot-резолв перехвачен Mercury.
2. **Mercury-лаунчер убрать нельзя.** `pm disable-user com.ffalconxr.mercury.launcher`
применяется (`enabled=0`), но system_server всё равно стартует Mercury при буте
(PID uid system), и **его BLE продолжает работать** (телефон по Bluetooth соединяется).
Значит: убийца `BackgroundAppManager` присутствует всегда → стража
NetConfigActivity-на-скрытом-дисплее **обязательна**. Отключение лаунчера проблему не решает.
3. **BLE жив всегда.** Раз Mercury стартует при буте в любом случае, Channel 2 (BLE:
запуск приложения, яркость, WiFi, статус) доступен всегда. Это надёжный канал.
4. **`com.rayneo.mercury.app=true`** у нас уже стоит в манифесте, но **иммунитета от
убийцы не даёт** — нас всё равно убивало.
## Про adb-бутстрап Shizuku после ребута
| Способ | Результат |
|--------|-----------|
| legacy plain-TCP `persist.adb.tcp.port` / `service.adb.tcp.port` из shell (uid 2000) | ❌ SELinux запрещает (`Unable to set property ... adbd_config_prop, u:r:shell:s0`) |
| Wireless-ADB `settings put global adb_wifi_enabled 1` | ⚠️ включается, но сбрасывается ребутом и требует подключённого WiFi; при выключенном WiFi очки полностью пропадают из сети |
| «Второй adbd» на `127.0.0.1:8872` | ❌ это не adbd, а Bluetooth HCI-snoop (`btsnoop`), uid android.uid.bluetooth |
| Единственный настоящий adbd | штатный `adbd --root_seclabel=u:r:su:s0` (uid shell), слушает USB/WiFi |
**Вывод:** автономного сетевого бутстрапа Shizuku без WiFi у нас нет. После ребута
очки оживают либо через USB, либо через WiFi+wireless-adb (если сеть есть).
Self-bootstrap (встроенный adb-клиент в приложении + авторизованный ключ) возможен,
но только когда сеть уже поднята, т.е. холодный старт им не закрыть.
## RayDesk (github.com/Quad-Labs/RayDesk) — почему «без приседаний»
RayDesk — Moonlight-клиент: стримит рабочий стол ПК в **свой** GL-рендер. Он:
- НЕ создаёт VirtualDisplay, НЕ использует Shizuku, НЕ запускает чужие Activity;
- «оба глаза» = свой `TextureView` (левый) + Mercury SDK `MirroringView` (правый);
- использует проприетарный Mercury SDK (`BaseMirrorActivity`, `TempleAction`), нужен
developer access от RayNeo.
Их подход **неприменим** к нашей задаче: мы запускаем чужие приложения на VD — это
принципиально другой сценарий. Заимствовать нечего (наш meta-data уже стоит).
## Остаётся рабочих варианта
- **A (текущий):** Mercury живёт как сервис (BLE + убийца), стража NetConfigActivity
держит гостя, Shizuku держим (USB / wireless-adb при наличии WiFi).
- **B:** встроить в приложение adb-клиент (dadb) + один раз авторизовать наш ключ —
поднимает Shizuku по сети, когда WiFi есть (не закрывает холодный старт без сети).
---
## Журнал (детали по этапам)
### Этап A/B — HOME после ребута
- Назначили наш пакет дефолтным HOME. После ребута `topResumedActivity=`
`com.ffalconxr.mercury.launcher/.home.LauncherHomeActivity` — нас система не подняла.
- `resolve-activity` при этом указывает на нас (`isDefault=true`) — то есть boot идёт
мимо обычного HOME-резолва (ROM-патч).
### Этап C — adb после ребута
- `settings put global adb_wifi_enabled 1` ✅ (запись из shell проходит).
- `setprop service.adb.tcp.port` / `persist.adb.tcp.port` ❌ SELinux.
- boot-лог: `AdbDebuggingManager: Not connected to any wireless network. Not enabling adbwifi.`
- Wireless-adb поднялся по WiFi: `adb connect 192.168.76.248:40481` → `device`.
### Этап D — WiFi off (ложная «тыква»)
- При `svc wifi disable` очки пропали из сети полностью (ping unreachable) — wireless-adb
живёт на WiFi-интерфейсе, loopback снаружи недоступен. Внутренний loopback не проверялся.
### Этап E — отключение Mercury
- `pm disable-user` → `enabled=0`, но после ребута Mercury запущен и держит стол;
телефон по BLE соединился. Откат: `pm enable --user 0 com.ffalconxr.mercury.launcher`
выполнен (`enabled=1`).
### Ложная зацепка
- `127.0.0.1:8872` (uid 1002) — при коннекте отдаёт поток с магией `btsnoop` → это
Bluetooth HCI-логгер, не adbd. ADB-хендшейк не проходит.