React Native构建失败:依赖库未显式配置android:exported属性
问题背景
自己的React Native应用已经在主Manifest里配置了android:exported="true",但构建时还是报错,原因是第三方依赖(androidx.test相关的Activity)没配置该属性。不想降级到Android SDK 30,因为满足不了编译需求。
环境信息
- React Native 0.68
- Android SDK 版本33
- Android Gradle Plugin 版本7.3.0
报错信息
错误:必须为元素<activity#androidx.test.core.app.InstrumentationActivityInvoker$EmptyActivity>显式指定android:exported。面向Android 12及更高版本的应用,当对应组件定义了intent filter时,必须为
android:exported指定明确值。
错误:必须为元素<activity#androidx.test.core.app.InstrumentationActivityInvoker$EmptyFloatingActivity>显式指定android:exported。面向Android 12及更高版本的应用,当对应组件定义了intent filter时,必须为android:exported指定明确值。
解决方案
1. 直接在主Manifest补全缺失的属性
打开项目的android/app/src/main/AndroidManifest.xml,先确保manifest标签里添加了tools命名空间:xmlns:tools="http://schemas.android.com/tools",再添加以下代码强制补全属性:
<activity android:name="androidx.test.core.app.InstrumentationActivityInvoker$EmptyActivity" android:exported="false" tools:node="merge" tools:replace="android:exported" /> <activity android:name="androidx.test.core.app.InstrumentationActivityInvoker$EmptyFloatingActivity" android:exported="false" tools:node="merge" tools:replace="android:exported" />
这里设为false是因为这些是测试用Activity,不需要对外暴露,完全符合需求。
2. 升级androidx.test.core依赖
这个问题是旧版本的androidx.test.core库未适配Android 12导致的,直接升级依赖就能解决。在android/app/build.gradle里更新依赖版本:
dependencies { // 替换成1.5.0及以上版本 androidTestImplementation 'androidx.test:core:1.5.0' }
升级后,第三方库的Manifest会自动带上正确的android:exported配置,无需手动补全。
3. 排查其他依赖
如果还有类似报错,打开Android Studio的Manifest编辑器,切换到底部的Merged Manifest标签,搜索android:exported,找到所有未配置的组件,重复步骤1的方式补全即可。
内容的提问来源于stack exchange,提问作者dondino

