适配Android 14(SDK34)后应用启动即崩溃问题求助
问题背景
适配Android 14(SDK34)后,应用构建成功但启动即崩溃,Bug Report核心报错如下:
Caused by: java.lang.RuntimeException: Requested enabled DevSupportManager, but BridgeDevSupportManager class was not found or could not be created Caused by: java.lang.SecurityException: com.aptean.tms.pod: One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered exclusively for system broadcasts Caused by: java.lang.reflect.InvocationTargetException Caused by: android.os.RemoteException: Remote stack trace
此前SDK配置:
kotlinVersion = "1.6.0" buildToolsVersion = "30.0.2" minSdkVersion = 21 compileSdkVersion = 31 targetSdkVersion = 30
已做修改:
kotlinVersion = "1.6.0" buildToolsVersion = "34.0.0" minSdkVersion = 23 compileSdkVersion = 34 targetSdkVersion = 34
项目依赖配置:
dependencies { classpath('com.android.tools.build:gradle:7.1.0-rc01') classpath 'com.google.gms:google-services:4.3.10' }
一、解决SecurityException(广播接收器属性缺失)
错误原因
Android 14(API34)强化了广播接收器的安全性要求:所有非系统专属的广播接收器,必须显式声明android:exported属性,无论Manifest静态注册还是代码动态注册的接收器,未声明都会触发该异常。
修复方案
静态注册的接收器(Manifest中)
检查所有<receiver>标签,根据接收器用途添加android:exported属性:- 需接收外部应用/系统广播:设为
android:exported="true" - 仅接收本应用内部广播:设为
android:exported="false"
示例:
<receiver android:name=".MyInternalReceiver" android:exported="false"> <intent-filter> <action android:name="com.example.APP_INTERNAL_ACTION" /> </intent-filter> </receiver>- 需接收外部应用/系统广播:设为
动态注册的接收器(代码中)
API33+(Android 13及以上)要求调用registerReceiver()时传入导出标志,结合你的minSdkVersion=23,需做版本兼容判断:val receiver = MyDynamicReceiver() val intentFilter = IntentFilter("com.example.DYNAMIC_ACTION") if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { // Android 13+ 指定导出标志 registerReceiver(receiver, intentFilter, Context.RECEIVER_NOT_EXPORTED) } else { // 低版本直接注册 registerReceiver(receiver, intentFilter) }
二、解决RuntimeException(BridgeDevSupportManager找不到)
错误原因
该错误与React Native的DevSupport模块相关,核心是旧版gradle插件、kotlin版本或RN版本未适配Android 14环境,导致依赖类无法加载。
修复方案
升级gradle插件与kotlin版本
旧版gradle插件(7.1.x)对SDK34支持不完善,建议升级到适配Android 14的稳定版,同步兼容kotlin版本:// 项目根目录build.gradle buildscript { ext { kotlinVersion = "1.8.22" // 与gradle 8.x兼容 } dependencies { classpath 'com.android.tools.build:gradle:8.1.4' // 适配SDK34的稳定版 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" classpath 'com.google.gms:google-services:4.4.0' // 升级Google Services到最新稳定版 } }同步修改gradle wrapper版本(
gradle/wrapper/gradle-wrapper.properties):distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip检查React Native版本兼容性
若项目基于React Native,旧版本(如0.71及以下)未适配Android 14,需升级到RN 0.72及以上版本,确保DevSupport模块正常加载。清理构建缓存
执行以下命令清理缓存后重新构建:./gradlew clean ./gradlew build --refresh-dependencies
额外注意事项
- 排查第三方SDK:确保项目依赖的第三方库(推送、统计等)均已适配Android 14,避免因第三方库未声明
android:exported导致连锁异常。 - 区分环境测试:DevSupport模块仅在debug环境生效,若release环境仍报错,需检查release构建是否误开启调试模式。
内容的提问来源于stack exchange,提问作者Gayathri Josyula

