修复崩溃需要严格执行依赖版本,但会导致单元测试依赖冲突。怎么解决?

问题描述 投票:0回答:0

所以为了修复我在 Android 6 设备上生产时遇到的一个讨厌的崩溃,我被迫在 gradle 中严格使用 android 版本的番石榴。

如果有兴趣,这里会描述有问题的崩溃:java.lang.NoClassDefFoundError: com.google.common.base.CharMatcher

解决这个crash的方法是定义guava依赖如下:

implementation ("com.google.guava:guava:31.1-android") {
   version{
        strictly "31.1-android"
    }
}

所以这修复了崩溃(能够在模拟器上重现问题)。但是,现在当我尝试运行单元测试时出现问题,特别是 Robolectric 单元测试。 Robolectric 依赖于 31.1-jre。我在控制台中收到此错误:

 Dependency path 'app:unspecified' --> 'app:unspecified' (localDebugRuntimeElements) --> 'com.google.guava:guava:{strictly 31.1-android}'
 Dependency path 'app:unspecified' --> 'org.robolectric:robolectric:4.9.2' (runtimeElements) --> 'org.robolectric:pluginapi:4.9.2' (runtimeElements) --> 'com.google.guava:guava:31.1-jre'

除非删除严格定义,否则我无法运行单元测试。

所以我的问题是:有没有一种方法可以严格执行不同版本的依赖项来进行测试?

我现在基本上不得不在运行单元测试时诉诸注释代码。任何帮助将不胜感激!

android gradle android-gradle-plugin dependencies guava
© www.soinside.com 2019 - 2024. All rights reserved.