需要严格强制执行依赖项版本才能修复崩溃,但会导致单元测试依赖项冲突。如何解决?

Strictly enforcing a dependency version is required to fix a crash, but causes unit-test dependency conflicts. How to solve?

提问人:Sean Blahovici 提问时间:3/5/2023 更新时间:3/5/2023 访问量:47

问:

因此,为了修复我在 Android 6 设备上生产的讨厌的崩溃,我被迫在 gradle 中严格使用 android 版本的番石榴。

如果有兴趣,可以在此处描述有问题的崩溃:java.lang.NoClassDefFoundError:com.google.common.base.CharMatcher

修复此崩溃的方法是定义番石榴依赖项,如下所示:

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 依赖项番 石榴

评论


答: 暂无答案