我正在使用的应用程序正在使用Gradle构建。我正在尝试添加Espresso作为仪器测试的依赖项。该应用程序本身有一些依赖项,其中一个是Guava 15.0。为了做到这一点,我使用Espresso版本的显式依赖,并排除捆绑的番石榴(使用我自己的代替)。集成浓缩咖啡和Proguard和Gradle
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的目的。
不幸的是,由于具有太多方法(通过库),该应用程序由于没有proguard而失败了dex步骤。有足够的余地添加番石榴排除,但在其他地方也可能会出现类似的错误(即任何时候方法/类在测试中使用,但不在主应用程序中)。 – antonyt