安装react-native-share后RN项目启动报错:cannot find symbol Context.RECEIVER_EXPORTED
问题原因
错误提示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
- 打开项目根目录下的
android/build.gradle文件 - 修改
compileSdkVersion和targetSdkVersion为31:buildscript { ext { compileSdkVersion = 31 targetSdkVersion = 31 // 其他配置保持不变 } } - 同步Gradle配置,重新运行项目:
npx react-native run-android
方案2:降级react-native-share到兼容版本
高版本react-native-share依赖Android API 31,可安装适配RN 0.68.2的旧版本:
- 卸载当前版本:
npm uninstall react-native-share - 安装兼容版本(推荐v7.6.4,适配RN 0.68系列):
npm install react-native-share@7.6.4 - 清理缓存并重新编译:
cd android && ./gradlew clean && cd .. && npx react-native run-android
方案3:临时修改react-native-share源码(不推荐)
若暂时无法升级SDK或降级依赖,可手动修改源码适配旧版本SDK:
- 打开
node_modules/react-native-share/android/src/main/java/cl/json/social/TargetChosenReceiver.java - 在文件顶部添加Build类导入:
import android.os.Build; - 找到报错的第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)); } - 重新运行项目:
npx react-native run-android
注意:此方案为临时修复,执行
npm install或yarn install后代码会被覆盖,优先推荐方案1或2。
内容的提问来源于stack exchange,提问作者Sebastián Ponce
相关产品推荐
相关产品推荐

