xamarin / java.interop

Java.Interop provides open-source bindings of Java's Java Native Interface (JNI) for use with .NET managed languages such as C#

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

NRE in `ExplicitInterfaceInvokerMethod` constructor

espritm opened this issue · comments

Android application type

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

Affected platform version

VSMac 17.6.3 (build 421)

Description

Trying to bind the following aar file, but I am stuck with the following error when I build

BINDINGSGENERATOR: Error BG0000: System.NullReferenceException: Object reference not set to an instance of an object. (BG0000)

sense-sdk-android-lib-3.28.0.zip

I also tried to add all dependencies as AndroidLibrary with Bind=false, but it does not fix the issue.

      net.zetetic:android-database-sqlcipher:3.5.9
      androidx.appcompat:appcompat:1.4.1
      androidx.biometric:biometric:1.1.0
      androidx.activity:activity:1.4.0
      androidx.fragment:fragment:1.4.1
      androidx.core:core:1.7.0
      androidx.annotation:annotation:1.3.0
      com.scottyab:rootbeer-lib:0.1.0 
      org.slf4j:slf4j-api:1.7.10
      com.google.code.gson:gson:2.8.7
      com.github.briandilley.jsonrpc4j:jsonrpc4j:1.0        
            com.fasterxml.jackson.core:jackson-core:2.0.2
            com.fasterxml.jackson.core:jackson-databind:2.0.2
            com.fasterxml.jackson.core:jackson-annotations:2.0.2
            javax.portlet:portlet-api:2.0
            javax.servlet:javax.servlet-api:3.1-b06
      commons-io:commons-io:2.4
      commons-lang:commons-lang:2.6
      org.apache.httpcomponents:httpcore:4.4.14

Steps to Reproduce

  1. Create a new Android Binding Library Project
  2. Add the .aar file
  3. Build -> We get the BG0000 error

Did you find any workaround?

No

Relevant log output


BINDINGSGENERATOR : error BG0000: System.NullReferenceException: Object reference not set to an instance of an object.
       at generator.SourceWriters.ExplicitInterfaceInvokerMethod..ctor(GenBase iface, Method method, CodeGenerationOptions opt) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/tools/generator/SourceWriters/ExplicitInterfaceInvokerMethod.cs:line 26
       at generator.SourceWriters.ClassInvokerClass.AddMethodInvokers(ClassGen klass, IEnumerable`1 methods, HashSet`1 members, InterfaceGen gen, CodeGenerationOptions opt) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/tools/generator/SourceWriters/ClassInvokerClass.cs:line 117
       at generator.SourceWriters.ClassInvokerClass.AddMemberInvokers(ClassGen klass, CodeGenerationOptions opt, HashSet`1 members) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/tools/generator/SourceWriters/ClassInvokerClass.cs:line 73
       at generator.SourceWriters.ClassInvokerClass..ctor(ClassGen klass, CodeGenerationOptions opt) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/tools/generator/SourceWriters/ClassInvokerClass.cs:line 67
       at generator.SourceWriters.BoundClass..ctor(ClassGen klass, CodeGenerationOptions opt, CodeGeneratorContext context, GenerationInfo generationInfo) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/tools/generator/SourceWriters/BoundClass.cs:line 88
       at MonoDroid.Generation.JavaInteropCodeGenerator.WriteType(GenBase gen, String indent, GenerationInfo gen_info) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/tools/generator/Java.Interop.Tools.Generator.CodeGeneration/JavaInteropCodeGenerator.cs:line 43
       at MonoDroid.Generation.ClassGen.Generate(CodeGenerationOptions opt, GenerationInfo gen_info) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/tools/generator/Java.Interop.Tools.Generator.ObjectModel/ClassGen.cs:line 155
       at Xamarin.Android.Binder.CodeGenerator.Run(CodeGeneratorOptions options, DirectoryAssemblyResolver resolver) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/tools/generator/CodeGenerator.cs:line 257
       at Xamarin.Android.Binder.CodeGenerator.Run(CodeGeneratorOptions options) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/tools/generator/CodeGenerator.cs:line 50
       at Xamarin.Android.Binder.CodeGenerator.Main(String[] args) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/tools/generator/CodeGenerator.cs:line 33

Hello @jonathanpeppers any chance you could have a idea ?

It looks like there is an issue with binding a few methods. I am still investigating why this happens, but it can be worked around by not binding the offending classes if they aren't needed, using the following Metadata xml:

<metadata>
  <remove-node path="/api/package[@name='ch.sysmosoft.shaded.com.fasterxml.jackson.databind.deser']/class[@name='SettableBeanProperty']" />
  <remove-node path="/api/package[@name='ch.sysmosoft.shaded.com.fasterxml.jackson.databind.ser']/class[@name='PropertyWriter']" />
</metadata>

Thank you jpobst ! I confirm it allow me to go ahead with the binding.