You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Jitsi Meet正式版APK点击连接崩溃,疑与ProGuard相关

Flutter集成Jitsi Meet SDK正式版APK点击CONNECT按钮崩溃(疑似ProGuard问题)

问题详情

  • Flutter版本:[你的Flutter版本]
  • Jitsi Meet SDK版本:[你的Jitsi Meet SDK版本]
  • 错误信息或日志:[请包含相关错误信息或日志]

已尝试操作

我已在proguard-rules.pro文件中添加Jitsi Meet SDK的ProGuard规则,并在build.gradle文件中设置minifyEnabled和useProguard为true。

Jitsi实现代码(使用jitsi_meet_flutter_sdk包)

class JitsiProvider extends ChangeNotifier {
  bool _isMeetingComplete = false;
  bool get isMeetingComplete => _isMeetingComplete;
  bool _hasUserJoined = false;
  bool get hasUserJoined => _hasUserJoined;
  late Timer _meetingTimer;
  void createMeeting({
    required String appointmentID,
    required String roomName,
    required String meetURL,
    required String meetDescription,
    required bool isAudioMuted,
    required bool isVideoMuted,
    String username = '',
    String email = '',
    String userProfile = '',
    bool preJoined = true,
    bool isVideo = true,
    bool isGroup = true,
  }) async {
    print("APP ID : $appointmentID");
    try {
      _hasUserJoined = true;
      notifyListeners();

      // 启动20分钟计时器
      _meetingTimer = Timer(
          Duration(
            minutes: 20,
          ), () {
        callAPIappointmentCompleted(appointmentID);
        endMeeting();
        JitsiMeet().hangUp();
      });
      Map<String, dynamic> featureFlag = {};
      featureFlag['welcomepage.enabled'] = false;
      featureFlag['prejoinpage.enabled'] = preJoined;
      featureFlag['add-people.enabled'] = isGroup;

      var options = JitsiMeetConferenceOptions(
        room: roomName,
        serverURL: meetURL,
        configOverrides: {
          "startWithAudioMuted": isAudioMuted,
          "startWithVideoMuted": isVideoMuted,
          "subject": meetDescription,
        },
        userInfo: JitsiMeetUserInfo(
          displayName: username,
          email: email,
          avatar: userProfile,
        ),
        featureFlags: {
          "unsaferoomwarning.enabled": false,
          "add-people.enabled": false, // 此处设为false
          'chat.enabled': true,
          'invite.enabled': false,
          'ios.recording.enabled': false,
          'recording.enabled': false,
          'kick-out.enabled': false,
        },
      );
      var eventListeners = JitsiMeetEventListener(
        conferenceTerminated: (url, error) {
          print("MEET TERMINATED");
          print(url);
          callAPIappointmentCompleted(appointmentID);
        },
        participantLeft: (participantId) {
          print("用户已离开");
          print(participantId);
          callAPIappointmentCompleted(appointmentID);
        },
      );
      await JitsiMeet().join(options, eventListeners);
    } catch (error) {
      print("错误: $error");
    }
  }

  void onMeetingEnd() {
    // 在此处调用你的函数
    callAPIappointmentCompleted("YOUR_APPOINTMENT_ID");
    // 打印日志信息
    print("已触发退出流程");
  }

  void endMeeting() {
    _isMeetingComplete = true;
    notifyListeners();
    _meetingTimer.cancel();
    onMeetingEnd();
  }

}

我的proguard-rules.pro文件内容

#=== Flutter Wrapper ===#
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }

#=== Jitsi ===#
# 参考自jitsi-meet官方Android项目的ProGuard规则
# 若发布版构建再次崩溃,可查看官方仓库获取更新规则

# Copyright (c) Facebook, Inc. and its affiliates.
#
# 本源码基于MIT许可证授权,许可证文件位于源码树根目录的LICENSE文件中。

# 添加项目专属ProGuard规则
# 默认情况下,本文件中的规则会追加到系统默认ProGuard配置之后
# 可通过修改build.gradle中的proguardFiles指令调整配置顺序和路径

# React Native相关规则
-keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip
-keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters
-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip

# 保留带有@DoNotStrip注解的类和方法
-keep @com.facebook.proguard.annotations.DoNotStrip class *
-keep @com.facebook.common.internal.DoNotStrip class *
-keepclassmembers class * {
    @com.facebook.proguard.annotations.DoNotStrip *;
    @com.facebook.common.internal.DoNotStrip *;
}

-keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * {
  void set*(***);
  *** get*();
}

-keep class * extends com.facebook.react.bridge.JavaScriptModule { *; }
-keep class * extends com.facebook.react.bridge.NativeModule { *; }
-keepclassmembers,includedescriptorclasses class * { native <methods>; }
-keepclassmembers class *  { @com.facebook.react.uimanager.UIProp <fields>; }
-keepclassmembers class *  { @com.facebook.react.uimanager.annotations.ReactProp <methods>; }
-keepclassmembers class *  { @com.facebook.react.uimanager.annotations.ReactPropGroup <methods>; }

-dontwarn com.facebook.react.**
-keep,includedescriptorclasses class com.facebook.react.bridge.** { *; }

# okhttp相关规则
-keepattributes Signature
-keepattributes *Annotation*
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**

# okio相关规则
-keep class sun.misc.Unsafe { *; }
-dontwarn java.nio.file.*
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-keep class okio.** { *; }
-dontwarn okio.**

# WebRTC相关规则
-keep class org.webrtc.** { *; }
-dontwarn org.chromium.build.BuildHooksAndroid

# Jitsi Meet SDK相关规则
-keep class org.jitsi.meet.** { *; }
-keep class org.jitsi.meet.sdk.** { *; }
-keep class org.jitsi.** { *; }
-keep interface org.jitsi.** { *; }

# 开启minifyEnabled时补充的规则
-keep class com.facebook.react.bridge.CatalystInstanceImpl { *; }
-keep class com.facebook.react.bridge.ExecutorToken { *; }
-keep class com.facebook.react.bridge.JavaScriptExecutor { *; }
-keep class com.facebook.react.bridge.ModuleRegistryHolder { *; }
-keep class com.facebook.react.bridge.ReadableType { *; }
-keep class com.facebook.react.bridge.queue.NativeRunnable { *; }
-keep class com.facebook.react.devsupport.** { *; }

-dontwarn com.facebook.react.devsupport.**
-dontwarn com.google.appengine.**
-dontwarn com.squareup.okhttp.**
-dontwarn javax.servlet.**

# SVG相关规则,避免构建错误
-keep public class com.horcrux.svg.** {*;}

# Hermes相关规则
-keep class com.facebook.hermes.unicode.** { *; }

内容的提问来源于stack exchange,提问作者Prince Tomar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 00:27:10