Java Binding api.xml.class-parse : warning BG8605: The Java type '$' could not be found

937 Views Asked by At

I'm trying to create C# bindings over 'mcumgr-ble.aar'

https://mvnrepository.com/artifact/io.runtime.mcumgr/mcumgr-ble/0.12.0-beta4

I have downloaded all the dependencies of the .aar file:

    kotlinx-coroutines-android.jar
    kotlinx-coroutines-core-jvm.jar
    kotlinx-coroutines-core.jar
    kotlinx-coroutines-debug.jar
    kotlinx-coroutines-guava.jar
    kotlinx-coroutines-javafx.jar
    kotlinx-coroutines-jdk8.jar
    kotlinx-coroutines-jdk9.jar
    kotlinx-coroutines-play-services.jar
    kotlinx-coroutines-reactive.jar
    kotlinx-coroutines-reactor.jar
    kotlinx-coroutines-rx2.jar
    kotlinx-coroutines-rx3.jar
    kotlinx-coroutines-slf4j.jar
    kotlinx-coroutines-swing.jar
    kotlinx-coroutines-test-jvm.jar
    kotlinx-coroutines-test.jar
    slf4j-api.jar

In the .csproj file I have:

  <ItemGroup Condition=" $(TargetFramework.ToLower().StartsWith('monoandroid')) ">
      <Compile Include="Droid\*.cs" />
      <Compile Include="Droid\Specific\*.cs" />
      <ReferenceJar Include="Droid\Jars\*.jar;Droid\Jars\*.aar" />
      <TransformFile Include="Droid\Transforms\*.xml" />
      <LibraryProjectZip Include="Droid\Jars\mcumgr-ble.aar" />
      <!-- t.odo  experiment with EmbeddedReferenceJar -->
      <Reference Include="Mono.Android" />
      <Reference Include="Java.Interop" />
      <PackageReference Include="Karamunting.Kotlin.StdLib" Version="1.3.11" />
      <PackageReference Include="Karamunting.Kotlin.StdLib.Common" Version="1.3.11" />
      <PackageReference Include="Xamarin.KotlinX.Coroutines.Core.Jvm" Version="1.6.4" />
  </ItemGroup>

The depencies of the .csproj look like so:

Dependencies

However I keep getting the following ominous warnings in the build output:

   "/Users/foobar/Repos/xyz.cmps/mcumgr.dev.mcumgr-ble/xyz.McuMgr/xyz.McuMgr.csproj" (default target) (1:19) ->
   "/Users/foobar/Repos/xyz.cmps/mcumgr.dev.mcumgr-ble/xyz.McuMgr/xyz.McuMgr.csproj" (Build target) (1:24) ->
   (_ExportJarToXml target) -> 
     obj/Release/monoandroid12.0/api.xml.class-parse : warning BG8605: The Java type '$' could not be found (are you missing a Java reference jar/aar or a Java binding library NuGet?) [/Users/foobar/Repos/xyz.cmps/mcumgr.dev.mcumgr-ble/xyz.McuMgr/xyz.McuMgr.csproj]
     /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Bindings.ClassParse.targets(36,5): obj/Release/monoandroid12.0/api.xml.class-parse warning BG8605: The Java type '$' could not be found (are you missing a Java reference jar/aar or a Java binding library NuGet?) [/Users/foobar/Repos/xyz.cmps/mcumgr.dev.mcumgr-ble/xyz.McuMgr/xyz.McuMgr.csproj]
     obj/Release/monoandroid12.0/api.xml.class-parse : warning BG8605: The Java type 'io.runtime.mcumgr.exception.McuMgrException' could not be found (are you missing a Java reference jar/aar or a Java binding library NuGet?) [/Users/foobar/Repos/xyz.cmps/mcumgr.dev.mcumgr-ble/xyz.McuMgr/xyz.McuMgr.csproj]
     /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Bindings.ClassParse.targets(36,5): obj/Release/monoandroid12.0/api.xml.class-parse warning BG8605: The Java type 'io.runtime.mcumgr.exception.McuMgrException' could not be found (are you missing a Java reference jar/aar or a Java binding library NuGet?) [/Users/foobar/Repos/xyz.cmps/mcumgr.dev.mcumgr-ble/xyz.McuMgr/xyz.McuMgr.csproj]
     obj/Release/monoandroid12.0/api.xml.class-parse : warning BG8605: The Java type 'kotlin.coroutines.jvm.internal.SuspendLambda' could not be found (are you missing a Java reference jar/aar or a Java binding library NuGet?) [/Users/foobar/Repos/xyz.cmps/mcumgr.dev.mcumgr-ble/xyz.McuMgr/xyz.McuMgr.csproj]
     /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Bindings.ClassParse.targets(36,5): obj/Release/monoandroid12.0/api.xml.class-parse warning BG8605: The Java type 'kotlin.coroutines.jvm.internal.SuspendLambda' could not be found (are you missing a Java reference jar/aar or a Java binding library NuGet?) [/Users/foobar/Repos/xyz.cmps/mcumgr.dev.mcumgr-ble/xyz.McuMgr/xyz.McuMgr.csproj]
     obj/Release/monoandroid12.0/api.xml.class-parse : warning BG8605: The Java type 'no.nordicsemi.android.ble.BleManager' could not be found (are you missing a Java reference jar/aar or a Java binding library NuGet?) [/Users/foobar/Repos/xyz.cmps/mcumgr.dev.mcumgr-ble/xyz.McuMgr/xyz.McuMgr.csproj]
     /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Bindings.ClassParse.targets(36,5): obj/Release/monoandroid12.0/api.xml.class-parse warning BG8605: The Java type 'no.nordicsemi.android.ble.BleManager' could not be found (are you missing a Java reference jar/aar or a Java binding library NuGet?) [/Users/foobar/Repos/xyz.cmps/mcumgr.dev.mcumgr-ble/xyz.McuMgr/xyz.McuMgr.csproj]
     obj/Release/monoandroid12.0/api.xml.class-parse : warning BG8605: The Java type 'no.nordicsemi.android.ble.data.DataMerger' could not be found (are you missing a Java reference jar/aar or a Java binding library NuGet?) [/Users/foobar/Repos/xyz.cmps/mcumgr.dev.mcumgr-ble/xyz.McuMgr/xyz.McuMgr.csproj]
     /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Bindings.ClassParse.targets(36,5): obj/Release/monoandroid12.0/api.xml.class-parse warning BG8605: The Java type 'no.nordicsemi.android.ble.data.DataMerger' could not be found (are you missing a Java reference jar/aar or a Java binding library NuGet?) [/Users/foobar/Repos/xyz.cmps/mcumgr.dev.mcumgr-ble/xyz.McuMgr/xyz.McuMgr.csproj]
     obj/Release/monoandroid12.0/java-resolution-report.log : warning BG8606: Some types or members could not be bound because referenced Java types could not be found. See the 'java-resolution-report.log' file for details. [/Users/foobar/Repos/xyz.cmps/mcumgr.dev.mcumgr-ble/xyz.McuMgr/xyz.McuMgr.csproj]
     /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Bindings.ClassParse.targets(36,5): obj/Release/monoandroid12.0/java-resolution-report.log warning BG8606: Some types or members could not be bound because referenced Java types could not be found. See the 'java-resolution-report.log' file for details. [/Users/foobar/Repos/xyz.cmps/mcumgr.dev.mcumgr-ble/xyz.McuMgr/xyz.McuMgr.csproj]
   
   
   "/Users/foobar/Repos/xyz.cmps/mcumgr.dev.mcumgr-ble/xyz.McuMgr/xyz.McuMgr.csproj" (default target) (1:19) ->
   "/Users/foobar/Repos/xyz.cmps/mcumgr.dev.mcumgr-ble/xyz.McuMgr/xyz.McuMgr.csproj" (Build target) (1:24) ->
   (GenerateBindings target) -> 
     /Users/foobar/Repos/xyz.cmps/mcumgr.dev.mcumgr-ble/xyz.McuMgr/Droid/Transforms/Metadata.xml(10,6): warning BG8A00: Metadata.xml element '<remove-node path="/api/package[@name='no.nordicsemi.android.dfu']/class[@name='DfuBaseService']/implements[contains(@name, 'no.nordicsemi.android.dfu.DfuProgressInfo.ProgressListener')]" />' matched no nodes. [/Users/foobar/Repos/xyz.cmps/mcumgr.dev.mcumgr-ble/xyz.McuMgr/xyz.McuMgr.csproj]
     /Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Bindings.Core.targets(61,5): /Users/foobar/Repos/xyz.cmps/mcumgr.dev.mcumgr-ble/xyz.McuMgr/Droid/Transforms/Metadata.xml(10,6) warning BG8A00: Metadata.xml element '<remove-node path="/api/package[@name='no.nordicsemi.android.dfu']/class[@name='DfuBaseService']/implements[contains(@name, 'no.nordicsemi.android.dfu.DfuProgressInfo.ProgressListener')]" />' matched no nodes. [/Users/foobar/Repos/xyz.cmps/mcumgr.dev.mcumgr-ble/xyz.McuMgr/xyz.McuMgr.csproj]
   
       14 Warning(s)
       0 Error(s)

Here is a snippet from 'api.xml.class-parse' which is showing the problem at hand:

  <method
    abstract="false"
    deprecated="not deprecated"
    final="false"
    name="addObserver"
    native="false"
    return="void"
    jni-return="V"
    static="false"
    synchronized="true"
    visibility="public"
    bridge="false"
    synthetic="false"
    jni-signature="(Lio/runtime/mcumgr/McuMgrTransport$ConnectionObserver;)V">
    <parameter
      name="observer"
      type="io.runtime.mcumgr.McuMgrTransport.ConnectionObserver"
      jni-type="Lio/runtime/mcumgr/McuMgrTransport$ConnectionObserver;"
      not-null="true" />
  </method>

I suspect that the '$' sign the error is referring to is in method names such as the one shown above:

  io/runtime/mcumgr/McuMgrTransport$ConnectionObserver
1

There are 1 best solutions below

0
XDS On BEST ANSWER

Turns out this is due to the heavy use of Kotlin in the libraries in question. There's virtually nothing that can be done about this other than creating a wrapper .aar which is purely written in Java and then just create bindings for that (thus side-stepping any and all issues).