diff --git a/docs/acceptance/b197-cross-platform-regression.md b/docs/acceptance/b197-cross-platform-regression.md new file mode 100644 index 0000000..5ed9cd7 --- /dev/null +++ b/docs/acceptance/b197-cross-platform-regression.md @@ -0,0 +1,150 @@ +# 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.0,platforms 含 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 / apksigner,release):包名 `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 存量错误仍在,不作为本卡回归通过依据 + +功能质检与视觉审核须另排。本卡不宣布跨端运行验收通过。