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.
- Error incluso si la aplicación parece no estar instalada
- ¿Cómo puedo incluir programaticamente en Android?
- error en el cambio de tipo de letra en xamarin para android
- ¿Cómo evitar que la aplicación de Android se desinstale durante la implementación con Xamarin Studio?
- Xamarin / Android: F # scoping - ¿Cómo veo un espacio de nombres en un archivo diferente?
Esto es lo que he hecho hasta ahora
-
Crear un nuevo proyecto de biblioteca de enlaces Java de Android
-
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.
-
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>
-
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!
- MonoDroid: recuperación de excepción no controlada
- MonoDroid: Fragment.Instantiate ClassNotFoundException
- Convertir una aplicación de control de motor de Delphi 5 en Android - necesita asesoramiento sobre el enfoque
- C: \ Archivos de programa \ MSBuid \ Novell \ Novell.MOnoDroid.Csharp.targets no se encontró
- Autenticación Monodroid WebView para SSRS
- ¿Cómo puedo cambiar colores en mi StateListDrawable?
- Mdtool, construir android apk en mac
- MvxListView crea enlace para diseño de plantilla de código
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:
- Crear un nuevo proyecto vinculante, añadir el tarro como embeded jar, agregar los archivos .so como embided bibliotecas nativas (utilizar la estructura existente)
- 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)
-
Añadir referencia al proyecto vinculante en el principal.
-
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)
-
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)
-
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
- Extraer los atributos de diseño de la biblioteca de soporte en estilos
- HttpURLConnection.getResponseCode () bloquea la ejecución / no pierde el tiempo