Android 12(API31+)应用安装失败:测试组件未指定android:exported
解决Android 12测试依赖Manifest导致的INSTALL_PARSE_FAILED_MANIFEST_MALFORMED错误
以下是几个可行的修复方案,按优先级推荐:
升级测试依赖版本
这个问题在androidx.test:core1.5.0及以上版本已被官方修复。直接在模块的build.gradle(或build.gradle.kts)中更新相关测试依赖的版本:dependencies { androidTestImplementation 'androidx.test:core:1.5.0' androidTestImplementation 'androidx.test:runner:1.5.2' androidTestImplementation 'androidx.test:rules:1.5.0' // 其他测试依赖同步升级到对应兼容版本 }同步gradle后,自动生成的Manifest里的三个Activity会带上正确的
android:exported属性。手动在测试Manifest中覆盖属性
如果暂时无法升级依赖,可在src/androidTest/AndroidManifest.xml中手动为这三个Activity添加android:exported属性,通过Manifest合并规则覆盖自动生成的内容:- 先在Manifest根节点添加tools命名空间:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="你的测试包名"> - 加入三个Activity的声明:
<activity android:name="androidx.test.core.app.BootstrapActivity" android:exported="false" tools:node="merge" /> <activity android:name="androidx.test.core.app.EmptyActivity" android:exported="false" tools:node="merge" /> <activity android:name="androidx.test.core.app.EmptyFloatingActivity" android:exported="false" tools:node="merge" />
tools:node="merge"会让系统把你的配置和自动生成的Manifest内容合并,确保exported属性生效。- 先在Manifest根节点添加tools命名空间:
排查并强制依赖版本统一
若项目中存在其他测试库间接引入旧版本androidx.test:core,可通过依赖树排查:
在终端执行命令:./gradlew app:dependencies找到所有引用
androidx.test:core的地方,然后在build.gradle中添加版本强制规则:configurations.all { resolutionStrategy { force 'androidx.test:core:1.5.0' } }这样能确保所有依赖都使用指定的修复版本。
内容的提问来源于stack exchange,提问作者Iris-Smile
相关产品推荐
相关产品推荐

