我在我的Android应用中使用google的grpc库,它依赖于google guava库。出于某种原因,嵌入在grpc中的番石榴没有“直接检测器”。类MoreExecutors.
中的方法但该方法存在于github版本中?是什么导致了这种差异?
在名为ClientCallImpl的类中,调用directExecutor。在导入语句(import static com.google.common.util.concurrent.MoreExecutors.directExecutor;
)上,AndroidStudio会显示can't resolve symbol
消息,但构建不会失败。在执行期间进行调用时会引发异常。
错误消息
FATAL EXCEPTION: SyncAdapterThread-1
Process: com.asdf.asdf, PID: 4025
java.lang.NoSuchMethodError: No static method directExecutor()Ljava/util/concurrent/Executor; in class Lcom/google/common/util/concurrent/MoreExecutors; or its super classes (declaration of 'com.google.common.util.concurrent.MoreExecutors' appears in /data/data/com.fentale.dalol/files/instant-run/dex/slice-guava-jdk5-17.0_a8ada10dcaf113cb6e3b4d3e5b46975833f8ae8f-classes.dex)
at io.grpc.internal.ClientCallImpl.<init>(ClientCallImpl.java:100)
at io.grpc.internal.ManagedChannelImpl$RealChannel.newCall(ManagedChannelImpl.java:320)
at io.grpc.internal.ManagedChannelImpl.newCall(ManagedChannelImpl.java:299)
at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:130)
at com.fentale.dalol.nano.DalolGrpc$DalolBlockingStub.topPosts(DalolGrpc.java:365)
修改
问题似乎是我的项目依赖于guava-18.0
和guava-jdk5-17.0.
我想要的方法directExecutor
仅在guava-18的MoreExecutors类中定义,而不是17。但是代码在后一版本中寻找它。我该如何解决这个问题。
答案 0 :(得分:0)
我的应用程序依赖于依赖番石榴的youtube库。然而,youtube的番石榴依赖来自与grpc不同的来源,并使用旧版本。应用程序中存在两个版本的番石榴罐,而grpc正在访问youtube的旧版番石榴版而不是自己的版本,这导致了问题。
compile('com.google.apis:google-api-services-youtube:v3-rev164-1.21.0') {
exclude module: 'guava-jdk5'
}