# mobile-next 固定基线导入与构建记录（B-128 第1阶段）

## 上游来源

- 项目：OpenIM 官方 Flutter 样板工程 `openim-flutter-demo`
- 仓库：`https://github.com/OpenIMSDK/openim-flutter-demo.git`
- 固定基线：tag `3.8.3-patch.3`，提交 `b3dfdb1e8aaeaaf6f0793e10cadd20d5c184a31f`（"Updated IM SDK"，2025-03-07）
- 校验：`git ls-remote --tags` 解析该 tag 的 `^{}` 即指向 `b3dfdb1e8aaeaaf6f0793e10cadd20d5c184a31f`

## 导入方式

- 并行目录 `mobile-next/`，与现网 `mobile/` 并存，未覆盖、未改动 `mobile/`。
- 以 `git clone --no-checkout` 拉取上游后 `git checkout 3.8.3-patch.3`，将整棵工作树复制入 `mobile-next/`（剔除 `.git` 与 `.DS_Store`）。
- 导入后与原 tag 树做 `git diff --no-index` 比对，除 `.git`/`.DS_Store` 外**零差异**。
- 未迁入公司功能、未换品牌、未调整 SDK 版本，源码保持上游原样。
- 平台工程内生成的 `android/local.properties`（sdk.dir / flutter.sdk 指向本机）不入库（见 `.gitignore`）。

## 许可证位置

- 上游仓库根目录 `LICENSE`（已随导入进入 `mobile-next/LICENSE`）。
- 子包 `openim_common/LICENSE`、`openim_live/LICENSE`、`local_plugin/flutter_openim_live_alert/LICENSE`。
- 各 pub.dev 依赖许可证见各自包目录，依赖清单以 `mobile-next/pubspec.yaml` 与 `mobile-next/pubspec.lock` 为准。

## 锁定工具链版本

| 组件 | 版本 |
| --- | --- |
| Flutter | 3.24.5 stable（revision `dec2ee5c1f`，engine `a18df97ca5`） |
| Dart | 3.5.4（随 Flutter 3.24.5 分发） |
| JDK | OpenJDK 17.0.20+8（Temurin） |
| Gradle | 7.6.3（`android/gradle/wrapper/gradle-wrapper.properties` 锁定） |
| AGP | 7.3.1（`android/build.gradle` buildscript 声明） |
| Kotlin | 1.9.23（`android/build.gradle` `ext.kotlin_version`） |
| Android SDK | compileSdk 34，minSdk 24，targetSdk 33，build-tools 36.0.0 |
| Dart 依赖锁 | `mobile-next/pubspec.lock`（上游自带，原样保留） |
| OpenIM SDK | `flutter_openim_sdk 3.8.3+3`（上游 pubspec 锁定） |

注意：`pubspec.lock` 为上游原样内容；执行 `flutter pub get` 后仅将 `flutter_openim_sdk` 由 lock 中记录的 `3.8.3+2` 对齐到 `pubspec.yaml` 声明的 `3.8.3+3`（上游 lock 与 pubspec 不一致，为官方产物）。

## 可复现构建命令

前置环境变量：

```
set JAVA_HOME=<JDK17 目录>
set ANDROID_HOME=<Android SDK 目录>
set PATH=%JAVA_HOME%\bin;<Flutter SDK>\bin;%PATH%
```

`mobile-next/android/local.properties` 需含：

```
sdk.dir=<Android SDK 目录，反斜杠转义>
flutter.sdk=<Flutter SDK 目录，反斜杠转义>
```

首次执行依赖解析（会写 `.dart_tool`，不产生源码改动）：

```
flutter pub get
```

### Debug 构建

```
flutter build apk --debug
```

产物：`build/app/outputs/flutter-apk/app-debug.apk`（约 110 MB）。

### Release 构建

```
flutter build apk --release
```

产物：`build/app/outputs/flutter-apk/app-release.apk`（约 51.3 MB，签名使用上游自带 keystore `android/app/openim`，alias/password 均为 `openim`）。

## 构建结果（2026-08-19，本机实测）

| 构建 | 结果 | 产物 | 大小 | SHA256 |
| --- | --- | --- | --- | --- |
| debug | 成功 | `app-debug.apk` | 109,930,873 B | `55789791CE8226573C0030A026E5C89C44AD6E154884F24F7329357FCA7E0464` |
| release | 成功 | `app-release.apk` | 53,742,479 B | `46D5900FC735FE0880994385691E62A00589040C4D9FCD4DFA69E003763E7780`（sha1 `7191307bc54624c7b3cfdf13ed2378a749b19ec2`） |

APK 元数据（aapt badging）：package `io.openim.flutter.demo`，versionName `3.8.3`，versionCode `180`，minSdk 24 / targetSdk 33 / compileSdk 34。

### 构建期警告（不影响产物）

- Flutter Gradle 插件以 `apply script` 方式应用，报 "deprecated, will be removed in a future release"（上游工程原生写法，非本任务改动）。
- 部分依赖 Kotlin metadata 版本（1.8.x）高于工程 Kotlin（1.9.23 预期 1.6.0/1.8.0）的警告，属于上游依赖组合特性，debug/release 均通过。

## 失败证据

本阶段 debug 与 release 均构建成功，无失败步骤。若后续步骤出现构建失败，按完成标准须明确到具体依赖或构建步骤并留存日志，不再继续后续兼容迁移。

## 回退方法

本任务为独立提交，仅新增 `mobile-next/` 与本文档，未触碰 `mobile/`、`pc-client/`、`account-service/` 及现网服务。

回退命令：

```
git revert 8046ec7483d68f67011913da12e5e671479b5ff0
```

或直接删除并行目录（不影响现网）：

```
git rm -r mobile-next
```

## 备注

- 本目录仅证明「官方固定基线可稳定构建」，不含任何公司定制逻辑，尚未接入公司账号/品牌，属后续阶段工作。
