适用于Android的card.io Mono(Xamarin Studio)

有没有人成功地创build了一个card.io包装,他们愿意分享,可用于Android应用程序的单声道,或者有人可以解释我做错了什么?

  1. 创build一个新的Android Java绑定库项目
  2. 从card.io SDK 3.0.3添加.jar和.so文件,确保使用现有的文件夹结构
  3. 将以下内容添加到Transforms / EnumMethods.xml以解决编译器错误:

    <mapping jni-class="io/card/payment/CardIOActivity"> <method jni-name="onActivityResult" parameter="p1" clr-enum-type="Android.App.Result" /> </mapping> 
  4. 在我的主应用程序中添加对上述库的引用

一切都编译,我可以访问card.io类:

 using IO.Card.Payment; private void WireupScanCardButton() { Log.Debug(this.GetType().Name, "WireupScanCardButton"); this.ScanCardButton.Click += delegate { Log.Debug(this.GetType().Name, "ScanCard.Click"); var intent = new Intent(this, typeof(CardIOActivity)); // Required for authentication with card.io intent.PutExtra(CardIOActivity.ExtraAppToken, "<MY PRIVATE TOKEN HERE>"); // Customize these values to suit your needs. intent.PutExtra(CardIOActivity.ExtraNoCamera, false); intent.PutExtra(CardIOActivity.ExtraSuppressManualEntry, true); intent.PutExtra(CardIOActivity.ExtraRequireExpiry, false); intent.PutExtra(CardIOActivity.ExtraRequireCvv, false); intent.PutExtra(CardIOActivity.ExtraRequireZip, false); // Run the Activity this.StartActivityForResult(intent, 0); }; } 

不过,我总是提出以下错误:

此设备不能使用相机读取卡号

笔记:

  • 我试过在几个不同的物理设备上运行
  • card.io.jar文件具有embedded式Jar的生成操作
  • .so文件具有一个生成操作:EmbeddedNativeLibrary
  • 我明确地为Project ItemGroup中的每个.so文件设置了Abi

我对Android / Xamarin很新,所以花费更多的时间进行研究而不是编码。

.so文件看起来不在.apk文件中

编辑:

.so文件看起来似乎被编译器拾取。 编译后,如果检查obj / Release /文件夹,则根据支持的Abitypes,在子文件夹中有一个子文件夹native_library_imports ,其中包含.so文件。

但是,.so文件仍然不出现在最终的.apk文件中。

logcat输出:

 04-18 08:12:20.462 D/ActivityAddPaymentSource( 5824): ScanCard.Click 04-18 08:12:20.472 E/ActivityManager( 191): exception bw.write()java.io.IOException: Transport endpoint is not connected 04-18 08:12:20.472 I/ActivityManager( 191): Starting: Intent { cmp=com.onetab.android/io.card.payment.CardIOActivity (has extras) } from pid 5824 04-18 08:12:20.472 D/PowerManagerService( 191): acquireWakeLock flags=0x1 tag=ActivityManager-Launch 04-18 08:12:20.492 D/ActivityAddPaymentSource( 5824): OnPause 04-18 08:12:20.492 E/Sensors ( 191): GsSensor: line +83 ~~~handle===0~~en==1~~!n 04-18 08:12:20.502 E/Sensors ( 191): GsSensor::setDelay: line +113 ~~~handle===0~~ns==1553152~~!n 04-18 08:12:20.502 E/Sensors ( 191): GsSensor::setDelay: line +113 ~~~handle===0~~ns==-2135896001~~!n 04-18 08:12:20.542 W/card.io ( 5824): cardioScanErrorNoDeviceSupport: This device cannot use the camera to read card numbers. 04-18 08:12:20.572 E/ActivityManager( 191): exception bw.write()java.io.IOException: Transport endpoint is not connected 04-18 08:12:20.572 D/PowerManagerService( 191): acquireWakeLock flags=0x1 tag=ActivityManager-Launch 04-18 08:12:20.582 E/Sensors ( 191): GsSensor: line +83 ~~~handle===0~~en==0~~!n 04-18 08:12:20.622 D/ActivityAddPaymentSource( 5824): OnResume 

谢谢

Solutions Collecting From Web of "适用于Android的card.io Mono(Xamarin Studio)"

Android的logcat应该显示更具体的错误信息,但是这个问题是由于缺less本地库。 (对于正常的Android项目,这些项目位于/libs目录中,具有架构特定的子目录。)

这些是您提到的.so文件从.apk丢失。 它们包含了所有的image processing逻辑,所以card.io不能扫描它们是否不在那里。

那么经过一番实验,我终于解决了这个问题。

  1. 按照我原来的post中的4个步骤
  2. 将card.io SDK解压缩到库项目的根目录,最后得到一个文件夹结构: ProjectRoot / libs / <the sdk files and abi subfolders>
  3. 将.jar文件添加到Project Jars文件夹(select添加链接选项)
  4. libs文件夹添加到项目的根目录(不包括.jar文件)
  5. 您可能需要手动编辑.csproj文件以添加每个.so文件的Abi目标
  6. 确保。 jar文件具有EmbeddedJarBuild操作
  7. 确保.so文件具有EmbeddedNativeLibrary构build操作

@tomwhipple – 感谢您的贡献。 我试图upvote你的答案,但显然我没有足够的声誉。