[Xamarin.Android.Build.Tasks] use mono.android.jar
only for $(AndroidCodegenTarget)=XAJavaInterop1
#9813
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
mono.android.jar/dex
are compiled with$(AndroidCodegenTarget)=XAJavaInterop1
, and so this causes a problem if you build a project with$(AndroidCodegenTarget)=JavaInterop1
as incorrect Java stubs will be used.For example,
dotnet new maui
using NativeAOT we can get a crash such as:Which is caused by
mono.android.Runtime.register
being called bymono/android/view/View_OnClickListenerImplementor.java
which is compiled with$(AndroidCodegenTarget)=XAJavaInterop1
.To fix this:
Several places already check if
$(_AndroidUseMarshalMethods)=true
and skip usage ofmono.android.jar
.Add an additional check to verify
$(AndroidCodegenTarget)=XAJavaInterop1
Previously,
$(AndroidCodegenTarget)
was also allowed to blank and default toXAJavaInterop1
, but it seems better to explicitly set it.I also updated the
NativAOT()
test to verifymono/android/views/View_OnClickListenerImplementor.java
is generated on disk.