如何使用番石榴依赖项和Espresso配置应用程序

时间:2014-07-25 20:16:01

标签: gradle guava android-espresso android-instrumentation

我将guava作为应用程序依赖项并在Instrumentation测试中使用Espresso。 由于Espresso附带com.google.guava:guava:16.0,并且我在应用程序依赖项中有guava,因此我必须处理重复的依赖项问题。

Jake Wharton在Double Espresso中指出,我可以通过以下方式解决重复的依赖问题:

compile 'com.google.guava:guava:17.0'
androidTestCompile('com.jakewharton.espresso:espresso:1.1-r3') {
  exclude group: 'com.squareup.dagger'
  exclude group: 'com.google.guava'
}
但是,在那条线上,我收到了以下一些错误:

java.lang.NoSuchMethodError: com.google.common.base.Optional.get
    at com.google.android.apps.common.testing.ui.espresso.base.ThreadPoolExecutorExtractor.getAsyncTaskThreadPool(ThreadPoolExecutorExtractor.java:50)

似乎Espresso没有找到番石榴依赖。 当我尝试

compile 'com.google.guava:guava:17.0'
androidTestCompile ('com.jakewharton.espresso:espresso:1.1-r2') {
  exclude group: 'com.squareup.dagger'
  exclude group: 'com.google.guava'
}
androidTestCompile('com.google.guava:guava:17.0')

现在java.lang.NoSuchMethodError: com.google.common.base.Optional.get已从espresso代码中消失,但当Instrumentation测试遇到使用guava方法之一的应用程序代码时,我仍然收到以下错误:java.lang.NoClassDefFoundError < / p>

当我摆脱androidTestCompile('com.google.guava:guava:17.0')时也会发生此错误。

我尝试使用番石榴AndroidTestProvided,没有运气。

当仪器测试用guava方法测试应用程序代码时,我想知道为什么它找不到番石榴的路径。

这是一个堆栈跟踪

Caused by: java.lang.NoClassDefFoundError: com/themis/clioAndroid/activity/calendar/calendarEntry/CalendarEntryListAdapter$1
at com.themis.clioAndroid.activity.calendar.calendarEntry.CalendarEntryListAdapter.<clinit>(CalendarEntryListAdapter.java:112)
... 34 more
Caused by: java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
at dalvik.system.DexFile.defineClass(Native Method)
at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:211)
at dalvik.system.DexPathList.findClass(DexPathList.java:315)
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:58)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
... 35 more

点击使用new Ordering<SomeClass>()的{​​{1}}。

感谢任何反馈。

1 个答案:

答案 0 :(得分:1)

看起来Proguard很痛苦。

Proguard或Android gradle插件的设置方式并不会导致非常聪明地了解espresso库。添加

-keep class com.google.common.** { *; }

proguard-rules.txt

或者,如果您使用proguard来绕过65K方法限制,请考虑切换到MultiDex support package