我将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}}。
感谢任何反馈。
答案 0 :(得分:1)
看起来Proguard很痛苦。
Proguard或Android gradle插件的设置方式并不会导致非常聪明地了解espresso库。添加
-keep class com.google.common.** { *; }
到proguard-rules.txt
或者,如果您使用proguard来绕过65K方法限制,请考虑切换到MultiDex support package。