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

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保存修改:
    1. 安装工具:npm install patch-package --save-dev
    2. 修改代码后执行: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:25:53