0

我将番石榴作为应用程序依赖项并在仪器测试中使用 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从浓缩咖啡代码中消失了,但是当仪器测试命中使用番石榴方法之一的应用程序代码时,我仍然收到以下错误:java.lang.NoClassDefFoundError

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

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

当仪器测试使用番石榴方法命中应用程序代码时,为什么它找不到番石榴的路径,我已经没有想法了。

这是一个堆栈跟踪

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>()哪个使用com.google.common.collect.Ordering.

任何反馈表示赞赏。

4

1 回答 1

1

看起来Proguard很痛苦。

Proguard 或 Android gradle 插件的设置方式不会导致处理 espresso 库非常智能。添加

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

给你的proguard-rules.txt

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

于 2014-11-20T16:16:45.533 回答