React Native适配Android12已配置android:exported仍构建报错
问题原因
你主项目的AndroidManifest.xml已经正确配置了android:exported属性,但React Native项目依赖的第三方库自带的清单文件中,带有intent-filter的组件没有显式声明该属性,构建执行清单合并操作时会触发Android 12+的校验规则,导致报错。
解决方案
- 第一步:定位缺失属性的具体组件
进入项目的android目录,执行以下命令输出完整的构建错误日志:- Mac/Linux系统:
./gradlew processDebugManifest --stacktrace - Windows系统:
gradlew.bat processDebugManifest --stacktrace
日志中会明确标注缺少android:exported属性的组件全类名、所属依赖包。
- Mac/Linux系统:
- 第二步:在主项目清单中重写对应组件配置
在主项目的AndroidManifest.xml中加入对应组件的声明,显式指定android:exported值,示例如下:<!-- 先在manifest根标签补充tools命名空间声明 --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.kims.doctors"> <!-- application标签内部加入你找到的缺失属性的组件配置 --> <activity android:name="这里填报错的组件全类名" android:exported="false" <!-- 外部不需要调用该组件就填false,需要接收外部跳转就填true --> tools:node="merge" /> - 补充优化点:你当前清单中
SplashActivity和MainActivity都配置了LAUNCHER类别的intent-filter,会导致桌面生成两个应用入口,不需要的话可以删除MainActivity的intent-filter配置。 - 临时兜底方案:如果暂时排查不到问题,可将
android/build.gradle中的compileSdkVersion和targetSdkVersion临时改为30,规避校验规则,该方案不适合长期使用,目前多数应用商店要求应用targetSdk≥31才能上架。
内容的提问来源于stack exchange,提问作者Jithendra Nath
相关产品推荐
相关产品推荐

