使用Gradle在Android模拟器运行测试时MockK抛出ExceptionInInitializerError
解决Windows x86模拟器上MockK插桩测试的架构不兼容问题
你遇到的问题是MockK的agent库在x86模拟器上加载了错误架构的SO文件,结合你的场景,可通过以下步骤解决:
1. 修正MockK依赖配置
移除mockk-agent-jvm依赖,因为mockk-android已经包含了适配Android平台的agent组件,同时引入jvm版本的agent会导致架构冲突。修改后的依赖块如下:
dependencies { androidTestImplementation "io.mockk:mockk-android:1.13.7" androidTestImplementation 'androidx.test:runner:1.5.2' androidTestUtil "androidx.test:orchestrator:1.4.2" }
2. 限制JNI库的打包架构
在packagingOptions中明确指定只保留x86架构的MockK agent SO文件,避免错误加载ARM架构的文件:
android { ... packagingOptions { jniLibs { useLegacyPackaging = true pickFirsts += ['lib/x86/libmockkjvmtiagent.so'] exclude 'lib/armeabi-v7a/libmockkjvmtiagent.so' exclude 'lib/arm64-v8a/libmockkjvmtiagent.so' exclude 'lib/x86_64/libmockkjvmtiagent.so' // 若使用x86_64模拟器则删除此行 } } ... }
3. 确认模拟器ABI设置
打开AVD管理器,编辑你的x86模拟器,确保CPU/ABI选择的是x86或x86_64,不要启用ARM兼容翻译模式(部分高版本Android模拟器默认开启,可能导致SO加载异常)。
4. 清理并重新构建
执行以下命令清理缓存并重新构建测试包,确保配置生效:
./gradlew clean assembleAndroidTest
完成以上步骤后,再通过Gradle CLI运行插桩测试,应该就能解决架构不兼容的问题了。
内容的提问来源于stack exchange,提问作者Elias
相关产品推荐
相关产品推荐

