React Native 64.0.3适配Android SDK31时因PendingIntent崩溃求助
解决Target SDK 31+的PendingIntent崩溃问题
问题原因
Android 12(SDK 31)及以上版本要求创建PendingIntent时必须指定FLAG_IMMUTABLE或FLAG_MUTABLE标记,你的React Native 64.0.3版本及部分第三方依赖未适配该规则,导致崩溃。
解决方案
1. 清理依赖冲突,统一使用AndroidX
你的build.gradle中同时引入了旧版Support库和AndroidX库,这会引发兼容性问题:
- 删除
implementation 'com.android.support:appcompat-v7:28.0.0'这一行,保留已有的AndroidX版本implementation 'androidx.appcompat:appcompat:1.7.0-alpha01' - 替换旧版multidex依赖:将
implementation 'com.android.support:multidex:1.0.3'改为implementation 'androidx.multidex:multidex:2.0.1'
2. 添加AndroidX Core库以支持PendingIntent兼容
引入AndroidX Core库,它提供了兼容低版本的PendingIntent创建方法:
implementation 'androidx.core:core:1.10.1'
3. 修复第三方RN库的PendingIntent问题
你的依赖中部分第三方库(如rn-fetch-blob、react-native-view-pdf)可能未适配SDK 31,需要手动修改或打补丁:
- 针对rn-fetch-blob:找到该库的Android模块代码(
node_modules/rn-fetch-blob/android/src/main/java/com/RNFetchBlob/RNFetchBlobReq.java),找到创建PendingIntent的代码,添加版本兼容的标记:// 原代码 PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0); // 修改后 int flag = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S ? PendingIntent.FLAG_IMMUTABLE : 0; PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, flag); - 使用
patch-package保存修改:- 安装工具:
npm install patch-package --save-dev - 修改代码后执行:
npx patch-package rn-fetch-blob
- 安装工具:
- 同理检查其他第三方库的Android代码,确保所有
PendingIntent创建都添加了对应标记。
4. 适配React Native核心代码(可选)
如果RN核心模块(如推送、后台任务)存在未标记的PendingIntent:
- 优先考虑升级React Native到0.66及以上版本(该版本已适配SDK 31规则),注意大版本升级需处理其他兼容性问题;
- 若无法升级,使用
patch-package修改RN核心的Android代码,添加FLAG_IMMUTABLE标记。
5. 验证配置
修改后同步Gradle,清理并重建项目:
cd android ./gradlew clean ./gradlew assembleDebug
内容的提问来源于stack exchange,提问作者kawsar ahmad
相关产品推荐
相关产品推荐

