我正在开发的应用程序是使用 Gradle 构建的。我正在尝试将Espresso添加为仪器测试的依赖项。该应用程序本身有一些依赖项,其中之一是 Guava 15.0。为了完成这项工作,我使用具有显式依赖关系的 Espresso 版本,并排除捆绑的 Guava(改用我自己的)。
dependencies {
...
instrumentTestCompile fileTree(dir: 'libs/espresso-dependencies', include: '*.jar')
compile 'com.google.guava:guava:15.0'
...
}
当我尝试使用 构建时gradle connectedInstrumentTest
,我收到与缺少方法和类相关的错误。
java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState
at com.google.android.apps.common.testing.ui.espresso.base.InputManagerEventInjectionStrategy.<init>(InputManagerEventInjectionStrategy.java:35)
添加-keep class com.google.common.** { *; }
到我的 Proguard 配置使一切正常。似乎正在发生的事情是,Proguard 只分析主应用程序使用的类,而不是寻找仪器测试依赖项的使用情况。我的主应用程序未使用但仪器测试所需的方法/类似乎已被优化掉。
如何让 Proguard 保留 Espresso 及其依赖项所需的 Guava 类/方法?手动指定它们似乎不切实际(有很多用法),并且保留所有它们违背了 Proguard 的目的。