← 回工程日志
# #6 把已有网站打包成一个安卓APP:名称「夜神」;首页三个入口——晚风9000、幽灵9001、任务系统
归属日期: 2026-10-20
序号: 6
当前状态: 📌 待做(第1次)
被接手次数: 0
该任务出现时间为
2026-10-20-本次第一次
---
## 2026-10-20 预研(登记人:晚风-DeepSeek,未执行,供接手者直接开工)
### 要做什么
1. 出一个可安装的安卓 APK,应用名「夜神」。
2. 首页三个入口,点进去直接加载现有网页(不重写页面):
- 晚风 9000 → `https://192.168.13.176:9443`
- 幽灵 9001 → `https://192.168.13.229:9001`
- 任务系统 → `https://192.168.13.176:9445`
3. 加系统通知:任一会话跑完,手机通知栏弹一条。
### 不做什么
- 不重写、不改动任何现有页面与界面。
- 不做从零原生的第二套 UI。
- 不上架应用商店(自用,自签安装即可)。
### 已实测前提(2026-10-20 晚风实测,可直接引用)
| 项目 | 实测结果 |
|---|---|
| 晚风 9443 | `curl -sk https://192.168.13.176:9443/` → 200 |
| 幽灵 9001 | `curl -sk https://192.168.13.229:9001/` → 200,证书 CN=192.168.13.229,链深度 2 |
| 任务系统 9445 | `curl -sk https://192.168.13.176:9445/` → 200 |
| 证书 | 设备已安装 Yeshen LAN CA(用户 2026-10-20 装成并重启验证:9001 已能装成真应用)|
| 9001 可安装硬条件 | `sw.js` 含 `addEventListener('fetch')`(计数 1)→ 安卓 Chrome 认可为可安装 ✓ |
| 9000 可安装硬条件 | A 机 `hermes_bridge.py` 的 `SW_JS` **无 fetch 监听**(计数 0)→ 装 9000 应用前必须先补,改完重启桥生效 |
### 技术路线(建议)
1. 用 **Capacitor**(把网页装进安卓 WebView 的壳,中文理解:给网站做一副自己的壳和钥匙)打包,不重写页面。
2. 环境:A 机已有 node 26.7.0;**缺 Android SDK + JDK + Gradle**(一次性下载数 GB),装好后 `npx cap add android` → `assembleDebug` 出 APK。
3. 通知:WebView 内的网页发不了系统通知,必须由原生侧接(Capacitor 的 LocalNotifications 插件,或改用服务端推送 + 原生接收)。
4. 自签 APK 直接侧载安装,不需要开发者账号。
### 交付物
- 可安装的 APK 文件(放在 A 机可下载路径,给出下载地址)。
- 安装说明:装前要确认设备已装 Yeshen LAN CA;三星/小米需允许"安装未知来源"。
### 遗留/卡点
- 尚未开工,环境未搭。
- 9000 侧 SW 的 fetch 监听缺失是已知前置项,装 9000 前必须补。
## 2026-10-20 第1次 · 幽灵执行完成(待阿夜验收)
执行人:幽灵(电脑B,模型 qwen3.8-flash-next-iq3_xxs,14:00 定时任务接单)
### 交付物
- APK:`~/桌面/夜神APP/夜神-v1.0.apk`(电脑B;105,584 字节;包名 com.yeshen.app v1.0 versionCode 1;minSdk 26/target 33;debug 自签,SHA-256 9171200cf3ee...582c1)
- 中转站:8001 「夜神APP」目录内 `夜神-v1.0.apk` + `安装说明.md`(阿夜手机浏览器直开下载)
- 安装说明:`~/桌面/夜神APP/安装说明.md`
- 源码:`~/桌面/夜神APP/yeshen-app/`(AGP 8.2.2 + Gradle 8.7 + JDK17 + SDK34,纯 Java 无第三方依赖)
### 实现(按条目口径)
- 首页三入口 = assets/home.html 三卡片 → WebView 直接加载 9443/9001/9445 现有页面,未重写任何现有页面界面
- 通知 = APK 内前台服务 NotifyPollService 每 20 秒轮询:聊天站 GET /api/sessions + /api/activity(running true→false 或 message_count 落定增长 → 弹「会话跑完」);任务系统 GET /api/tasks(done false→true → 弹「任务完成 #N」);首轮只建基线不弹旧账
- 自签证书:WebView onReceivedSslError proceed + 轮询侧信任(说明文档已写一句)
### 真跑证据
1. 构建:`gradle --no-daemon assembleDebug` → `BUILD SUCCESSFUL in 47s`(build.log 留档于 yeshen-app/)
2. 包验证:`apksigner verify` → debug 证书 OK;`aapt2 dump badging` → `application-label:'夜神'`、INTERNET/POST_NOTIFICATIONS/FOREGROUND_SERVICE 权限齐全;APK 内含 `assets/home.html`、`res/drawable/ic_stat.png`
3. 检测逻辑 PC 实测(复刻 APK 判定逻辑对真三站跑轮询):
- 聊天站信号:晚风 60 会话 / 幽灵 45 会话 /api/sessions 200,/api/activity 抽样 6 个/站正常返回 running 字段
- 任务侧:制造真实事件(任务#1 toggle 关→开,HTTP 303×2)→ 轮询捕获 `事件·任务完成 #1:【承接自 10-18】企业微信通道…`(14:10:39);随后复原 #1=done=false 并核对 ✓(已在 #1 条目补备注说明演练)
4. 中转站验证:`POST 8001/api/upload` → `{"ok": true, "saved": ["夜神-v1.0.apk"]}`;`GET /api/files` 含 夜神APP;`GET /f/夜神APP/夜神-v1.0.apk` → 200
### 未完成事项(如实)
- 真机安装+弹窗验收未做(此刻无手机 USB/adb 连接):检测判定与信号源已在电脑B实测命中,但「手机真弹系统通知」最后一步要阿夜安装后确认(Android 13+ 装完须允许通知权限)
- 通知为 20 秒轮询制,会话跑完最多延迟约 20 秒;APP 被划掉即停止轮询
电脑A 10-20 22:29