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

Android 14应用崩溃:需指定RECEIVER_EXPORTED或RECEIVER_NOT_EXPORTED

解决Android 14上Agora Chat SDK 1.2.0的SecurityException问题

问题原因

Android 14(API 34)对动态注册广播接收器新增强制规则:所有非仅接收系统广播的动态注册接收器,必须显式指定RECEIVER_EXPORTED或RECEIVER_NOT_EXPORTED标记。而io.agora.rtc:chat-sdk:1.2.0版本未适配该规则,内部动态注册广播时未添加对应标记,直接触发SecurityException。

解决方案

方案1:升级SDK到适配Android 14的版本

这是最稳妥的解决方式,Agora后续版本已修复该兼容性问题。将项目中的SDK依赖替换为最新兼容版本,示例如下:

dependencies {
    implementation 'io.agora.rtc:chat-sdk:1.3.0' // 或更高稳定版本
}

替换后同步Gradle,重新编译运行即可。

方案2:临时Hook方案(无法升级SDK时使用)

若暂时无法升级SDK,可通过反射Hook系统的广播注册方法,为SDK内部注册的接收器自动添加RECEIVER_NOT_EXPORTED标记(假设SDK内部接收器无需对外暴露):

  1. 创建Hook工具类:
import android.content.Context;
import android.content.IntentFilter;
import android.os.Build;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class BroadcastHookUtil {
    public static void init(Context context) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
            return;
        }
        try {
            // 获取ActivityManager的代理对象
            Object iActivityManager = Class.forName("android.app.ActivityManagerNative")
                    .getMethod("getDefault").invoke(null);
            
            // 创建动态代理,拦截registerReceiverWithFeature方法
            Object proxy = Proxy.newProxyInstance(
                    ClassLoader.getSystemClassLoader(),
                    new Class[]{Class.forName("android.app.IActivityManager")},
                    (proxyObj, method, args) -> {
                        if ("registerReceiverWithFeature".equals(method.getName()) && args.length == 6) {
                            // 给注册参数添加RECEIVER_NOT_EXPORTED标记
                            int flags = (int) args[5];
                            if ((flags & (IntentFilter.RECEIVER_EXPORTED | IntentFilter.RECEIVER_NOT_EXPORTED)) == 0) {
                                args[5] = flags | IntentFilter.RECEIVER_NOT_EXPORTED;
                            }
                        }
                        return method.invoke(iActivityManager, args);
                    });
            
            // 替换系统的ActivityManager代理
            Class.forName("android.app.ActivityManagerNative")
                    .getField("gDefault").set(null, proxy);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  1. 在自定义Application中初始化Hook:
public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        BroadcastHookUtil.init(this);
        // 初始化Agora Chat SDK
        ChatClient.getInstance().init(this, new ChatOptions());
    }
}

注意:Hook属于非常规操作,存在兼容性风险,仅作临时应急使用,优先推荐升级SDK。

验证步骤

  1. 应用任一方案后,在Android 14设备上重新运行应用。
  2. 触发聊天相关功能,检查是否再出现SecurityException崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 02:54:57