Search code examples
androidxamarinxamarin.androidxamarin-binding

Xamarin Android Bindings


I'm trying to create bindings for the android sdk provided here https://www.nmi.com/sdks-and-apis#CDNA. The binding project builds, and I can add it into my xamarin android project but as soon as I include it I get the following error/s.

error: package com.creditcall.chipdnamobile does not exist com.creditcall.chipdnamobile.IApplicationSelectionListener ChipDnaSample.Android C:\Users\mikee\Documents\GitHub\ChipDna\ChipDnaSample\ChipDnaSample.Android\obj\Debug\90\android\src\mono\com\creditcall\chipdnamobile\IApplicationSelectionListenerImplementor.java 8

error: package com.creditcall.chipdnamobile does not exist private native void n_onAvailablePinPads (com.creditcall.chipdnamobile.Parameters p0); ChipDnaSample.Android C:\Users\mikee\Documents\GitHub\ChipDna\ChipDnaSample\ChipDnaSample.Android\obj\Debug\90\android\src\mono\com\creditcall\chipdnamobile\IAvailablePinPadsListenerImplementor.java 33

There are 64 errors of the same nature just referencing different classes. I've put all the code on GitHub here

If I go into Obj/Release/generated/src I can find IApplicationSelectionListener so it is created some binding but it doesn't actually work. Could someone point me in the right direction about what I need to do to correct errors such as these?

Thanks


Solution

  • You have to change the build type of the jars. The java compile can't find it, because it's not present at compile time.

    Change

    • InputJar to EmbeddedInputJar for ChipDnaMobile.jar
    • ReferenceJar to EmbeddedReferenceJar for CardEaseXMLClient.jar

    For more info see: https://learn.microsoft.com/en-us/xamarin/android/platform/binding-java-library/binding-a-jar

    The important sentences:

    Typically, you use the EmbeddedJar build action so that the .JAR is automatically packaged into the bindings library. This is the simplest option – Java bytecode in the .JAR is converted into Dex bytecode and is embedded (along with the Managed Callable Wrappers) into your APK. If you want to keep the .JAR separate from the bindings library, you can use the InputJar option; however, you must ensure that the .JAR file is available on the device that runs your app.