升级Target SDK Version 31后React Native安卓应用崩溃求助
React Native升级targetSdkVersion/compileSdkVersion到31后Android 12崩溃解决方案
核心问题分析
Android 12(API 31)新增多项强制适配规则,你的React Native 0.64.4及部分依赖库版本未跟进这些要求,导致仅在Android 12设备上触发崩溃,低版本Android系统不受影响。
具体修复步骤
1. 升级Gradle构建工具版本
当前根build.gradle中com.android.tools.build:gradle为3.5.4,不支持API 31,需修改:
// 根build.gradle中buildscript.dependencies下的配置 classpath("com.android.tools.build:gradle:4.2.2")
同时修改gradle/wrapper/gradle-wrapper.properties中的gradle版本:
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip
2. 适配Android 12的PendingIntent规则
Android 12要求所有PendingIntent必须指定FLAG_IMMUTABLE或FLAG_MUTABLE,你的部分依赖未处理该规则:
- react-native-push-notification@5.1.0:该版本未适配Android 12,需升级至至少8.1.1版本,或手动修改其源码中创建
PendingIntent的逻辑,添加对应flag。 - @react-native-firebase/messaging@7.8.4:升级至至少14.1.0版本,适配Android 12的通知权限与PendingIntent要求。
3. 显式配置组件导出属性
Android 12要求所有可被外部调用的组件(Activity、Service、Receiver)必须显式设置android:exported属性:
打开android/app/src/main/AndroidManifest.xml,为所有<activity>、<service>、<receiver>标签添加该属性,示例:
<activity android:name=".MainActivity" android:exported="true" android:label="@string/app_name" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode" android:launchMode="singleTask" android:windowSoftInputMode="adjustResize">
推送相关的Receiver(如ReactNativePushNotificationReceiver)也需添加android:exported="true"。
4. 更新Build Tools版本
根build.gradle中buildToolsVersion为30.0.2,需升级到适配API 31的版本:
buildToolsVersion = "31.0.0"
5. 升级其他过时依赖
检查并升级以下依赖到兼容API 31的版本:
react-native-image-picker:从3.2.1升级至4.0.0+@react-native-community/push-notification-ios:升级至最新稳定版rn-fetch-blob:该库已停止维护,建议替换为react-native-blob-util,或升级到最后兼容API 31的版本
验证流程
- 执行
cd android && ./gradlew clean清理构建缓存 - 重新运行
react-native run-android安装到Android 12设备 - 若仍有崩溃,通过Logcat查看具体报错信息,定位未适配的组件或代码
内容的提问来源于stack exchange,提问作者hamzafurkanatmaca
相关产品推荐
相关产品推荐

