React Native Android33下react-native-share报错及编译问题求助
解决方案
一、先解决更新react-native-share后的编译错误
你遇到的Could not set unknown property 'namespace'和compile SDK Version is not specified错误,是因为新版本react-native-share依赖的Android Gradle Plugin(AGP)版本高于你当前项目使用的版本,或库自身build.gradle配置未适配你的项目环境,可通过以下两种方式解决:
方式1:降级react-native-share到兼容版本
如果不想升级项目AGP版本,可降级到不使用namespace属性的react-native-share版本(比如^7.0.0,需匹配你的React Native版本,RN 0.68+可尝试此版本):
npm install react-native-share@7.0.0 --save # 或 yarn add react-native-share@7.0.0
方式2:用patch-package修改react-native-share的build.gradle配置
- 安装patch-package:
npm install patch-package --save-dev # 或 yarn add patch-package --dev - 找到
node_modules/react-native-share/android/build.gradle文件,做以下修改:- 删除/注释掉
android { namespace = "com.reactlibrary.rnshare" }这一行(旧版AGP不支持namespace属性,库的包名由AndroidManifest.xml的package字段定义) - 在
android块中添加与项目一致的编译SDK配置:android { // 注释/删除namespace行 // namespace = "com.reactlibrary.rnshare" compileSdkVersion 33 buildToolsVersion "33.0.2" defaultConfig { minSdkVersion 21 targetSdkVersion 33 } }
- 删除/注释掉
- 生成补丁:
npx patch-package react-native-share - 将生成的
patches/react-native-share+[版本号].patch文件提交到版本控制,后续安装依赖时会自动应用补丁。
二、解决Android 33上的Pending Intent Flag错误
该错误是Android 12+(API 31+)的强制要求:创建PendingIntent必须指定FLAG_IMMUTABLE或FLAG_MUTABLE。
- 若通过上述方式更新到修复该问题的react-native-share版本,此问题会自动解决。
- 若选择降级版本,需手动修改源码:
- 找到
node_modules/react-native-share/android/src/main/java/com/reactlibrary/rnshare/ShareModule.java(或其他创建PendingIntent的文件) - 找到所有
PendingIntent.getActivity()、PendingIntent.getBroadcast()等调用,添加对应Flag:- 无需动态修改Intent时,添加
PendingIntent.FLAG_IMMUTABLE:PendingIntent pendingIntent = PendingIntent.getActivity( context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE ); - 需动态修改Intent时(极少场景),使用
PendingIntent.FLAG_MUTABLE
- 无需动态修改Intent时,添加
- 同样用patch-package生成补丁,避免后续依赖安装覆盖修改。
- 找到
额外检查
确保项目android/build.gradle中的AGP版本与Gradle版本匹配,例如:
- AGP 7.0.x 对应 Gradle 7.0+
- AGP 7.3.x 对应 Gradle 7.4+
若需升级AGP,修改android/build.gradle中的classpath:
buildscript { dependencies { classpath 'com.android.tools.build:gradle:7.3.1' } }
同时修改android/gradle/wrapper/gradle-wrapper.properties中的distributionUrl:
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
内容的提问来源于stack exchange,提问作者Vaishnavi Maske
相关产品推荐
相关产品推荐

