AndroidX
AndroidX copied to clipboard
Package conflict between Xamarin.Firebase.Analytics and Xamarin.Firebase.Perf
Android framework version
net9.0-android
Affected platform version
Latest libraries/tools
Description
It's not possible to build with these two packages in the same MAUI project.
Steps to Reproduce
All one needs to do is create a new project with the latest version of Xamarin.Firebase.Analytics and Xamarin.Firebase.Perf and you get this error when compiling:
1>MSBUILD : java.exe error JAVA0000: Error in obj\Debug\net9.0-android\lp\294\jl\classes.jar:com/google/protobuf/DescriptorProtos$1.class:
1>MSBUILD : java.exe error JAVA0000: Type com.google.protobuf.DescriptorProtos$1 is defined multiple times: obj\Debug\net9.0-android\lp\294\jl\classes.jar:com/google/protobuf/DescriptorProtos$1.class, obj\Debug\net9.0-android\lp\337\jl\libs\8E428AF64A795598.jar:com/google/protobuf/DescriptorProtos$1.class
1>MSBUILD : java.exe error JAVA0000: Compilation failed
1>MSBUILD : java.exe error JAVA0000: java.lang.RuntimeException: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, origin: obj\Debug\net9.0-android\lp\294\jl\classes.jar
1>MSBUILD : java.exe error JAVA0000: com/google/protobuf/DescriptorProtos$1.class
1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.internal.to.a(R8_8.5.35_9c55004e7c41a17b1ed47c4e1952cb6778b3dac6afb6afc113a2737c3cde13e0:131)
1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.R8.main(R8_8.5.35_9c55004e7c41a17b1ed47c4e1952cb6778b3dac6afb6afc113a2737c3cde13e0:5)
1>MSBUILD : java.exe error JAVA0000: Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, origin: obj\Debug\net9.0-android\lp\294\jl\classes.jar:com/google/protobuf/DescriptorProtos$1.class
1>MSBUILD : java.exe error JAVA0000: at Version.fakeStackEntry(Version_8.5.35.java:0)
1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.T.a(R8_8.5.35_9c55004e7c41a17b1ed47c4e1952cb6778b3dac6afb6afc113a2737c3cde13e0:5)
1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.internal.to.a(R8_8.5.35_9c55004e7c41a17b1ed47c4e1952cb6778b3dac6afb6afc113a2737c3cde13e0:82)
1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.internal.to.a(R8_8.5.35_9c55004e7c41a17b1ed47c4e1952cb6778b3dac6afb6afc113a2737c3cde13e0:32)
1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.internal.to.a(R8_8.5.35_9c55004e7c41a17b1ed47c4e1952cb6778b3dac6afb6afc113a2737c3cde13e0:31)
1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.internal.to.c(R8_8.5.35_9c55004e7c41a17b1ed47c4e1952cb6778b3dac6afb6afc113a2737c3cde13e0:1)
1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.R8.b(R8_8.5.35_9c55004e7c41a17b1ed47c4e1952cb6778b3dac6afb6afc113a2737c3cde13e0:35)
1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.R8.a(R8_8.5.35_9c55004e7c41a17b1ed47c4e1952cb6778b3dac6afb6afc113a2737c3cde13e0:1548)
1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.internal.to.a(R8_8.5.35_9c55004e7c41a17b1ed47c4e1952cb6778b3dac6afb6afc113a2737c3cde13e0:118)
1>MSBUILD : java.exe error JAVA0000: ... 1 more
1>MSBUILD : java.exe error JAVA0000: Caused by: com.android.tools.r8.internal.g: Type com.google.protobuf.DescriptorProtos$1 is defined multiple times: obj\Debug\net9.0-android\lp\294\jl\classes.jar:com/google/protobuf/DescriptorProtos$1.class, obj\Debug\net9.0-android\lp\337\jl\libs\8E428AF64A795598.jar:com/google/protobuf/DescriptorProtos$1.class
1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.internal.x50.a(R8_8.5.35_9c55004e7c41a17b1ed47c4e1952cb6778b3dac6afb6afc113a2737c3cde13e0:21)
1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.internal.LY.a(R8_8.5.35_9c55004e7c41a17b1ed47c4e1952cb6778b3dac6afb6afc113a2737c3cde13e0:54)
1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.internal.LY.a(R8_8.5.35_9c55004e7c41a17b1ed47c4e1952cb6778b3dac6afb6afc113a2737c3cde13e0:10)
1>MSBUILD : java.exe error JAVA0000: at java.base/java.util.concurrent.ConcurrentHashMap.merge(ConcurrentHashMap.java:2056)
1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.internal.LY.a(R8_8.5.35_9c55004e7c41a17b1ed47c4e1952cb6778b3dac6afb6afc113a2737c3cde13e0:6)
1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.graph.p4$a.d(R8_8.5.35_9c55004e7c41a17b1ed47c4e1952cb6778b3dac6afb6afc113a2737c3cde13e0:6)
1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.dex.c.a(R8_8.5.35_9c55004e7c41a17b1ed47c4e1952cb6778b3dac6afb6afc113a2737c3cde13e0:95)
1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.dex.c.a(R8_8.5.35_9c55004e7c41a17b1ed47c4e1952cb6778b3dac6afb6afc113a2737c3cde13e0:44)
1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.dex.c.a(R8_8.5.35_9c55004e7c41a17b1ed47c4e1952cb6778b3dac6afb6afc113a2737c3cde13e0:9)
1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.R8.a(R8_8.5.35_9c55004e7c41a17b1ed47c4e1952cb6778b3dac6afb6afc113a2737c3cde13e0:110)
1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.R8.a(R8_8.5.35_9c55004e7c41a17b1ed47c4e1952cb6778b3dac6afb6afc113a2737c3cde13e0:1547)
1>MSBUILD : java.exe error JAVA0000: at com.android.tools.r8.internal.to.a(R8_8.5.35_9c55004e7c41a17b1ed47c4e1952cb6778b3dac6afb6afc113a2737c3cde13e0:28)
1>MSBUILD : java.exe error JAVA0000: ... 5 more
1>MSBUILD : java.exe error JAVA0000: Directory 'obj\Debug\net9.0-android\lp\294' is from 'protolite-well-known-types.aar'.
1>MSBUILD : java.exe error JAVA0000: Directory 'obj\Debug\net9.0-android\lp\337' is from 'Xamarin.Protobuf.JavaLite.aar'.
Did you find any workaround?
No workaround found.. but there probably is. I can't use dotnet list package transitive though because that's broken (https://github.com/dotnet/sdk/issues/36033)
Relevant log output
@soenneker did you ever find a workaround to this? We're getting the exact same error when using Xamarin.Firebase.Analytics v122.3.0.1 and Xamarin.Firebase.Perf v121.0.5.1 (which are both the latest as of my post)
I didn't. I suspect @moljac has seen this before though and could help.
Have you tried explicitly adding:
<PackageReference Include="Xamarin.Firebase.Analytics" Version="122.3.0.1" />
<PackageReference Include="Xamarin.Firebase.Perf" Version="121.0.5.1" />
to your project package dependencies??
I ended up solving it by including:
<PackageReference Include="Xamarin.Firebase.Analytics" Version="121.5.1" />
<PackageReference Include="Xamarin.Firebase.Perf" Version="120.5.0" />
@moljac This has been a longstanding issue since Xamarin.Firebase.Perf version 121.0.1 has been released. The latest working version is 121.0.0
Having the following packages installed together builds fine (latest Xamarin.Firebase.Analytics 122.3.0.1 and Xamarin.FIrebase.Perf 121.0.0):
<PackageReference Include="Xamarin.Firebase.Analytics" Version="122.3.0.1" />
<PackageReference Include="Xamarin.Firebase.Perf" Version="121.0.0" />
I have tried once again incrementally updating Xamarin.Firebase.Perf until I reached its latest published version (121.0.5.1), but each time the rebuild fails with the following error:
2>: Error JAVA0000 java: Error in obj/Debug/net9.0-android/lp/397/jl/classes.jar:com/google/protobuf/DescriptorProtos$1.class:
Type com.google.protobuf.DescriptorProtos$1 is defined multiple times: obj/Debug/net9.0-android/lp/397/jl/classes.jar:com/google/protobuf/DescriptorProtos$1.class, obj/Debug/net9.0-android/lp/453/jl/libs/8E428AF64A795598.jar:com/google/protobuf/DescriptorProtos$1.class
Compilation failed
java.lang.RuntimeException: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, origin: obj/Debug/net9.0-android/lp/397/jl/classes.jar
com/google/protobuf/DescriptorProtos$1.class
at com.android.tools.r8.internal.yu.a(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:131)
at com.android.tools.r8.D8.main(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:5)
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, origin: obj/Debug/net9.0-android/lp/397/jl/classes.jar:com/google/protobuf/DescriptorProtos$1.class
at Version.fakeStackEntry(Version_8.7.18.java:0)
at com.android.tools.r8.T.a(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:5)
at com.android.tools.r8.internal.yu.a(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:82)
at com.android.tools.r8.internal.yu.a(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:32)
at com.android.tools.r8.internal.yu.a(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:31)
at com.android.tools.r8.internal.yu.b(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:2)
at com.android.tools.r8.D8.a(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:42)
at com.android.tools.r8.D8.b(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:13)
at com.android.tools.r8.D8.a(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:40)
at com.android.tools.r8.internal.yu.a(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:118)
... 1 more
Caused by: com.android.tools.r8.internal.g: Type com.google.protobuf.DescriptorProtos$1 is defined multiple times: obj/Debug/net9.0-android/lp/397/jl/classes.jar:com/google/protobuf/DescriptorProtos$1.class, obj/Debug/net9.0-android/lp/453/jl/libs/8E428AF64A795598.jar:com/google/protobuf/DescriptorProtos$1.class
at com.android.tools.r8.internal.bd0.a(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:21)
at com.android.tools.r8.internal.Z50.a(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:54)
at com.android.tools.r8.internal.Z50.a(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:10)
at java.base/java.util.concurrent.ConcurrentHashMap.merge(ConcurrentHashMap.java:2048)
at com.android.tools.r8.internal.Z50.a(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:6)
at com.android.tools.r8.graph.s4$a.d(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:6)
at com.android.tools.r8.dex.c.a(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:95)
at com.android.tools.r8.dex.c.a(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:44)
at com.android.tools.r8.dex.c.a(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:9)
at com.android.tools.r8.D8.a(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:45)
at com.android.tools.r8.D8.d(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:17)
at com.android.tools.r8.D8.c(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:71)
at com.android.tools.r8.internal.yu.a(R8_8.7.18_f8bee6d6fb926b7ebb3b15bf98f726f9d57471456ea20fce6d17d9a020197688:28)
... 6 more
Directory 'obj/Debug/net9.0-android/lp/397' is from 'protolite-well-known-types.aar'.
Directory 'obj/Debug/net9.0-android/lp/453' is from 'Xamarin.Protobuf.JavaLite.aar'.
It looks like this is caused by a known Firebase issue:
https://github.com/firebase/firebase-android-sdk/issues/5997
Native Android can work around this by pinning protobuf-javalite = "4.26.1", which works because protolite-well-known-types is constrained between protobuf-javalite versions (3.25.5 - 4.32.1) (see https://mvnrepository.com/artifact/com.google.firebase/protolite-well-known-types/18.0.1)
This doesn't appear to be possible for Android .NET because the nuget packaging constrains Xamarin.Protobuf.JavaLite (>= 4.31.1.1)
So there are two problems:
- Native Firebase issue
- Nuget packing for Xamarin.Protobuf.JavaLite doesn't match native versioning constraints, making the interim workaround unavailable for .NET
Would it be an easy enough thing to just adjust the package constraint for Xamarin.Protobuf.Javalite to match?
+1
I found an extremely hacky workaround.
Just take the Xamarin.Protobuf.JavaLite.aar file from the Xamarin.Protobuf.JavaLite nuget package (version 4.26.1) and replace the matching file in your build machine's NuGet cache for whatever version is being resolved. This lets you sort of 'pin' the working binary without upsetting nuget.