# 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= set ANDROID_HOME= set PATH=%JAVA_HOME%\bin;\bin;%PATH% ``` `mobile-next/android/local.properties` 需含: ``` sdk.dir= 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 cbfced2 ``` 或直接删除并行目录(不影响现网): ``` git rm -r mobile-next ``` ## 备注 - 本目录仅证明「官方固定基线可稳定构建」,不含任何公司定制逻辑,尚未接入公司账号/品牌,属后续阶段工作。