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

开启minifyEnabled构建Android应用时Sendbird SDK方法解析失败求助

Android Sendbird SDK 开启R8混淆后发送图片功能失效的解决方案

问题分析

从错误日志能看出,R8混淆时篡改了MessageManagerImpl$FileMessageSentHandler类中onFileMessageSent方法的返回值类型(被混淆为mg.q),同时破坏了方法的JVM签名,导致Sendbird SDK内部通过反射或动态调用该方法时失败,最终引发发送图片功能异常。你之前添加的全量Keep规则没完全覆盖内部类的方法签名保护,所以问题依然存在。

解决方案

在你的Proguard/R8配置文件中添加以下精准混淆规则,重点保护Sendbird SDK内部回调方法的完整签名:

# Sendbird官方基础规则
-dontwarn com.sendbird.android.shadow.**

# 保留Sendbird所有类、接口、内部类及其成员,禁止混淆方法签名
-keep class com.sendbird.** {
    <init>(...);
    <fields>;
    <methods>;
}
-keep interface com.sendbird.** {
    <methods>;
}

# 特别保留内部回调类的方法签名,避免反射调用失败
-keepclassmembers class com.sendbird.android.internal.message.MessageManagerImpl$FileMessageSentHandler {
    public final void onFileMessageSent(com.sendbird.android.message.BaseFileMessage, com.sendbird.android.exception.SendbirdException, boolean);
    public final kotlin.Any onFileMessageSent(com.sendbird.android.message.BaseFileMessage, com.sendbird.android.exception.SendbirdException?, kotlin.Boolean);
}

# 保护所有FileMessage相关回调接口的方法
-keepclassmembers class * implements com.sendbird.android.message.FileMessageCallback {
    public void onFileMessageSent(com.sendbird.android.message.BaseFileMessage, com.sendbird.android.exception.SendbirdException, boolean);
    public void onFileMessageFailed(com.sendbird.android.exception.SendbirdException);
}

规则说明

  1. 明确保留Sendbird所有类的构造方法、字段和方法,禁止R8对其进行混淆或裁剪
  2. 单独指定MessageManagerImpl$FileMessageSentHandler内部类的onFileMessageSent方法,覆盖Kotlin编译后的两种JVM签名(Kotlin的可空参数会生成不同字节码签名)
  3. 保护FileMessageCallback接口的所有方法,确保回调逻辑正常执行

验证步骤

  1. 执行Clean Project清理项目缓存
  2. 重新构建Release版本安装包
  3. 测试发送图片功能,确认异常是否消失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 01:15:06