fix: 修复 release 包消息组件永久无响应(B-58 用户手机登录卡死的根因)

根因两条,叠加导致 release 包 initSDK 永不返回:
1. AGP 9 默认开启 R8 混淆,OpenIM 插件用反射按字段名分发方法
   (getDeclaredField("imManager")),混淆后抛 NoSuchFieldException 被静默吞掉,
   Dart 侧 Future 永远 pending —— 表现为「消息组件初始化超时」
2. 插件 manifest 漏声明 ACCESS_NETWORK_STATE,onAttachedToEngine 里
   registerDefaultNetworkCallback 抛 SecurityException,注册中断

修复:
- release 关闭 isMinifyEnabled / isShrinkResources(与官方样板工程配置一致)
- App manifest 补 ACCESS_NETWORK_STATE

已在模拟器上用同版本 SDK 最小复现 App 验证:修复前 release 必现卡死,
修复后 initSDK 返回 true、connect SUCCESS、login 成功。debug 包之前正常
(debug 不混淆),与此结论一致。版本号 1.0.5+6
This commit is contained in:
KIMI
2026-08-15 16:38:33 +08:00
parent 107325f6d1
commit 9074b5d1d7
3 changed files with 9 additions and 1 deletions
+5
View File
@@ -35,6 +35,11 @@ android {
buildTypes {
release {
// OpenIM 插件靠反射按字段名分发方法调用,R8/混淆会把字段改名导致
// 所有 SDK 调用静默无响应(表现为 initSDK 永久不返回)。
// 与官方样板工程一致:release 关闭混淆和资源压缩。
isMinifyEnabled = false
isShrinkResources = false
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig = signingConfigs.getByName("debug")
@@ -1,6 +1,9 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 网络(OpenIM / 登录 / LiveKit 都要) -->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- OpenIM 插件注册网络状态监听必须要这个权限;插件自身 manifest 漏了声明,
缺它 release 包会 SecurityException 导致插件注册失败、SDK 全部调用无响应 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- 语音消息录音与语音通话 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
+1 -1
View File
@@ -1,7 +1,7 @@
name: changlian
description: 畅联 —— 公司内部通讯 App(手机端)
publish_to: "none"
version: 1.0.4+5
version: 1.0.5+6
environment:
sdk: ">=3.6.0 <4.0.0"