fix(mobile): 升级 livekit_client 至 2.10.0 以兼容 Dart 3.13 并恢复安卓出包

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
编码工程师
2026-08-31 08:32:22 +08:00
co-authored by Cursor multica-agent
parent 1d393f4f1e
commit b7a31de5b6
7 changed files with 71 additions and 37 deletions
+4 -3
View File
@@ -1,10 +1,10 @@
# 任务清单 # 任务清单
更新时间:2026-08-30。任务状态以当前仓库和项目约束为准;没有证据的事项不写成“已完成”。 更新时间:2026-08-31。任务状态以当前仓库和项目约束为准;没有证据的事项不写成“已完成”。
## 正在做 ## 正在做
无。华为配置注入与 Gradle 识别已提交,等待审核。 无。语音组件已升级并完成整包安卓出包,等待审核。
## 已做完 ## 已做完
@@ -19,10 +19,11 @@
- 公网反向代理 / HTTPS / WSS / 防火墙与回滚说明(配置进仓库;香港测试环境已由总工部署)。 - 公网反向代理 / HTTPS / WSS / 防火墙与回滚说明(配置进仓库;香港测试环境已由总工部署)。
- 公网 overlay 用 `!override` 覆盖内部端口绑定;部署脚本校验 `SERVER_IP` 非空。 - 公网 overlay 用 `!override` 覆盖内部端口绑定;部署脚本校验 `SERVER_IP` 非空。
- 构建机本地放入华为 `agconnect-services.json`(不入库);AGConnect 插件映射/版本已按 AGP 9 补齐,Gradle 能识别包名 `cn.solsum.jinxunda` - 构建机本地放入华为 `agconnect-services.json`(不入库);AGConnect 插件映射/版本已按 AGP 9 补齐,Gradle 能识别包名 `cn.solsum.jinxunda`
- 升级 `livekit_client``2.10.0`,在 Flutter 3.47 / Dart 3.13 下打出整包安卓 release APK。
## 还没安排 ## 还没安排
- 在可编译 LiveKit 的环境打出安卓包,并用真机验证华为厂商通道到达。 - 用真机验证华为厂商通道到达,以及一对一语音通话
- 组织真实手机和 Windows 电脑的回归:重点确认文件传输、一对一语音通话和杀进程后的离线通知。 - 组织真实手机和 Windows 电脑的回归:重点确认文件传输、一对一语音通话和杀进程后的离线通知。
- 明确手机正式签名的负责人和安全保管方式;不能把签名密钥提交进仓库。 - 明确手机正式签名的负责人和安全保管方式;不能把签名密钥提交进仓库。
- 获得负责人同意后,再导入真实员工名单并验证账号管理流程。 - 获得负责人同意后,再导入真实员工名单并验证账号管理流程。
+6 -5
View File
@@ -1,6 +1,6 @@
# 最新进度 # 最新进度
更新时间:2026-08-30。以下内容依据当前仓库代码整理。 更新时间:2026-08-31。以下内容依据当前仓库代码整理。
## 现在做到哪里 ## 现在做到哪里
@@ -21,15 +21,16 @@
- 旧记录使用的是更早的提交、安装包版本和端口状态;因此已保留为档案并在开头标明过时,不能当作当前验收结论。 - 旧记录使用的是更早的提交、安装包版本和端口状态;因此已保留为档案并在开头标明过时,不能当作当前验收结论。
- 放入与 `cn.solsum.jinxunda` 匹配的真实华为配置后,Gradle `:app:processDebugAGCPlugin``:app:processReleaseAGCPlugin` 通过;debug/release/profile 均识别该配置文件。未因配置缺失或包名不一致失败。 - 放入与 `cn.solsum.jinxunda` 匹配的真实华为配置后,Gradle `:app:processDebugAGCPlugin``:app:processReleaseAGCPlugin` 通过;debug/release/profile 均识别该配置文件。未因配置缺失或包名不一致失败。
- `flutter pub get` 已写入 `jpush_flutter 3.5.6` / `jpush_flutter_android 1.0.2``mobile/pubspec.lock` - `flutter pub get` 已写入 `jpush_flutter 3.5.6` / `jpush_flutter_android 1.0.2``mobile/pubspec.lock`
- `flutter analyze` 仅有 2 条既有 OpenIM `group` 弃用 info`flutter test``config_test` 通过。 - `flutter analyze` 仅有 2 条既有 OpenIM `group` 弃用 info`flutter test``config_test` 与登录页 widget_test通过。
- 整包 `flutter build apk` 未出包:锁定的 `livekit_client 2.5.0+hotfix.3`Flutter 3.47 / Dart 3.13 的空安全检查不兼容。此项不在华为配置本卡范围,未改 LiveKit 版本 - 语音组件已升级到 `livekit_client 2.10.0`(配套直接依赖 `uuid 4.5.3`),Flutter 3.47 / Dart 3.13 下可编译
- 整包 `flutter build apk` 已打出 release 安装包 `app-release.apk`,包名 `cn.solsum.jinxunda`,版本 `1.0.7+8`
## 当前停在哪 ## 当前停在哪
华为配置已在构建机本地注入并被 Gradle 识别整包 APK 与真机华为通道到达,仍待后续在可编译 LiveKit 的环境或真机上完成。本轮未改测试机、未回退公网端口与部署安全修复。 华为配置被 Gradle 识别整包安卓安装包已能在当前工具链打出。真机华为通道到达率、真机一对一语音通话仍待真机验证。本轮未改测试机、未回退公网端口与部署安全修复。
## 已知风险和待验证事实 ## 已知风险和待验证事实
- 真机上的文件传输、一对一语音通话、杀进程后的离线推送(尤其华为通道)仍需实际设备验证。 - 真机上的文件传输、一对一语音通话、杀进程后的离线推送(尤其华为通道)仍需实际设备验证。
- 整包 APK 受 `livekit_client 2.5.0+hotfix.3` 与当前 Flutter 空安全检查限制,需另卡决定是否升级 LiveKit - 当前 release 包仍用调试签名;正式签名需后续单独准备,密钥不得入库
- 电脑端使用较旧的 Electron;公网接入后仍需评估 HTTPS、登录限流和跨域策略。 - 电脑端使用较旧的 Electron;公网接入后仍需评估 HTTPS、登录限流和跨域策略。
-13
View File
@@ -81,16 +81,3 @@ kotlin {
flutter { flutter {
source = "../.." source = "../.."
} }
// livekit_client 插件硬编码 compileSdk = 34,但它依赖的 flutter_webrtc 要求消费者 ≥36
// AAR 元数据校验会因此失败。:app 先于各插件求值(根脚本有 evaluationDependsOn(":app")),
// 所以在插件求值完成后把它的 compileSdk 抬到 36。
rootProject.subprojects {
if (name == "livekit_client") {
afterEvaluate {
extensions.configure<com.android.build.gradle.LibraryExtension> {
compileSdk = 36
}
}
}
}
+4
View File
@@ -7,3 +7,7 @@ android.builtInKotlin=false
# 三方插件 Java/Kotlin 编译目标不一致时降级为警告(见 build.gradle.kts 注释) # 三方插件 Java/Kotlin 编译目标不一致时降级为警告(见 build.gradle.kts 注释)
kotlin.jvm.target.validation.mode=warning kotlin.jvm.target.validation.mode=warning
# jpush_flutter_android 1.0.2 的 consumer ProGuard 含 -dontoptimizeAGP 9 默认拒绝合并。
# 本应用 release 已关闭混淆;该开关只让整包构建通过,不改变极光/华为通道行为。
android.r8.globalOptionsInConsumerRules.disallowed=false
+2 -2
View File
@@ -190,7 +190,7 @@ class CallService extends ChangeNotifier {
speakerOn = !speakerOn; speakerOn = !speakerOn;
notifyListeners(); notifyListeners();
try { try {
await Hardware.instance.setSpeakerphoneOn(speakerOn); await AudioManager.instance.setSpeakerOutputPreferred(speakerOn);
} catch (_) { } catch (_) {
speakerOn = !speakerOn; speakerOn = !speakerOn;
notifyListeners(); notifyListeners();
@@ -369,7 +369,7 @@ class CallService extends ChangeNotifier {
} }
// 复位免提 // 复位免提
if (speakerOn) { if (speakerOn) {
Hardware.instance.setSpeakerphoneOn(false).catchError((_) {}); AudioManager.instance.setSpeakerOutputPreferred(false).catchError((_) {});
speakerOn = false; speakerOn = false;
} }
micOn = true; micOn = true;
+50 -10
View File
@@ -9,6 +9,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.7.0" version: "2.7.0"
asn1lib:
dependency: transitive
description:
name: asn1lib
sha256: "9a8f69025044eb466b9b60ef3bc3ac99b4dc6c158ae9c56d25eeccf5bc56d024"
url: "https://pub.dev"
source: hosted
version: "1.6.5"
async: async:
dependency: transitive dependency: transitive
description: description:
@@ -69,10 +77,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: connectivity_plus name: connectivity_plus
sha256: b5e72753cf63becce2c61fd04dfe0f1c430cc5278b53a1342dc5ad839eab29ec sha256: "762c99f890ca8bf87f7337236f99edd42793843bc6c3631da294a76653a54bd0"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.1.5" version: "7.3.1"
connectivity_plus_platform_interface: connectivity_plus_platform_interface:
dependency: transitive dependency: transitive
description: description:
@@ -81,6 +89,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.0" version: "2.1.0"
convert:
dependency: transitive
description:
name: convert
sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
url: "https://pub.dev"
source: hosted
version: "3.1.2"
cross_file: cross_file:
dependency: transitive dependency: transitive
description: description:
@@ -105,6 +121,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.8" version: "1.0.8"
dart_jsonwebtoken:
dependency: transitive
description:
name: dart_jsonwebtoken
sha256: ad84e60181696513d04d5f2078e0bbc20365b911f46f647797317414bdc88fbe
url: "https://pub.dev"
source: hosted
version: "3.4.1"
dart_webrtc: dart_webrtc:
dependency: transitive dependency: transitive
description: description:
@@ -125,10 +149,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: device_info_plus name: device_info_plus
sha256: "98f28b42168cc509abc92f88518882fd58061ea372d7999aecc424345c7bff6a" sha256: b4fed1b2835da9d670d7bed7db79ae2a94b0f5ad6312268158a9b5479abbacdd
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "11.5.0" version: "12.4.0"
device_info_plus_platform_interface: device_info_plus_platform_interface:
dependency: transitive dependency: transitive
description: description:
@@ -421,6 +445,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.2" version: "0.7.2"
json_annotation:
dependency: transitive
description:
name: json_annotation
sha256: "2a743920d81b7910627f68ee2c9ac1fc0bfee32b9fc3403587d7c6791ca12f80"
url: "https://pub.dev"
source: hosted
version: "4.12.0"
just_audio: just_audio:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -481,10 +513,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: livekit_client name: livekit_client
sha256: "011affc0fca22b2f9b0e8827219dad9948f84f2bf057980693de13039de904c7" sha256: "9160950ff87d1946959e4911c16236ea7a3e74ac1987990b258132fd4ed0fca9"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.5.0+hotfix.3" version: "2.10.0"
logger: logger:
dependency: transitive dependency: transitive
description: description:
@@ -701,14 +733,22 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.8" version: "2.1.8"
pointycastle:
dependency: transitive
description:
name: pointycastle
sha256: "92aa3841d083cc4b0f4709b5c74fd6409a3e6ba833ffc7dc6a8fee096366acf5"
url: "https://pub.dev"
source: hosted
version: "4.0.0"
protobuf: protobuf:
dependency: transitive dependency: transitive
description: description:
name: protobuf name: protobuf
sha256: de9c9eb2c33f8e933a42932fe1dc504800ca45ebc3d673e6ed7f39754ee4053e sha256: "75ec242d22e950bdcc79ee38dd520ce4ee0bc491d7fadc4ea47694604d22bf06"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.2.0" version: "6.0.0"
pub_semver: pub_semver:
dependency: transitive dependency: transitive
description: description:
@@ -934,10 +974,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: uuid name: uuid
sha256: a11b666489b1954e01d992f3d601b1804a33937b5a8fe677bd26b8a9f96f96e8 sha256: "1fef9e8e11e2991bb773070d4656b7bd5d850967a2456cfc83cf47925ba79489"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.5.2" version: "4.5.3"
vector_math: vector_math:
dependency: transitive dependency: transitive
description: description:
+5 -4
View File
@@ -29,14 +29,15 @@ dependencies:
file_picker: 10.3.3 file_picker: 10.3.3
# 发图片消息时选相册图片 # 发图片消息时选相册图片
image_picker: 1.1.2 image_picker: 1.1.2
# 一对一语音通话(LiveKit SFU,版本取自官方样板工程 openim_live/pubspec.yaml # 一对一语音通话(LiveKit SFU)。2.10.0 起修复 Dart 3.13 空安全编译错误,
livekit_client: 2.5.0+hotfix.3 # 是当前 Flutter 3.47 / Dart 3.13 下改动最小的稳定版本。
livekit_client: 2.10.0
# 麦克风权限申请 # 麦克风权限申请
permission_handler: 11.4.0 permission_handler: 11.4.0
# 打开收到的文件 # 打开收到的文件
open_filex: 4.7.0 open_filex: 4.7.0
# 通话房间号 # 通话房间号livekit_client 2.10.0 要求 >=4.5.3
uuid: 4.5.2 uuid: 4.5.3
# 极光推送官方 Flutter 插件(MIT);厂商通道另见 jpush_flutter_android # 极光推送官方 Flutter 插件(MIT);厂商通道另见 jpush_flutter_android
jpush_flutter: 3.5.6 jpush_flutter: 3.5.6
jpush_flutter_android: 1.0.2 jpush_flutter_android: 1.0.2