我正在使用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)
在我的Proguard配置中添加-keep class com.google.common.** { *; }
可以使一切正常工作。看起来 Proguard 仅分析了主应用程序使用的类,并未查找仪器测试依赖项的使用情况。对于我的主应用程序未使用但仪器测试所需的方法/类似乎被优化掉了。
我该如何让Proguard保留Espresso及其依赖项所需的Guava类/方法?手动指定它们似乎并不实际(有很多地方要用),保留所有内容又失去了Proguard的目的。