xamarin / GooglePlayServicesComponents

Other
315 stars 148 forks source link

NoSuchMethodError after CollectionReference.AddSnapshotListener #366

Open rjhind opened 4 years ago

rjhind commented 4 years ago

Xamarin.Android Version (eg: 6.0):

10.3.1.4

Operating System & Version (eg: Mac OSX 10.11):

macOS 10.15.5

Describe your Issue

Trying to use Firestore.CollectionReference.AddSnapshotListener with version 121.4.3-preview01 leads to a NoSuchMethod error. The AddSnapshotListener call succeeds but shortly afterwards the error is thrown:

So I guess this is when the Firestore libraries try to call back with a change.

This doesn't happen with the latest stable 71.1705.3 release however SetCacheSizeBytes() is unavailable in that version so I'm trying the latest preview release.

Relevant information

This is in a Xamarin.Forms project. The NuGet packages in use are:

Packages used:

<PackageReference Include="Xamarin.Forms" Version="4.7.0.1080" />
<PackageReference Include="Xamarin.Essentials" Version="1.5.3.2" />
<PackageReference Include="Xamarin.Firebase.Auth">
  <Version>119.3.1-preview01</Version>
</PackageReference>
<PackageReference Include="Xamarin.Firebase.Firestore">
  <Version>121.4.3-preview01</Version>
</PackageReference>
<PackageReference Include="Xamarin.AndroidX.Lifecycle.LiveData" Version="2.1.0" />
<PackageReference Include="Xamarin.AndroidX.Browser" Version="1.0.0" />
<PackageReference Include="Xamarin.Google.Android.Material" Version="1.0.0" />
<PackageReference Include="Xamarin.AndroidX.Legacy.Support.V4" Version="1.0.0" />

Build settings (tools)

<AndroidApplication>True</AndroidApplication>
<AndroidResgenFile>Resources\Resource.designer.cs</AndroidResgenFile>
<AndroidResgenClass>Resource</AndroidResgenClass>
<AndroidManifest>Properties\AndroidManifest.xml</AndroidManifest>
<MonoAndroidResourcePrefix>Resources</MonoAndroidResourcePrefix>
<MonoAndroidAssetsPrefix>Assets</MonoAndroidAssetsPrefix>
<TargetFrameworkVersion>v9.0</TargetFrameworkVersion>
<AndroidEnableSGenConcurrent>true</AndroidEnableSGenConcurrent>
<AndroidUseAapt2>true</AndroidUseAapt2>
<AndroidHttpClientHandlerType>Xamarin.Android.Net.AndroidClientHandler</AndroidHttpClientHandlerType>

Steps to Reproduce (with link to sample solution if possible):

Need a firestore database setup to be able to provide a demonstration of this.

Include any relevant Exception Stack traces, build logs, adb logs:

{Java.Lang.NoSuchMethodError: No virtual method putPropagating(Lio/opencensus/tags/TagKey;Lio/opencensus/tags/TagValue;)Lio/opencensus/tags/TagContextBuilder; in class Lio/opencensus/tags/TagContextBuilder; or its super classes (declaration of 'io.opencensus.tags.TagContextBuilder' appears in /data/app/com.tebira.firebasetest-1/base.apk:classes2.dex) --- End of managed Java.Lang.NoSuchMethodError stack trace --- java.lang.NoSuchMethodError: No virtual method putPropagating(Lio/opencensus/tags/TagKey;Lio/opencensus/tags/TagValue;)Lio/opencensus/tags/TagContextBuilder; in class Lio/opencensus/tags/TagContextBuilder; or its super classes (declaration of 'io.opencensus.tags.TagContextBuilder' appears in /data/app/com.tebira.firebasetest-1/base.apk:classes2.dex) at io.grpc.internal.CensusStatsModule$ClientCallTracer.<init>(CensusStatsModule.java:359) at io.grpc.internal.CensusStatsModule.newClientCallTracer(CensusStatsModule.java:146) at io.grpc.internal.CensusStatsModule$StatsClientInterceptor.interceptCall(CensusStatsModule.java:689) at io.grpc.ClientInterceptors$InterceptorChannel.newCall(ClientInterceptors.java:156) at io.grpc.internal.ManagedChannelImpl.newCall(ManagedChannelImpl.java:814) at io.grpc.internal.ForwardingManagedChannel.newCall(ForwardingManagedChannel.java:63) at io.grpc.android.AndroidChannelBuilder$AndroidChannel.newCall(AndroidChannelBuilder.java:288) at com.google.firebase.firestore.remote.GrpcCallProvider.lambda$createClientCall$0(com.google.firebase:firebase-firestore@@21.4.3:138) at com.google.firebase.firestore.remote.GrpcCallProvider$$Lambda$1.then(com.google.firebase:firebase-firestore@@21.4.3) at com.google.android.gms.tasks.zzg.run(com.google.android.gms:play-services-tasks@@17.0.2:2) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:154) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at com.google.firebase.firestore.util.AsyncQueue$SynchronizedShutdownAwareExecutor$DelayedStartFactory.run(com.google.firebase:firebase-firestore@@21.4.3:229) at java.lang.Thread.run(Thread.java:818) }

rjhind commented 4 years ago

OK, looks like if I add a reference to Xamarin.IO.OpenCensus.OpenCensusApi then that fixes the method not found error. Can it be set so this package is automatically referenced?

moljac commented 4 years ago

@aabc123

Xamarin.IO.OpenCensus.OpenCensusApi is for sure transitive reference. From what I recall: GPS-FB uses GRPC and OpenCensus is some kind of telemetry library.

Now, why this was removed? I have no idea. It could be R8 or xamarin linker removing that method overly aggressive or some other problem. Not sure.

Could you create 2 bin logs:

  1. without explicitly added Xamarin.IO.OpenCensus.OpenCensusApinuget package
  2. with explicitly added Xamarin.IO.OpenCensus.OpenCensusApinuget package

please??

rjhind commented 4 years ago

@moljac Would be happy to. How do I create a bin log?

moljac commented 4 years ago

*. add /bl to commandline invocation

*. install VS extension Project System Tools

See:

https://msbuildlog.com/

https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.ProjectSystemTools

https://github.com/dotnet/project-system-tools

https://lastexitcode.com/blog/2019/12/31/ProjectSystemToolsForVisualStudioMac/

TobiasBuchholz commented 3 years ago

I'm having a similar problem with this stacktrace and adding Xamarin.IO.OpenCensus.OpenCensusApi (version 0.21.0) solved it for me as well.

binlogs.zip contains the bin logs as you've requested. Hope this helps :)