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
相关产品推荐
相关产品推荐

