2016-04-04 2 views
0

Я использую библиотеку google grpc в своем приложении для Android, основанное на библиотеке goava goava. По какой-то причине guava, встроенная в grpc, не имеет метода directExecutor в классе MoreExecutors. Но метод присутствует в версии github? Что объясняет несоответствие?Метод directExecutor отсутствует в библиотеке guava

В классе, называемом 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) 

EDIT

Кажется, проблема в том, что мой проект имеет зависимость от обоих guava-18.0 и guava-jdk5-17.0. метод, который я хочу directExecutor только определяется в классе MoreExecutors из guava-18, а не 17. Но код ищет его в последней версии класса. Как я могу это решить.

+0

Эй, Майкл, вы могли решить это? Я столкнулся с той же проблемой. –

+0

@NameisNilay Оформить мой ответ. –

+0

У меня нет зависимости Youtube в моем приложении. Так что это бесполезно. Кроме того, я написал модуль исключения: «guava-jdk5» для каждого импорта, но до сих пор не могу решить эту ошибку. Любое предложение ? –

ответ

0

Мое приложение зависело от библиотеки youtube, которая зависела от guava. Однако зависимость guava от youtube происходит от другого источника, кроме grpc, и использует более старую версию. В приложении существовала две версии флага guava, и grpc получал доступ к более старой версии guava от youtube, а не к собственной, что вызвало эту проблему.

compile('com.google.apis:google-api-services-youtube:v3-rev164-1.21.0') { 
    exclude module: 'guava-jdk5' 
}