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

安装react-native-share后RN项目启动报错:cannot find symbol Context.RECEIVER_EXPORTED

解决React Native 0.68.2中react-native-share编译失败问题

问题原因

错误提示cannot find symbol variable RECEIVER_EXPORTED,是因为Context.RECEIVER_EXPORTED是**Android API 31(Android 12)**才新增的常量,你的项目编译SDK版本低于31,或是安装的react-native-share版本过高,引入了仅高版本SDK支持的API。

解决方案

方案1:升级Android项目编译SDK版本到31

  1. 打开项目根目录下的android/build.gradle文件
  2. 修改compileSdkVersion和targetSdkVersion为31:
    buildscript {
        ext {
            compileSdkVersion = 31
            targetSdkVersion = 31
            // 其他配置保持不变
        }
    }
    
  3. 同步Gradle配置,重新运行项目:npx react-native run-android

方案2:降级react-native-share到兼容版本

高版本react-native-share依赖Android API 31,可安装适配RN 0.68.2的旧版本:

  1. 卸载当前版本:
    npm uninstall react-native-share
    
  2. 安装兼容版本(推荐v7.6.4,适配RN 0.68系列):
    npm install react-native-share@7.6.4
    
  3. 清理缓存并重新编译:
    cd android && ./gradlew clean && cd .. && npx react-native run-android
    

方案3:临时修改react-native-share源码(不推荐)

若暂时无法升级SDK或降级依赖,可手动修改源码适配旧版本SDK:

  1. 打开node_modules/react-native-share/android/src/main/java/cl/json/social/TargetChosenReceiver.java
  2. 在文件顶部添加Build类导入:
    import android.os.Build;
    
  3. 找到报错的第50行,替换为版本判断代码:
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
        context.registerReceiver(sLastRegisteredReceiver, new IntentFilter(sTargetChosenReceiveAction), Context.RECEIVER_EXPORTED);
    } else {
        context.registerReceiver(sLastRegisteredReceiver, new IntentFilter(sTargetChosenReceiveAction));
    }
    
  4. 重新运行项目:npx react-native run-android

注意:此方案为临时修复,执行npm install或yarn install后代码会被覆盖,优先推荐方案1或2。

内容的提问来源于stack exchange,提问作者Sebastián Ponce

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:32:30