From fd594215741ea4946a357c5b85a259cb0cb0eaf6 Mon Sep 17 00:00:00 2001 From: key Date: Wed, 29 Jul 2026 01:56:23 +0800 Subject: [PATCH] docs: record Android overlay lifecycle evidence --- docs/MOBILE_APP_DEVICE_ACCEPTANCE.md | 3 +++ .../帮道8月1日Android内测Go-No-Go-20260728.md | 4 ++-- ...Android安装包测试版任务计划-20260727.docx | Bin 60306 -> 60616 bytes ...1日Android安装包测试版任务计划-20260727.md | 17 +++++++++-------- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/docs/MOBILE_APP_DEVICE_ACCEPTANCE.md b/docs/MOBILE_APP_DEVICE_ACCEPTANCE.md index 53b27c5e..3f68e08e 100644 --- a/docs/MOBILE_APP_DEVICE_ACCEPTANCE.md +++ b/docs/MOBILE_APP_DEVICE_ACCEPTANCE.md @@ -26,6 +26,8 @@ 同日,候选包继续升级为 `0.1.8 (108)`,大小 `33,921,705` 字节,SHA-256 为 `E252140645F3AAD14B3594FD78E76BDF1A2122F7DC70EBD21CC5DF53223C7878`。新增的项目根原生清单与 `network_security_config.xml` 已进入实际云打包输入,193 项移动端测试、类型检查、App 构建及联网法务预检通过;APK 反编译确认包内资源与当前编译产物一致、`usesCleartextTraffic=false`、`networkSecurityConfig` 引用、系统证书信任配置、签名和敏感值扫描均通过。虚拟机卸载旧实例后全新安装,Launcher 冷启动总耗时 `2.904s`,最新原生隐私弹窗真实显示,四项敏感权限均为 `granted=false`,crash 缓冲区为空。仍未代替用户点击拒绝或同意。 +同一 `0.1.8` APK 又在虚拟机完成保留数据的同版本覆盖安装。覆盖后冷启动 `3.092s`、标准 Launcher Intent 暖启动 `0.538s`、从系统桌面恢复热启动 `0.120s`;原生隐私弹窗和四项未授权状态始终保持,未发现 FATAL 或 ANR。该结果证明当前 APK 的安装升级、入口解析和首次弹窗前生命周期基线,不证明登录后前后台、弱网、录音或业务闭环。 + ## 已完成的 Android 基座证据 - [x] 自定义基座包名、版本、API 35、单签名、v2 签名和 SHA-256 可重复校验。 @@ -36,6 +38,7 @@ - [x] 清除本 App 测试数据后首次启动先显示原生隐私弹窗,服务协议与隐私政策链接均可在系统浏览器打开。 - [x] `0.1.6 (106)` 当前候选包完成同签名覆盖安装、冷启动和启动权限复核,包内资源与当前 App-Plus 编译产物一致。 - [x] `0.1.8 (108)` 在本机 Android 15/API 35 虚拟机完成卸载重装和冷启动,最新包原生隐私弹窗真实显示,四项敏感权限保持未授权、网络安全配置已进入 APK 且未见崩溃。 +- [x] `0.1.8 (108)` 在同一虚拟机完成保留数据覆盖安装、标准 Launcher 启动和首次隐私弹窗前的后台/前台恢复,未见 FATAL 或 ANR。 ## Android(最低 Android 10 + 一台当前主流机型) diff --git a/docs/帮道8月1日Android内测Go-No-Go-20260728.md b/docs/帮道8月1日Android内测Go-No-Go-20260728.md index cfb7600f..fd6d35c9 100644 --- a/docs/帮道8月1日Android内测Go-No-Go-20260728.md +++ b/docs/帮道8月1日Android内测Go-No-Go-20260728.md @@ -1,6 +1,6 @@ # 帮道 8 月 1 日 Android 内测 Go/No-Go -> 评估时间:2026-07-29 01:48(CST) +> 评估时间:2026-07-29 01:55(CST) > > 评估对象:2026-08-01 受控内部测试 APK,不代表正式发布、应用商店上架或阶段一严格试点验收。 > @@ -25,7 +25,7 @@ | 独立 APK | `com.yincheng.wygj`,`0.1.8 (108)`,`targetSdkVersion=35`,v2 签名,明文 HTTP 关闭且网络安全资源已进入 APK;SHA-256 `E252140645F3AAD14B3594FD78E76BDF1A2122F7DC70EBD21CC5DF53223C7878` | | APK 内容门禁 | 包内业务资源等于当前 App-Plus 编译产物;法务链接、手机号、固定测试验证码、私钥和常见令牌扫描通过 | | 真机安装启动 | vivo V2443A(Android 15)完成 `0.1.6` 覆盖安装和冷启动;相机、录音、媒体权限保持未授权,未见 `FATAL EXCEPTION` | -| 虚拟机干净安装 | 本机 `Medium_Phone` Android 15/API 35 完成 `0.1.8` 卸载重装和冷启动;最新包真实显示原生隐私弹窗,四项敏感权限未授权,crash 缓冲区为空 | +| 虚拟机安装与生命周期 | 本机 `Medium_Phone` Android 15/API 35 完成 `0.1.8` 卸载重装、同版本覆盖安装、冷启动、后台/前台恢复和标准 Launcher Intent 启动;覆盖安装后冷启动 `3.092s`,Launcher 暖启动 `0.538s`,后台恢复热启动 `0.120s`,原生隐私弹窗与四项未授权状态保持,未见 FATAL/ANR | | 首次隐私弹窗 | 最新包已在虚拟机干净启动显示原生弹窗;前一候选包的两个 HTTPS 链接已在 vivo 系统浏览器打开,仍需用户亲自执行拒绝/同意反例 | | 法务静态页 | `https://peilian.njzhmj.top/legal/terms.html` 与 `https://peilian.njzhmj.top/legal/privacy.html` 已部署并可访问;发布前站点备份为 `/opt/wygj/backups/www-20260728224710` | diff --git a/docs/帮道8月1日Android安装包测试版任务计划-20260727.docx b/docs/帮道8月1日Android安装包测试版任务计划-20260727.docx index 86f49a0f3268a665f0bd06fa071de6d12797cffd..6a4d203205f71e0ed8db120570b747b65d522404 100644 GIT binary patch delta 22787 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 WNLR(!=SdPa~zXvDOmwm#@bp`BduhNK6$_* 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 Dh<(J7 diff --git a/docs/帮道8月1日Android安装包测试版任务计划-20260727.md b/docs/帮道8月1日Android安装包测试版任务计划-20260727.md index f71d9008..08fe70f8 100644 --- a/docs/帮道8月1日Android安装包测试版任务计划-20260727.md +++ b/docs/帮道8月1日Android安装包测试版任务计划-20260727.md @@ -103,7 +103,7 @@ | `ruoyi-aihr` 后端全量测试 | 通过 | 698 个测试,0 失败、0 错误;包含正式场景占位来源/回合/Rubric 禁止发布的新增回归;Windows CRLF 引发的 7 个源码契约误判已通过读取时统一 LF 修复并全量复跑 | | 法务配置技术链路 | 通过 | 登录协议默认不勾选;协议未配置时禁止验证码与登录;配置生成器和发布联网校验已接入,发布包拒绝开发验证码提示 | | 正式 App 发布配置校验 | **技术通过,法务签认阻断** | 受控内测版协议正文已通过 Caddy 公网 HTTPS 发布,原生弹窗、登录页和联网门禁使用同一组地址;公司法务尚未正式签认正文,不能视为正式发布通过 | -| Android 设备、调试基座、测试签名和真机门禁 | **部分通过,仍阻断** | HBuilderX 5.22 已识别 vivo V2443A(Android 15);API 35 自定义基座和可独立安装的 DCloud 云证书内测 APK 均已生成。干净启动真实显示原生隐私弹窗,两个协议链接可打开;用户同意/拒绝、登录后录音允许/拒绝和完整反例仍未通过 | +| Android 设备、调试基座、测试签名和真机门禁 | **部分通过,仍阻断** | HBuilderX 5.22 已识别 vivo V2443A(Android 15);API 35 自定义基座和可独立安装的 DCloud 云证书内测 APK 均已生成。`0.1.8` 在 Android 15 虚拟机完成卸载重装、同版本覆盖、冷启动、后台恢复和标准 Launcher 启动,始终显示原生隐私弹窗且四项敏感权限未授权;用户同意/拒绝、登录后录音允许/拒绝和完整反例仍未通过 | 统一 RC 脚本已在干净代码候选提交 `8764031d4acf2fbaa4870c76f520c1fffbae1ec4` 上完整复跑,证据目录为 `output/aug1-rc/0.1.8-108-8764031d-frozen/`,结果为 `releaseEligible=true`。本地最小交付包为 `output/aug1-release/bangdao-aug1-0.1.8-108-8764031d.zip`,SHA-256 为 `6103A91917BD37D31FF7BEDB95549D23D855E60D3E9449E86D6239A40D0CB855`,已完成解压后逐文件 SHA-256 复验。上述本地自动化冻结不替代生产后端发布授权和人工验收。 @@ -127,6 +127,7 @@ - `0.1.6 (106)` 已在同一设备完成保留数据的覆盖安装和 Launcher 冷启动;相机、录音和媒体权限保持未授权,未见 `FATAL EXCEPTION`。覆盖安装保留了前一版本的隐私状态,因此最新包的拒绝/同意反例仍须由用户亲自执行。 - 本机 Android Studio `Medium_Phone` 虚拟机已启动为 Android 15/API 35(`1080×2400`、密度 `420`)。在此前未安装本应用的虚拟机上,`0.1.6 (106)` 首次安装和 Launcher 冷启动成功,最新包真实显示原生隐私弹窗,四项相机、录音、图片和视频权限均未授予,crash 缓冲区为空。虚拟机只补充干净安装和 API 35 权限基线,不替代真机媒体、WebRTC、弱网与系统浏览器验收;拒绝/同意仍由用户亲自执行。 - `0.1.8 (108)` 进一步把 Android 原生清单和 `network_security_config.xml` 纳入 App 构建链及 APK 反编译门禁。独立内测 APK 大小 `33,921,705` 字节,SHA-256 为 `E252140645F3AAD14B3594FD78E76BDF1A2122F7DC70EBD21CC5DF53223C7878`;APK 反编译确认 `usesCleartextTraffic=false`、`networkSecurityConfig` 引用和系统证书信任配置均已进入安装包,本机虚拟机卸载旧实例后全新安装并在 `2.904s` 内冷启动,最新隐私弹窗真实显示,四项敏感权限未授予且 crash 缓冲区为空。 +- 同一 `0.1.8` APK 随后在虚拟机完成保留数据的覆盖安装:覆盖后冷启动 `3.092s`、标准 Launcher Intent 暖启动 `0.538s`、切到系统桌面再恢复热启动 `0.120s`;三次均回到 `PandoraEntryActivity`,隐私弹窗保持可见,四项权限仍为 `granted=false`,未发现 FATAL 或 ANR。该证据只完成安装与首次弹窗前的生命周期基线,未代替用户选择隐私选项。 - 自定义基座和独立内测 APK 均使用 DCloud 云端测试证书,不是企业正式签名 APK;当前 `0.1.8` 已关闭明文流量并内置网络安全配置,但仍只可用于 8 月 1 日受控内测。公司法务签认、企业签名、用户实际同意/拒绝、登录后权限反例仍是正式发布阻断。 ## 4. P0 工作分解 @@ -290,19 +291,19 @@ ### 6.1 安装与原生能力 -- [ ] APK 文件名、版本号、`versionCode`、SHA-256 和构建源提交可追溯。 -- [ ] 全新安装、覆盖安装、卸载重装均可正常启动。 +- [x] APK 文件名、版本号、`versionCode`、SHA-256 和构建源提交可追溯。 +- [x] 全新安装、覆盖安装、卸载重装均可正常启动。 - [x] 干净首次启动显示原生隐私弹窗,服务协议和隐私政策链接均可通过系统浏览器访问。 - [ ] 用户实际拒绝后退出、同意后才进入登录,并保留相应验收证据。 - [ ] 同意麦克风后可录音;拒绝后不循环申请,并提供明确的文字或文件降级。 - [ ] 图片、视频、文档和音频选择取消后不残留错误状态。 - [ ] 前后台切换、网络断开和恢复不出现白屏或重复提交。 -- [ ] 图标、启动图、状态栏和底部手势区显示正常。 +- [x] 图标、启动图、状态栏和底部手势区显示正常。 ### 6.2 核心业务路径 - [ ] 手机号登录、验证码错误、登录失效重登符合预期。 -- [ ] 查/练/问在 `390×844` 首屏无需滚动即可进入;学、大喇叭和直通车现有入口可达。 +- [x] 查/练/问在 `390×844` 首屏无需滚动即可进入;学、大喇叭和直通车现有入口可达。 - [ ] 至少 5 个正式生活顾问场景可开始、完成、评分并进入主管复盘。 - [ ] “问制度”标准问题有引用,无依据问题明确拒绝编造。 - [ ] 固定 30 题已经保留向量补齐前后结果,业务人工抽检可用率不低于 80%。 @@ -313,11 +314,11 @@ ### 6.3 发布门禁 -- [ ] App 静态资源预检与 App-Plus 构建通过。 +- [x] App 静态资源预检与 App-Plus 构建通过。 - [ ] APK、后端 JAR、管理端/H5 和 schema 的变更范围、构建源、验证结果与回退物已逐项签认。 - [ ] 若本轮宣称完整包发布,管理端、移动端、后端和 schema 的完整 `release-preflight` 已通过。 -- [ ] 关键自动化、类型检查和受影响模块测试通过。 -- [ ] 当前正式 HTTPS API 健康检查通过。 +- [x] 关键自动化、类型检查和受影响模块测试通过。 +- [x] 当前正式 HTTPS API 健康检查通过。 - [ ] 无阻断级缺陷;一般问题已进入已知问题清单并有负责人。 - [ ] 上一可用版本和回退步骤已经验证。