Files
tongxunruanjian/docs/acceptance/b197-cross-platform-regression.md
T
2a817e77d8 docs: 记录 B-197/B-198 跨端构建修复与验收
补记 Dart/Gradle/锁文件提交 SHA、debug/release 与 PC 重构建命令、产物 SHA256、启动冒烟、未测项与回退。不宣布运行回归通过。

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: multica-agent <github@multica.ai>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-20 06:16:08 +08:00

151 lines
8.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# B-197 / B-198 跨端构建修复与验收记录
分支:`agent/agent/7b089146`(本卡工作树 `agent/agent/2cae90a2`
构建基线 HEAD`2c81a11e03411fa1b033f0f74cd49139e258d1d3`
越界对比基线:`e26abad`
本卡只做构建修复与验收记录,不部署、不发布、不换标。
B-197 已真实打通 PC 与 Android debug/release,但修复仅在部署工程师本机工作树。本文件记录 B-198 复核后的入库提交与**重新真实构建**结果。
**结论:安装包构建与 PC 启动冒烟通过。登录、收发、语音、同步等运行时回归未测,不得视为跨端运行验收通过。**
## 提交主题(可逐项 `git revert`
从新到旧回退:先本验收记录,再锁文件,再 Gradle 堆,再 Dart 编译修复。
| 主题 | SHA | 文件 |
|---|---|---|
| 本验收记录 | 本文件当次提交 | `docs/acceptance/b197-cross-platform-regression.md` |
| 同步 package-lock 根版本号 1.0.2 | `c150033b39d047852eb1baed1d55b1726a24e65a` | `pc-client/package-lock.json` |
| Android Gradle 堆 4096M | `5160c8ec87f794f75a2ab2e06632a88c35f2d2e1` | `mobile-next/android/gradle.properties` |
| FeatureFlags 导入 + 去掉预览 const | `1767cf2547ca58102ba3734c06ae73ce85e646a2` | `personal_info_view.dart``chat_picture_preview.dart` |
回退示例(新到旧):
```
git revert <本验收提交>
git revert c150033b39d047852eb1baed1d55b1726a24e65a
git revert 5160c8ec87f794f75a2ab2e06632a88c35f2d2e1
git revert 1767cf2547ca58102ba3734c06ae73ce85e646a2
```
回退不影响 `mobile/``account-service/``config/``scripts/`、现网服务与已发布安装包。
## 复核的 4 处改动
1. `mobile-next/lib/pages/contacts/user_profile_panel/personal_info/personal_info_view.dart:6``../../../company``../../../../company`。该文件在 `personal_info/` 下,相对 `lib/` 需要四层。目标模块是 `lib/company/feature_flags.dart``FeatureFlags`,未引入其它模块。
2. `mobile-next/openim_common/lib/src/widgets/chat/chat_picture_preview.dart:97`:去掉 `Center` 外层 `const``Styles.c_0089FF` 定义为 `static Color`(非 const)。未改 SizedBox / CircularProgressIndicator,未做额外格式化。
3. `mobile-next/android/gradle.properties``org.gradle.jvmargs=-Xmx1536M``-Xmx4096M`。B-197 在 1536M 上 release 报 `Java heap space`;本卡用 4096M 重新打通 debug 与 release。未再试 2048M/3072M(缺少真实 release 证明),故采用已证明稳定的 4096M。
4. `pc-client/package-lock.json`:仅根节点 `"version": "1.0.1"``"1.0.2"`,与 `package.json` 的 1.0.2 对齐。`lockfileVersion` 仍为 3,无依赖树或包升级。其它 npm 回写视为环境噪音,未入库。
## Gradle 机器内存要求
- 配置:`mobile-next/android/gradle.properties``org.gradle.jvmargs=-Xmx4096M`(与 `docs/upstream/build-and-rollback.md``GRADLE_OPTS=-Xmx4096M` 一致)。
- 机器:JVM 堆预留 4GB。建议物理内存 ≥ 8GB(堆 + Gradle daemon + 系统);本机构建机约 64GB,构建时未再出现 heap space。
- 1536M 不能作为 release 稳定值。
## 环境
- Flutter 3.24.5 / Dart 3.5.4`C:\flutter324`
- Temurin JDK 17.0.20
- Android SDK:既有 B-95 工具链(build-tools 36.0.0platforms 含 compileSdk 34
- Node v24.18.0 / npm 11.16.0`C:\Program Files\nodejs`
- `npm install``husky install || true` 在 Windows cmd 下仍以 exit 1 结束(已知非阻塞);`node_modules` 可用,后续 vite / electron-builder 成功。
## 检查与构建
### Dart
- 对上述两文件做过 `dart format`,但**未提交格式化换行**,只保留两处语义改动。
- 定点 `flutter analyze``personal_info_view.dart` 0 issues`chat_picture_preview.dart``invalid_constant`,仅存量 `must_be_immutable` / `use_super_parameters`
- 全量 `flutter analyze`mobile-next):**553 issues**(约 18 error / 87 warning / 448 info)。error 全为存量:`local_plugin/flutter_download_manager/example``openim_common``push_controller.dart` / `custom_mk_controls.dart`。本卡两文件无新增 error。
### Android(必须重新真实构建)
命令(`mobile-next/`):
```
flutter pub get
flutter build apk --debug
flutter build apk --release
```
| 构建 | 结果 | 大小 | SHA256 | 产物 |
|---|---|---|---|---|
| debug | 成功 | 109,391,065 B | `CE01F30CAFBA24CAFD686F0CFB32ACBDB53359395341B0B1EA2FB795F14C0748` | `mobile-next/build/app/outputs/flutter-apk/app-debug.apk` |
| release | 成功 | 53,273,539 B | `52F02CBC855989C62A89112EB791510CC4313921D9E1998456E94A737F8B148B` | `mobile-next/build/app/outputs/flutter-apk/app-release.apk` |
元数据(aapt / apksignerrelease):包名 `io.openim.flutter.demo`versionName `3.8.3` / versionCode `180`minSdk 24 / targetSdk 33 / compileSdk 34,仅 `arm64-v8a`label `F-DEMO`。签名 CN=openim,证书 SHA-256 `1f38a82fb3c33be7951fb5d964ef5bd9c6c9bfc084ae1e2a8a40a0d1f44ae1fe`
构建期告警:Flutter Gradle apply-script 弃用;部分依赖 Kotlin metadata 1.8.0 vs 工程预期 1.6.0。均属上游,debug/release 均通过。
### PC(锁文件影响后的 build + 安装包)
```
npm install
npm run build
npx tsc --noEmit
npx electron-builder --win --x64
```
| 步骤 | 结果 |
|---|---|
| npm install | 依赖装上;husky prepare 在 Windows 报 exit 1(非阻塞) |
| vite build | 通过(`✓ built in 25.77s`),antd `"use client"` 指令被忽略(存量告警) |
| tsc --noEmit | exit 2**24 个存量错误**,与 B-188 清单一致,本卡未新增 |
| electron-builder | 通过;`extraResources` 目录缺失,构建跳过该项 |
产物:`pc-client/release/Base/1.0.2/畅联_1.0.2.exe`105,891,730 B(约 101MB),SHA256 `A5F15035D669E2184BA1ED2E68FFFB1432FB997703F1FC8103CE4B38D7BB362E`
启动冒烟:启动 `win-unpacked/畅联.exe`,进程拉起且主窗口标题为「畅联」,随后结束进程。未登录。
`tsc` 存量错误(未修):`useGroupMembers.ts` TS18047 ×3、`About.tsx` TS2345 ×2、`useHistoryMessageList.tsx` TS18047 ×1、`ChooseBox/index.tsx` TS18047 ×2、`RtcCallModal` / `RtcControl` / `RtcLayout` TS2786 ×4、`UserCardModal` TS2345 ×1、`imCommon.ts` TS2322 ×11。
## 与 B-197 报告 SHA256 的差异
B-197 评论记录:
- PC `eab9bef6285c940351cdd995d850a0d4c67aebc122b83a0ba0680ea0f76e3df2`
- Android release `b5029f0ece55cd11828a1fe4cb9364e660baad04495a74fe94f33639be8165c8`
- Android debug `035d5b6eba7b20351269d88339ad5e0cd2d1179ac7d8fdae8e18a0069fc6b6b7`
本卡重跑后哈希均不同。APK / Electron 安装包内嵌构建时间戳,**不是位级可复现**;可复现的是工具链、命令、包名、签名证书与约 50.8MB / 101MB 量级。以本表 SHA256 为准。
## 越界比对
相对 `2c81a11e`:仅上述 4 个提交涉及的文件。
相对 `e26abad`
- `mobile/``account-service/``config/``scripts/`**零改动**
- `pc-client/src/store/``pc-client/src/layout/MainContentWrap.tsx``pc-client/src/pages/chat/queryChat/ChatFooter/useSendMessage.ts``pc-client/src/pages/chat/queryChat/useHistoryMessageList.tsx`**零改动**
- `pc-client/electron/`:仅既有 `windowManage.ts``minWidth=1080``minHeight=680`B-171 特批),本卡未再改
## 未测(缺外部条件,禁止写成通过)
- 测试账号:无有效工号+密码,未登录
- Android ARM64 真机:产物仅 arm64-v8a,未安装、未点验
- 工号登录 / 会话同步 / 好友群组 / 文字图片文件语音 / 断线重连 / 录音取消 / 50–60 秒时限 / 未听红点 / 安卓语音通话
- PC 人工交互:置顶、删除、断网恢复、1080×680 稳定性、双向收发
最小所需:管理员给测试工号;真机装 `app-release.apk`PC 装 `畅联_1.0.2.exe`;两工号同时登录做一轮双向收发。
## 安装与回退(本机产物,未入库)
安装:
- Android:把 `app-release.apk` 拷到 ARM64 真机安装(包名 `io.openim.flutter.demo`,会覆盖同包名旧包)。
- PC:运行 `畅联_1.0.2.exe`
回退代码:按上文 `git revert` 顺序。回退安装包:卸载本包 / 装回旧版安装包。现网服务与旧 `mobile/` 不受影响。
## 风险清单
- OpenIM 许可书面结论未落;未换标,label 仍 `F-DEMO`
- APK 仍用上游 openim keystore;正式试用前需换正式签名
- PC `extraResources` 目录缺失(构建跳过)
- Electron 22 偏旧;内网地址写死 `192.168.200.11`
- 全量 analyze / tsc 存量错误仍在,不作为本卡回归通过依据
功能质检与视觉审核须另排。本卡不宣布跨端运行验收通过。