# OTA Dev 测试套件

> **内部测试专用，禁止用于量产。**  
> Service 权限已降级为 `normal`，不具备生产安全性。

---

## 1. 套件内容

| 文件 | 包名/说明 |
|---|---|
| `qsmw-service-dev.apk` | `com.qsjnic.mcu.service.dev`，权限 `normal` |
| `qsmw-sdk-dev.aar` | SDK，绑定 `.dev` service |
| `qsmw-contract-dev.aar` | Contract，含 AIDL + domain 类 |
| `ota-demo-dev.apk` | OTA Demo，绑定 `.dev` service |

---

## 2. 前置条件

- RTD1861 / Android 14，adb 可用
- `/dev/ttyS7` 存在
- 无需平台密钥

---

## 3. 安装

```bash
adb push ../mcu_app.bin /data/local/tmp/mcu_app.bin
adb install -r qsmw-service-dev.apk
adb install -r ota-demo-dev.apk

# 修复串口权限（测试环境）
# 如果 adb shell 直接就是 root，用下面两句：
adb shell chmod 666 /dev/ttyS7
adb shell setenforce 0

# 如果提示权限不足，先执行 adb root 再重试：
# adb root
# adb wait-for-device
# adb shell chmod 666 /dev/ttyS7
# adb shell setenforce 0
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n com.qsjnic.mcu.service.dev/com.qsjnic.mcu.service.BootCompletedReceiver
adb shell am start -n com.qsjnic.demo.ota/.MainActivity
```

---

## 4. 验证 Service 连接

```bash
adb shell dumpsys activity service com.qsjnic.mcu.service.dev
```

预期输出包含 `Link alive: true` 和 `Link open: true`。

---

## 5. OTA 复现流程

### 5.1 升级前版本记录

读取当前 MCU 版本并记录。

### 5.2 启动 OTA

车机上点击 **Start OTA**，状态机预期：

```
IDLE → REQUEST → BEGIN → WAIT_LEN → DATA → END → COMPLETE
```

### 5.3 核心验证：MCU 不自动重启

OTA 显示 COMPLETE 后，**保持通电**，立即重新读取 MCU 版本。

- **预期**: 版本号未变，旧固件仍在运行。

### 5.4 断电重启验证

1. 整车断电 ≥10s
2. 重新上电
3. 再次读取 MCU 版本

- **预期**: 版本号变为 `E112C069XZA0120016`。

---

## 6. 日志过滤

```bash
adb logcat | grep -E "OtaDemo|UpgradeManager|McuLink|FrameRouter"
```

关键标志：
- `McuUpgrade: [UPGRADE] chunk=X/211` — 数据传输正常
- `UpgradeManager: Upgrade complete` — 升级成功
- 无 `FATAL` / `ANR` / `SecurityException`

---

## 7. 常见问题

| 现象 | 原因 | 解决 |
|---|---|---|
| Demo 闪退 / SecurityException | 产线版 service 与 dev demo 包名冲突 | `adb uninstall com.qsjnic.mcu.service` |
| Link open: false | 串口权限或 SELinux | `chmod 666 /dev/ttyS7 && setenforce 0` |
| Start OTA 失败 | bin 文件缺失 | 确认 `/data/local/tmp/mcu_app.bin` 存在 |
| WAIT_LEN 卡住 | MCU 未预热 | 先发送 Public 业务帧唤醒 |
| DATA 阶段卡住 | MCU 固件死锁（特定版本）| 断电 ≥30s 恢复 |

---

## 8. 清理

```bash
adb uninstall com.qsjnic.mcu.service.dev
adb uninstall com.qsjnic.demo.ota
```

---

## 9. 与产线版本差异

| 维度 | dev 版 | 产线版 |
|---|---|---|
| Service 包名 | `.service.dev` | `.service` |
| 权限 | `normal` | `signature\|privileged` |
| 安装 | `adb install` | 需平台密钥或 `/system/priv-app/` |
| 安全性 | 仅测试 | 量产可用 |

