Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Failed to generate Java type for class #8911

Open
mfkl opened this issue Apr 29, 2024 · 3 comments
Open

Failed to generate Java type for class #8911

mfkl opened this issue Apr 29, 2024 · 3 comments
Assignees
Labels
Area: App+Library Build Issues when building Library projects or Application projects. Area: Bindings Issues in Java Library Binding projects.

Comments

@mfkl
Copy link

mfkl commented Apr 29, 2024

Android application type

.NET Android (net7.0-android, net8.0-android, etc.)

Affected platform version

VS 17.9.6, .NET 7.0.202

Description

I'm currently looking at adding Android MAUI support to LibVLCSharp.

Set up a new binding project for our own .aar, which builds fine, and adapted the C# code that uses it (generated C# code is slightly different).

Now trying to build a MAUI app sample that uses this new binding project, through a MAUI library. It fails with

(_GenerateJavaStubs target) -> 
C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\33.0.68\tools\Xamarin.Android.Common.targets(1476,3): error XA4209: Failed to generate Java type for class: LibVLCSharp.Platforms.Android.LayoutChangeListener due to System.IO.FileNotFoundException: Could not load assembly 'LibVLCSharp.Android.AWindowModern, Version=3.8.2.0, Culture=neutral, PublicKeyToken='. Perhaps it doesn't exist in the Mono for Android profile?
3>C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\33.0.68\tools\Xamarin.Android.Common.targets(1476,3): error XA4209: File name: 'LibVLCSharp.Android.AWindowModern.dll'
3>C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\33.0.68\tools\Xamarin.Android.Common.targets(1476,3): error XA4209:    at Java.Interop.Tools.Cecil.DirectoryAssemblyResolver.Resolve(AssemblyNameReference reference, ReaderParameters parameters) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil/DirectoryAssemblyResolver.cs:line 245
3>C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\33.0.68\tools\Xamarin.Android.Common.targets(1476,3): error XA4209:    at Mono.Cecil.MetadataResolver.Resolve(TypeReference type) in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/cecil/Mono.Cecil/MetadataResolver.cs:line 111
3>C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\33.0.68\tools\Xamarin.Android.Common.targets(1476,3): error XA4209:    at Mono.Cecil.TypeReference.Resolve() in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/cecil/Mono.Cecil/TypeReference.cs:line 278
3>C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\33.0.68\tools\Xamarin.Android.Common.targets(1476,3): error XA4209:    at Java.Interop.Tools.Cecil.TypeDefinitionCache.Resolve(TypeReference typeReference) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil/TypeDefinitionCache.cs:line 20
3>C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\33.0.68\tools\Xamarin.Android.Common.targets(1476,3): error XA4209:    at Java.Interop.Tools.Cecil.TypeDefinitionRocks.GetPartialAssemblyName(TypeReference type, IMetadataResolver resolver) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil/TypeDefinitionRocks.cs:line 130
3>C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\33.0.68\tools\Xamarin.Android.Common.targets(1476,3): error XA4209:    at Java.Interop.Tools.Cecil.TypeDefinitionRocks.GetPartialAssemblyQualifiedName(TypeReference type, IMetadataResolver resolver) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil/TypeDefinitionRocks.cs:line 143
3>C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\33.0.68\tools\Xamarin.Android.Common.targets(1476,3): error XA4209:    at Java.Interop.Tools.JavaCallableWrappers.JavaCallableWrapperGenerator.GetManagedParameters(MethodDefinition ctor, String outerType) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.JavaCallableWrappers/Java.Interop.Tools.JavaCallableWrappers/JavaCallableWrapperGenerator.cs:line 510
3>C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\33.0.68\tools\Xamarin.Android.Common.targets(1476,3): error XA4209:    at Java.Interop.Tools.JavaCallableWrappers.JavaCallableWrapperGenerator.AddConstructor(MethodDefinition ctor, TypeDefinition type, String outerType, List`1 baseCtors, List`1 curCtors, Boolean onlyRegisteredOrExportedCtors, Boolean skipParameterCheck) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.JavaCallableWrappers/Java.Interop.Tools.JavaCallableWrappers/JavaCallableWrapperGenerator.cs:line 287
3>C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\33.0.68\tools\Xamarin.Android.Common.targets(1476,3): error XA4209:    at Java.Interop.Tools.JavaCallableWrappers.JavaCallableWrapperGenerator.AddConstructors(TypeDefinition type, String outerType, List`1 baseCtors, List`1 curCtors, Boolean onlyRegisteredOrExportedCtors) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.JavaCallableWrappers/Java.Interop.Tools.JavaCallableWrappers/JavaCallableWrapperGenerator.cs:line 280
3>C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\33.0.68\tools\Xamarin.Android.Common.targets(1476,3): error XA4209:    at Java.Interop.Tools.JavaCallableWrappers.JavaCallableWrapperGenerator..ctor(TypeDefinition type, String outerType, Action`2 log, IMetadataResolver resolver, JavaCallableMethodClassifier methodClassifier) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.JavaCallableWrappers/Java.Interop.Tools.JavaCallableWrappers/JavaCallableWrapperGenerator.cs:line 221
3>C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\33.0.68\tools\Xamarin.Android.Common.targets(1476,3): error XA4209:    at Xamarin.Android.Tasks.GenerateJavaStubs.CreateJavaSources(IEnumerable`1 javaTypes, TypeDefinitionCache cache, MarshalMethodsClassifier classifier)
  • I have verified that the relevant DLL (LibVLCSharp.Android.AWindowModern.dll) is indeed where it should be (in the bin\Debug\net7.0-android folder of the MAUI sample app project). The MAUI library project that uses the binding project builds fine.
  • The new binding project targets net7.0-android so I don't understand why the dll isn't being loaded.

Steps to Reproduce

  1. Clone https://github.com/mfkl/libvlcsharp
  2. Checkout the maui branch
  3. Build the LibVLCSharp.MAUI.Sample project.

Did you find any workaround?

No response

Relevant log output

No response

@mfkl mfkl added the needs-triage Issues that need to be assigned. label Apr 29, 2024
@jpobst
Copy link
Contributor

jpobst commented Apr 29, 2024

This looks like maybe an issue with transitive <ProjectReference>s?

The chain appears to be:

  • LibVLCSharp.MAUI.Sample.csproj
    • LibVLCSharp.MAUI.csproj
      • LibVLCSharp.csproj
        • LibVLCSharp.Android.AWindowModern.csproj

Why does this have PrivateAssets? I thought that meant "the output from this should not be available to things that reference it".

<ProjectReference Include="..\LibVLCSharp.Android.AWindowModern\LibVLCSharp.Android.AWindowModern.csproj" PrivateAssets="All" />

It might also be worth trying net8.0-android. I think there have been some fixes to binding projects in .NET 8.

@jpobst jpobst added Area: App+Library Build Issues when building Library projects or Application projects. Area: Bindings Issues in Java Library Binding projects. and removed needs-triage Issues that need to be assigned. labels Apr 29, 2024
@mfkl
Copy link
Author

mfkl commented Apr 30, 2024

Why does this have PrivateAssets?

To be honest I can't recall, but I think there was a good reason we did it this way at the time, for monoandroid using BuildOutputInPackage in a target. Now it seems to build when removing PrivateAssets. I'll close this, thanks!

@mfkl mfkl closed this as completed Apr 30, 2024
@mfkl
Copy link
Author

mfkl commented May 18, 2024

Why does this have PrivateAssets?

Ok I remember now that I've spent some time looking at the code. We'd rather not ship the java interop binding project to NuGet cause it doesn't make sense for people to install it directly and it's currently shipped in the libvlcsharp package (which relies on it for its Android part).

But it seems PrivateAssets is kinda broken with the latest net6+ dotnet / android tooling: videolan/libvlcsharp#345. So we might have to ship it to NuGet anyway after all.

Feel free to close this unless you have something to add that I may have missed!

@mfkl mfkl reopened this May 18, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area: App+Library Build Issues when building Library projects or Application projects. Area: Bindings Issues in Java Library Binding projects.
Projects
None yet
Development

No branches or pull requests

3 participants