# 修复 QSJNIC 双 service 进程操作步骤

## 现象
车机出现两个 `com.qsjnic.mcu.service` 进程，同时占用 `/dev/ttyS7`，导致串口冲突。

## 根因
User 10 下运行的旧版 Demo（SDK beta7）没有 `INTERACT_ACROSS_USERS_FULL` 权限，无法跨用户绑定 User 0 的 singleUser service，系统被迫在 User 10 下新建一个 service 进程。

---

## 操作步骤

### 第一步：连接车机 ADB

```bash
adb connect 192.168.x.x:5555
```

### 第二步：停止所有 QSJNIC Demo 进程

```bash
adb shell am force-stop com.qsjnic.demo.vehicle
adb shell am force-stop com.qsjnic.demo.radio
adb shell am force-stop com.qsjnic.demo.ota
```

### 第三步：杀掉 User 10 下被拉起的 service 进程

```bash
adb shell am force-stop com.qsjnic.mcu.service
```

### 第四步：卸载所有旧版本 Demo

```bash
adb uninstall com.qsjnic.demo.vehicle
adb uninstall com.qsjnic.demo.radio
adb uninstall com.qsjnic.demo.ota
```

### 第五步：安装 beta11 新版 Demo

```bash
adb install /Users/admin/workspace/jyq/qsjnic/release/v1.0.0-beta11/qsmw-vehicle-demo.apk
adb install /Users/admin/workspace/jyq/qsjnic/release/v1.0.0-beta11/qsmw-radio-demo.apk
adb install /Users/admin/workspace/jyq/qsjnic/release/v1.0.0-beta11/qsmw-ota-demo.apk
```

### 第六步：验证是否只剩一个 service 进程

```bash
adb shell ps -ef | grep com.qsjnic.mcu.service
```

预期结果只有 1 个进程，用户为 `system`：

```text
system  3031  671  ...  com.qsjnic.mcu.service
```

### 第七步：验证串口是否只被一个进程占用

```bash
adb shell su root lsof | grep ttyS7
```

预期结果只有 1 个 `/dev/ttyS7` 持有者。

### 第八步：启动新版 Vehicle Demo 验证跨用户绑定

```bash
adb shell am start -n com.qsjnic.demo.vehicle/.MainActivity
```

查看日志，确认出现 `bindServiceAsUser(..., user=0)`：

```bash
adb shell logcat -s McuClient:* | grep bindService
```

预期输出：

```text
McuClient: bindServiceAsUser(cn.qsjnic.IMcuService pkg=com.qsjnic.mcu.service, user=0) -> true
```

---

## 注意事项

- 必须先 force-stop Demo，再 force-stop service，否则 Demo 可能立即把 service 重新拉起来。
- 如果只杀掉 service 但不卸载旧 Demo，下次打开 Vehicle Demo 仍会复现双 service。
- 安装新版 Demo 后建议顺便检查 service 版本：`adb shell dumpsys package com.qsjnic.mcu.service | grep versionName`
