【问题标题】:card.io Mono for Android (Xamarin Studio)card.io Mono for Android (Xamarin Studio)
【发布时间】:2013-12-07 12:54:38
【问题描述】:

有没有人成功地创建了他们愿意分享的 card.io 包装器,可以在 Mono for Android 应用程序中使用,或者有人可以阐明我做错了什么吗?

  1. 新建一个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 文件的构建操作为:EmbeddedJar
  • .so 文件的构建操作为:EmbeddedNativeLibrary
  • 我已经为项目 ItemGroup 中的每个 .so 文件明确设置了 Abi

我对 Android/Xamarin 很陌生,所以花更多时间研究而不是编码。

.so 文件似乎不在 .apk 文件中

编辑:

.so 文件似乎确实被编译器拾取。 编译后,如果我检查 obj/Release/ 文件夹,则有一个子文件夹 native_library_imports,其中包含根据支持的 Abi 类型在适当子文件夹中的 .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

谢谢

【问题讨论】:

    标签: android xamarin.android xamarin-studio card.io


    【解决方案1】:

    Android logcat 应该会显示更具体的错误消息,但此问题是由于缺少原生库造成的。 (对于普通的 Android 项目,它们位于 /libs 目录中,具有特定于架构的子目录。)

    这些是您提到的 .apk 中缺少的 .so 文件。它们包含所有图像处理逻辑,因此如果它们不存在,card.io 将无法扫描。

    【讨论】:

    • 感谢您的回复。我已经用更多信息编辑了我的原始帖子。我正在调查关于 Transport endpoint is not connected 的问题。
    【解决方案2】:

    好吧,经过一些实验,我终于解决了这个问题。

    1. 按照我原帖中的 4 个步骤进行操作
    2. 将 card.io SDK 解压到库项目的根目录,这样您最终的文件夹结构为:ProjectRoot/libs/&lt;the sdk files and abi subfolders&gt;
    3. 将 .jar 文件添加到项目 Jars 文件夹(选择 添加链接 选项)
    4. libs 文件夹添加到项目的根目录(不包括 .jar 文件)
    5. 您可能需要手动编辑 .csproj 文件以添加每个 .so 文件的 Abi 目标
    6. 确保 .jar 文件具有 EmbeddedJar构建操作
    7. 确保 .so 文件具有 EmbeddedNativeLibrary构建操作

    @tomwhipple - 感谢您的贡献。我试图支持你的回答,但显然我没有足够的声誉。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      相关资源
      最近更新 更多