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

React Native升级Target API至34后API34模拟器启动崩溃求助

Target API 34升级后应用在API34模拟器闪退,API33设备正常运行

问题描述

  • 项目Target API从33升级至34,构建过程成功
  • Visual Studio/Xcode模拟器运行无报错,但应用启动后闪退
  • Pixel 6 Pro API33设备可正常打开应用,同一项目在Pixel 6 Pro API34设备上无法启动
  • Logcat报错指向广播接收器未指定导出属性,以及DevSupportManager初始化失败

相关配置

buildscript配置

buildscript { 
    ext { 
        buildToolsVersion = "34.0.0" 
        minSdkVersion = 21 
        compileSdkVersion = 34 
        targetSdkVersion = 34 
        ndkVersion = "21.4.7075529" 
        // Any of the following will work 
        // googlePlayServicesVersion = "17.0.0" 
        playServicesVersion = "18.0.0" 
        // playServicesLocationVersion = "17.0.0" 
    } 
}

Gradle版本

distributionUrl=https://services.gradle.org/distributions/gradle-7.2-all.zip

React Native依赖调整

将implementation "com.facebook.react:react-native:+"修改为:

dependencies {
    // ...其他依赖项
    implementation "com.facebook.react:react-native:0.67.2"
}

AndroidManifest.xml权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.VIBRATE"/>

开发环境

  • Android Studio版本:Flamingo 2022.2.1 Patch 1

Logcat错误日志

07-11 09:48:21.855  6868  6868 E AndroidRuntime: Process: com.testreactnative, PID: 6868
07-11 09:48:21.855  6868  6868 E AndroidRuntime: java.lang.RuntimeException: Unable to create application com.testreactnative.MainApplication: java.lang.RuntimeException: Requested enabled DevSupportManager, but BridgeDevSupportManager class was not found or could not be created
07-11 09:48:21.855  6868  6868 E AndroidRuntime:        at com.testreactnative.MainApplication.onCreate(MainApplication.java:55)
07-11 09:48:21.855  6868  6868 E AndroidRuntime: Caused by: java.lang.SecurityException: com.testreactnative: One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered exclusively for system broadcasts
07-11 09:48:21.874   561  2080 W ActivityTaskManager:   Force finishing activity com.testreactnative/.MainActivity

解决方案

1. 给静态注册的广播接收器添加导出属性

Android 14(API34)要求所有非系统专属的广播接收器必须指定android:exported属性,检查AndroidManifest.xml中的所有<receiver>标签,补充该属性:

<!-- 根据接收器是否需要接收外部应用广播选择true/false -->
<receiver 
    android:name=".YourReceiverClass"
    android:exported="true"> <!-- 或false -->
    <intent-filter>
        <!-- 你的Intent过滤规则 -->
    </intent-filter>
</receiver>

2. 适配React Native版本的API34兼容性

React Native 0.67.2对API34的支持存在缺陷,可通过以下方式修复:

  • 升级RN版本:优先升级到0.71+版本,这些版本已完整适配Android 14;若无法大版本升级,至少升级到0.67.x的最新补丁版(如0.67.5),修复部分API34兼容问题。
  • 调整DevSupportManager配置:在MainApplication.java中修改开发支持开关逻辑,避免API34下初始化失败:
    @Override
    public boolean getUseDeveloperSupport() {
        // 仅在Debug模式且API低于34时开启开发支持
        return BuildConfig.DEBUG && Build.VERSION.SDK_INT < 34;
    }
    

3. 修复动态注册的广播接收器

若代码中存在通过registerReceiver动态注册的广播,需在API34环境下添加RECEIVER_EXPORTED或RECEIVER_NOT_EXPORTED标志:

IntentFilter filter = new IntentFilter("com.your.app.action");
// 根据需求选择导出或不导出
registerReceiver(yourReceiverInstance, filter, Context.RECEIVER_EXPORTED);

内容的提问来源于stack exchange,提问作者Kıvanç ARSLAN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:33:20