将Espresso与Proguard和Gradle集成

时间:2013-11-28 08:56:43

标签: android gradle dependencies guava android-espresso

我正在使用的应用程序正在使用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的目的。

2 个答案:

答案 0 :(得分:11)

这对我有用:

在build.gradle中,我将此行添加到defaultConfig部分:

testProguardFile "test-proguard-rules.pro"

然后我用以下内容创建了test-proguard-rules.pro:

-dontobfuscate
-dontwarn

这告诉gradle为你的测试apk使用这个单独的proguard配置,包含你的仪器测试。在这种情况下,你告诉proguard不要混淆你的测试apk,这可能是你想要的。您正在测试的主apk仍然使用您现有的proguard配置进行模糊处理。

答案 1 :(得分:-7)

在测试期间不要预测你的apk,除非你绝对不得不这样做。