# 分屏激活：直接 ADB / Shizuku

分屏可选择「直接 ADB」或「Shizuku」，两种入口并存。Shizuku 的启动、授权及「授权 Shizuku」入口继续保留。车辆数据仍由应用普通 UID 通过 VDBUS 读取，不依赖这两种分屏激活方式。

## 直接 ADB 激活

1. 先安装包含此功能的新版 APK，打开应用的分屏页面，选择「直接 ADB」。
2. 在电脑执行下方一行命令，将 `DEVICE_SERIAL` 替换为已授权目标设备的序列号。命令与 `AdbSplitMain.kt` 的 `AdbSplitCommand.command` 一致：

```sh
adb -s DEVICE_SERIAL shell 'apk=$(pm path --user 0 dev.vehiclelab | head -n 1 | cut -d: -f2); if [ -n "$apk" ]; then CLASSPATH="$apk" nohup app_process /system/bin dev.vehiclelab.split.bridge.AdbSplitMain dev.vehiclelab >/data/local/tmp/vehiclelab-split.log 2>&1 </dev/null & fi'
```

3. 返回分屏页面，点击「重新连接」，先通过 `probe` 检测后台权限及系统窗口能力，再选择应用并操作。管理器会在执行窗口或系统设置操作前再次检测相应权限；检测失败时按提示处理。
4. 默认布局为左 30%、右 70%。是否支持目标布局、窗口是否真正生效，以设备上的能力检测及窗口边界回读为准。

直接 ADB 后台以 shell UID 2000 运行。shell 权限不等于永久全权：实际能力仍受系统权限、固件和窗口实现限制，也不会让应用普通 UID 自动获得这些权限。

## 有效期与排查

后台绑定应用进程生命周期，应用进程死亡时退出。设备重启、强制停止（`force-stop`）或更新 APK 后需重新执行激活命令，再点击「重新连接」。普通切换到后台不代表应用进程已经死亡；系统回收进程后才需重新激活。

查看激活日志：

```sh
adb -s DEVICE_SERIAL shell cat /data/local/tmp/vehiclelab-split.log
```

## 验证记录（2026-10-28）

API30 / Android11、2560×1440 开发模拟器，adb shell 为 UID2000，无 root：

- 一行命令激活成功；软件诊断显示「直接 ADB」、后台 UID2000，MANAGE_ACTIVITY_STACKS / WRITE_SECURE_SETTINGS 为 true，应用自身均为 false。
- 时钟与设置实际形成两个独立 freeform 任务，窗口可见；左窗口约 30%、右约 70%，恢复全屏成功。
- 切到 Shizuku 后连接及同一组权限检测通过。
- AdbActivationSecurityTest 通过：普通应用 UID 无权调用激活入口。
- 强制停止应用后，直接 ADB 进程退出；Shizuku 自己管理其后台生命周期。
- 分屏模块单元测试与 APK 构建通过。

未连接实车。德赛车机 shell 在固件静态 Manifest 中声明了握手所需权限，实际 OEM 策略仍需实车验证。当前直接 ADB 握手适配本车 Android11（API30）、主用户0；不可当作其他 Android 版本/用户已经验证。
