Portar Card.IO a C # Xamarin Studio

Tengo problemas para intentar conectar Card.IO a Xamarin Android. Como estoy usando C # en lugar de Java, no sé qué hacer con los archivos .so y los archivos .jar.

He intentado seguir algunos de los pasos publicados aquí: card.io Mono para Android (Xamarin Studio) pero estoy recibiendo los siguientes dos errores de compilación que no sé cómo resolver.

Esto es lo que he hecho hasta ahora

  1. Crear un nuevo proyecto de biblioteca de enlaces Java de Android

  2. Agregue los archivos .jar y .so del proyecto Card.IO con la estructura de carpetas existente. Así que hay cuatro subcarpetas en la carpeta / libs, y luego un solo tarro bajo / libs.

  3. Agregue lo siguiente a Transforms / EnumMethods.xml para resolver un error del compilador:

    <mapping jni-class="io/card/payment/CardIOActivity"> <method jni-name="onActivityResult" parameter="p1" clr-enum-type="Android.App.Result" /> </mapping> 
  4. Agregue una referencia a la biblioteca anterior en mi aplicación principal.

Y entonces me enfrentan a estos errores de compilación:

El tipo o nombre de espacio de nombres 'IN' no existe en el espacio de nombres 'IO.Card.Payment' (le falta una referencia de ensamblado?)

'A': los nombres de los miembros no pueden ser iguales a su tipo adjunto

Actualizar

El primer error está en esta línea:

 public sealed partial class CardIOActivity : global::Android.App.Activity, global::IO.Card.Payment.IN { 

El segundo error parece estar en esta línea:

 public static global::System.Collections.IList A { 

Cualquier ayuda es útil, gracias!

He pasado como 10 horas ydia para obtener la tarjeta io trabajando con mi aplicación xamarin … después de largas batallas largas he conseguido ver lo que quería … no vi el error anterior acerca de 2 interfaces, he tenido un Problema con el campo 'a' en la clase 'A' y allí como un error diciendo que la interfaz "IN" no existe (esto es una interfaz, por lo que no hay problema con la clase de doble base debe ser mostrado allí, eso es extraño).

No estoy seguro de si todos mis pasos son necesarios para que funcione pero (sorpresa, sorpresa) que estaba cansado de limpiar que y comprobar qué chagnes eran realmente esencial. Muchos problemas son causados ​​por el código ofuscación de la tarjeta io jar. No importa, de vuelta al tema:

  1. Crear un nuevo proyecto vinculante, añadir el tarro como embeded jar, agregar los archivos .so como embided bibliotecas nativas (utilizar la estructura existente)
  2. Abra EnumMethods.xml y agregue allí una asignación:

<mapping jni-class="io/card/payment/CardIOActivity">

<method jni-name="onActivityResult" parameter="p1" clr-enum-type="Android.App.Result" />

</mapping>

(Esto cambia int al tipo de enum utilizado por .net xamarin en el método onActivityResult (que está sobrecargado por una de las clases en card.io.jar) 3. abra Metadata.xml y agregue debajo de los nodos (algunos podrían ser innecesarios):

 <attr path="/api/package[@name='io.card.payment']/class[@name='A']/field[@name='a']" name="managedName">AProp</attr> <attr path="/api/package[@name='io.card.payment']/class[@name='M']" name="visibility">public</attr> <attr path="/api/package[@name='io.card.payment']/class[@name='M']" name="name">Mcl</attr> <attr path="/api/package[@name='io.card.payment']/interface[@name='N']" name="visibility">public</attr> <attr path="/api/package[@name='io.card.payment']/interface[@name='N']" name="name">Nifc</attr> <attr path="/api/package[@name='io.card.payment']/class[@name='L']" name="visibility">public</attr> <attr path="/api/package[@name='io.card.payment']/class[@name='L']/field[@name='a']" name="managedName">aProp</attr> <attr path="/api/package[@name='io.card.payment']/class[@name='L']/method[@name='a']" name="managedName">aMethod</attr> <attr path="/api/package[@name='io.card.payment']/class[@name='L']" name="name">Lcl</attr> 

Encima de los nodos cambiar algunas visibilidades al público (más necesario) y cambiar algunos nombres de clases o iterfaces (no estoy seguro si es necesario, pero me fue útil en algún momento)

  1. Añadir referencia al proyecto vinculante en el principal.

  2. Abra AndroidManifest.xml en el proyecto principal y agregue allí:

<activity android:name="io.card.payment.CardIOActivity" android:configChanges="keyboardHidden|orientation" />

<activity android:name="io.card.payment.DataEntryActivity" android:screenOrientation="portrait"/>

Nodos deben agregarse en el nodo de aplicación (que es un hijo del nodo principal – manifiesto)

  1. Ahora deberías poder invocar CardIOActivity y usar lo que quieras (invocar y usar está disponible y parece estar bien descrito en los ejemplos proporcionados por los creadores)

  2. Una sugerencia más, nada grande, pero cuando finalmente tuve éxito en conseguir la biblioteca de trabajo me perdí … para obtener el resultado como objeto CreditResult en el método OnActivityResult uso java cast: var scanResult = data.GetParcelableExtra (CardIOActivity.ExtraScanResult) .JavaCast ( ); El lanzamiento c # ordinario no funcionará.

Si tienes algún problema, hágamelo saber, quizás me perdí algo (especialmente que todavía no soy experto en xamarin).

¡buena suerte!

Ps: respuesta colocada foro @xamarin también

EDIT: Completar la solución con enlace, comprobado y trabajando uploded a github: https://github.com/wiadran/card.io.xamarin.binding.git

  • Comprobar la versión de Xamarin.Android mediante programación
  • GetAllNetworkInterfaces () lanza la excepción
  • Error de la comisión al referenciar DLL de iTextSharp en mono para androide
  • App Crash instantáneamente sin excepción o registro (parece como xamarin / mono error)
  • Pantalla en negro antes de que la pantalla Splash aparezca en android
  • Diálogo de búsqueda en Mono Android
  • Mono.Data.Sqlite.SqliteConnection.SetConfig lanza una biblioteca utilizada incorrectamente excepción
  • MessageDialog se cierra inesperadamente con Facebook SDK para Android
  • Cómo determinar el tipo MIME de archivo en android?
  • Xamarin aplicaciones son grandes por qué y pueden ser más pequeños
  • Obtener parámetros de la intención utilizada para onResume ()
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.