2013-04-16 42 views
8

Có ai đã tạo thành công trình bao bọc card.io mà họ sẵn sàng chia sẻ có thể được sử dụng trong ứng dụng Mono dành cho Android hoặc ai đó có thể làm sáng tỏ những gì tôi đang làm sai rồi?card.io Mono dành cho Android (Xamarin Studio)

  1. Tạo mới Android Java Bindings Thư viện Dự án
  2. Thêm .jar và file .so từ card.io SDK 3.0.3, hãy chắc chắn để sử dụng cấu trúc thư mục hiện
  3. Thêm dòng sau vào Transforms/EnumMethods. xml để giải quyết một lỗi biên dịch:

    <mapping jni-class="io/card/payment/CardIOActivity"> 
        <method jni-name="onActivityResult" parameter="p1" clr-enum-type="Android.App.Result" /> 
    </mapping> 
    
  4. Thêm một tham chiếu đến thư viện nêu trên trong ứng dụng chính của tôi

Tất cả mọi thứ biên dịch và tôi có thể truy cập vào các lớp 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);    
    }; 
} 

Tuy nhiên, tôi luôn luôn trình bày với các lỗi sau:

thiết bị này không thể sử dụng máy ảnh để đọc số thẻ

GHI CHÚ:

  • Tôi đã thử chạy trên nhiều thiết bị vật lý khác nhau
  • file card.io.jar có một hành động xây dựng của: EmbeddedJar
  • các file .so có một hành động xây dựng của: EmbeddedNativeLibrary
  • Tôi đã dứt khoát thiết lập Abi cho mỗi file .so trong dự án ItemGroup

tôi rất mới để Android/Xamarin, vì vậy dành nhiều thời gian nghiên cứu hơn mã hóa.

Các file .so dường như không có trong file .apk

Edit:

Các file .so dường như để nhặt bởi trình biên dịch. Sau khi biên dịch, nếu tôi kiểm tra thư mục obj/Release/ có một thư mục con native_library_imports có chứa tệp .so trong các thư mục con thích hợp theo loại Abi được hỗ trợ.

Tuy nhiên, các tệp .so vẫn không xuất hiện trong tệp .apk cuối cùng.

logcat đầu ra:

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 

nhờ

Trả lời

4

Vâng, cuối cùng tôi đã giải quyết vấn đề này sau một số thử nghiệm.

  1. Thực hiện theo 4 bước trong bài viết ban đầu của tôi
  2. Giải nén SDK card.io vào thư mục gốc của dự án thư viện, do đó bạn kết thúc với một cấu trúc thư mục của: ProjectRoot/libs/<the sdk files and abi subfolders>
  3. Thêm file .jar vào thư mục Dự án Chum (chọn thêm một liên kết tùy chọn)
  4. Thêm libs thư mục vào thư mục gốc của dự án của bạn (không bao gồm các tập tin .jar)
  5. Bạn có thể cần phải tự chỉnh sửa các tập tin csproj để thêm mục tiêu Abi của mỗi .so tập tin
  6. Đảm bảo. jar tập tin có một hành động Build của EmbeddedJar
  7. Đảm bảo .so file có một hành động Build của EmbeddedNativeLibrary

@tomwhipple - cảm ơn vì sự đóng góp. Tôi đã cố gắng để upvote câu trả lời của bạn nhưng dường như tôi không có đủ danh tiếng.

4

Các logcat Android sẽ hiển thị một thông báo lỗi cụ thể hơn, nhưng vấn đề này là do thiếu thư viện bản xứ. (Đối với các dự án Android bình thường, các dự án này nằm trong thư mục /libs, với các thư mục con cụ thể về kiến ​​trúc.)

Đây là các tệp .so mà bạn đề cập bị thiếu trong tệp .apk. Chúng chứa tất cả logic xử lý hình ảnh, vì vậy card.io không thể quét nếu chúng không có ở đó.

+0

Cảm ơn bạn đã trả lời. Tôi đã chỉnh sửa bài đăng gốc của mình với thông tin thêm. Có điều gì đó về ** Điểm cuối giao thông không được kết nối ** mà tôi đang xem xét. – dalesmckay

Các vấn đề liên quan