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

升级Android SDK 34后React Native应用启动崩溃求助

解决方案

一、修复BridgeDevSupportManager缺失问题

React Native 0.68.6属于较旧版本,对Android SDK 34的适配存在不足,导致Debug模式下DevSupportManager初始化失败:

  • 临时应急方案(Debug环境):在MainApplication.java中修改getUseDeveloperSupport()方法,强制关闭开发者支持(仅用于临时验证,开发时不推荐):
    @Override
    public boolean getUseDeveloperSupport() {
      return BuildConfig.DEBUG && false; // 强制关闭开发者支持
    }
    
  • 根本修复方案:升级React Native到0.68分支的最新补丁版本(如0.68.7),该版本已针对SDK 34修复了DevSupport相关兼容问题。执行升级命令:
    npm install react-native@0.68.7 --save
    
    之后同步gradle依赖并清理构建缓存:
    cd android && ./gradlew clean
    

二、修复广播接收器SecurityException

Android 14(SDK 34)强制要求所有广播接收器必须明确指定exported属性:

  1. Manifest中注册的接收器:打开AndroidManifest.xml,为所有<receiver>标签添加android:exported属性,根据接收器用途设置true或false:
    • 若接收器需要接收系统广播(如开机完成、网络变化),设置android:exported="true";
    • 若仅接收应用内部广播,设置android:exported="false"。
      示例:
    <receiver
        android:name=".receivers.BootCompletedReceiver"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
    
  2. 动态注册的接收器:在代码中调用registerReceiver()时,添加第三个参数指定导出标记:
    // 接收外部广播时使用
    registerReceiver(receiver, intentFilter, Context.RECEIVER_EXPORTED);
    // 仅接收应用内部广播时使用
    registerReceiver(receiver, intentFilter, Context.RECEIVER_NOT_EXPORTED);
    

三、额外优化建议

  • 避免使用googlePlayServicesVersion = "+"这种动态版本号,指定具体稳定版本(如"17.0.0"),防止依赖冲突引发隐性问题;
  • 将androidXAnnotation版本升级至兼容SDK 34的版本(如"1.6.0"),旧版本可能不支持新的注解要求。

内容的提问来源于stack exchange,提问作者Vaishnavi Maske

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 04:46:09