-
Notifications
You must be signed in to change notification settings - Fork 564
Description
Android application type
Classic Xamarin.Android (MonoAndroid12.0, etc.), Android for .NET (net6.0-android, etc.)
Affected platform version
All
Description
Context: https://developercommunity.visualstudio.com/t/Android-does-not-compile-R8-Could-not-c/10041869
Context: https://discord.com/channels/732297728826277939/732297837953679412/976106729123242034
Context? https://developercommunity.visualstudio.com/t/Xamarin-Forms-Android-project-will-not-b/10038789
Context: …
The ideal error message lets you know what went wrong in such a fashion that you can fix it.
1>R8 : error : Could not create the Java Virtual Machine.
1>R8 : error : A fatal exception has occurred. Program will exit.
/usr/local/share/dotnet/packs/Microsoft.Android.Sdk.Darwin/32.0.300-rc.3.45/tools/Xamarin.Android.D8.targets(5,5): Error: java.lang.RuntimeException: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, origin: obj/Debug/net6.0-android/lp/63/jl/classes.jar : android/support/v4/app/INotificationSideChannel$Stub.class (WearOSNet6Test)
Xamarin.Android.Common.targets: … error MSB6006: “java.exe” exited with code 1
We should do better.
"Guiding principal": if we need to ask someone for a diagnostic build log to understand a problem, we have failed. We must do better.
At minimum, we should update AndroidToolTask (and others) so that all output, stdout & stderr, is collected. When an error occurs, all output should be re-printed as part of the error message. (We currently attempt to do this in JavaToolTask, but it's clearly not doing enough. We need to improve JavaToolTask/etc. & do that everywhere.)
Additionally, we need to "demangle" our paths. Consider: https://discord.com/channels/732297728826277939/732297837953679412/976109392413990982
here's the problem
Type android.support.v4.app.INotificationSideChannel$Stub is defined multiple times: obj/Debug/net6.0-android/lp/63/jl/classes.jar:android/support/v4/app/INotificationSideChannel$Stub.class, obj/Debug/net6.0-android/lp/4/jl/bin/classes.jar:android/support/v4/app/INotificationSideChannel$Stub.class
Where do obj/Debug/net6.0-android/lp/4/jl/bin/classes.jar:android and obj/Debug/net6.0-android/lp/63/classes.jar come from?
We know that we can use obj/Debug/net6.0-android/lp/map.cache to associate 4 with "something in lines 3-6 in map.cache" (yay off-by-one errors), but this isn't particularly helpful; it requires additional "back and forth" between the customer experiencing the error and us, trying to help the customer.
Instead, we should print additional error output, informing that obj/Debug/net6.0-android/lp/4 is from e.g. Xamarin.Android.Support.Annotations.dll, and obj/Debug/net6.0-android/63 is from e.g. androidx.core.core.aar.
This "demangling" should be done for all error messages, including "non-Java" tools such as aapt2.
Steps to Reproduce
Consider #7003:
-
Download WearOSNet6Test.zip
-
Extract it:
unzip WearOSNet6Test.zip cd WearOSNet6Test -
Build it:
dotnet build
Actual output:
C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\32.0.300-rc.1.4\tools\Xamarin.Android.D8.targets(79,5): error : java.lang.RuntimeException: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, origin: obj\Debug\net6.0-android31\lp\59\jl\classes.jar : android/support/v4/app/INotificationSideChannel$Stub.class [C:\Users\jopryo\Downloads\WearOSNet6Test\WearOSNet6Test.csproj]
Desired output: something more useful?
error XA0000: Error in obj\Debug\net6.0-android31\lp\59\jl\classes.jar:android/support/v4/app/INotificationSideChannel$Stub.class: (TaskId:207)
error XA0000: Type android.support.v4.app.INotificationSideChannel$Stub is defined multiple times: obj\Debug\net6.0-android31\lp\59\jl\classes.jar:android/support/v4/app/INotificationSideChannel$Stub.class, obj\Debug\net6.0-android31\lp\4\jl\bin\classes.jar:android/support/v4/app/INotificationSideChannel$Stub.class (TaskId:207)
error XA0000: Compilation failed (TaskId:207)
error XA0000: Exception in thread "main" java.lang.RuntimeException: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, origin: obj\Debug\net6.0-android31\lp\59\jl\classes.jar:android/support/v4/app/INotificationSideChannel$Stub.class (TaskId:207)
error XA0000: at com.android.tools.r8.internal.oO0.a(SourceFile:92) (TaskId:207)
error XA0000: at com.android.tools.r8.D8.main(D8.java:4) (TaskId:207)
error XA0000: Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, origin: obj\Debug\net6.0-android31\lp\59\jl\classes.jar:android/support/v4/app/INotificationSideChannel$Stub.class (TaskId:207)
error XA0000: at Version.fakeStackEntry(Version_3.1.51.java:0) (TaskId:207)
error XA0000: at com.android.tools.r8.internal.oO0.a(SourceFile:68) (TaskId:207)
error XA0000: at com.android.tools.r8.internal.oO0.a(SourceFile:28) (TaskId:207)
error XA0000: at com.android.tools.r8.internal.oO0.a(SourceFile:27) (TaskId:207)
error XA0000: at com.android.tools.r8.internal.oO0.b(SourceFile:3) (TaskId:207)
error XA0000: at com.android.tools.r8.D8.a(D8.java:17) (TaskId:207)
error XA0000: at com.android.tools.r8.D8.a(D8.java:15) (TaskId:207)
error XA0000: at com.android.tools.r8.internal.oO0.a(SourceFile:84) (TaskId:207)
error XA0000: ... 1 more (TaskId:207)
error XA0000: Caused by: com.android.tools.r8.internal.b: Type android.support.v4.app.INotificationSideChannel$Stub is defined multiple times: obj\Debug\net6.0-android31\lp\59\jl\classes.jar:android/support/v4/app/INotificationSideChannel$Stub.class, obj\Debug\net6.0-android31\lp\4\jl\bin\classes.jar:android/support/v4/app/INotificationSideChannel$Stub.class (TaskId:207)
error XA0000: at com.android.tools.r8.internal.il1.a(SourceFile:14) (TaskId:207)
error XA0000: at com.android.tools.r8.internal.il1.a(SourceFile:22) (TaskId:207)
error XA0000: at com.android.tools.r8.internal.lf1.b(SourceFile:6) (TaskId:207)
error XA0000: at com.android.tools.r8.internal.lf1.a(SourceFile:23) (TaskId:207)
error XA0000: at com.android.tools.r8.internal.lf1.a(SourceFile:10) (TaskId:207)
error XA0000: at java.base/java.util.concurrent.ConcurrentHashMap.merge(ConcurrentHashMap.java:2048) (TaskId:207)
error XA0000: at com.android.tools.r8.internal.lf1.a(SourceFile:6) (TaskId:207)
error XA0000: at com.android.tools.r8.graph.r2$a.f(SourceFile:4) (TaskId:207)
error XA0000: at com.android.tools.r8.dex.b.a(SourceFile:96) (TaskId:207)
error XA0000: at com.android.tools.r8.dex.b.a(SourceFile:21) (TaskId:207)
error XA0000: at com.android.tools.r8.D8.a(D8.java:21) (TaskId:207)
error XA0000: at com.android.tools.r8.D8.d(D8.java:11) (TaskId:207)
error XA0000: at com.android.tools.r8.D8.c(D8.java:1) (TaskId:207)
error XA0000: at com.android.tools.r8.internal.oO0.a(SourceFile:24) (TaskId:207)
error XA0000: ... 5 more (TaskId:207)
error XA0000: Directory `obj\Debug\net6.0-android31\lp\59` is from `androidx.core.core.aar`
error XA0000: Directory `obj\Debug\net6.0-android31\lp\4` is from `Xamarin.Android.Support.Compat.dll`
Did you find any workaround?
Collect diagnostic build output / .binlog files.
Everybody does that, right? Right?
(Narrator: no, not everybody does that.)
Relevant log output
No response