2016-06-03 16 views
12

Tôi có một tập tin .jar với một giao diện Java gọi MyService, trong đó có một phương pháp:Xamarin .jar ràng buộc - 'Bitmap không thể tìm được'

boolean printBitmapObject(android.graphics.Bitmap bitmap, byte[] result); 

Tôi muốn sử dụng .jar tập tin này trong C# trong dự án Android Xamarin của tôi trong Visual Studio 2015. Tôi đã thực hiện các bước sau:

  1. Tôi đã tạo một dự án liên kết thư viện mới.
  2. Tôi đặt tệp .jar vào Jars thư mục của dự án mới với BuildAction thuộc tính được đặt thành InputJar.
  3. Dự án được xây dựng thành công.
  4. Tôi đã thêm tham chiếu đến dự án liên kết thư viện vào dự án chính của mình.

Thật không may, tôi không thể xây dựng dự án chính của tôi nữa, bởi vì có một lỗi trong mã tự động tạo ra C#:

public interface IMyService : global::Android.OS.IInterface 
    { 
     bool PrintBitmapObject (Bitmap bmp, byte[] result); //"Bitmap" is red underlined 
    } 

với thông điệp "The type or namespace name 'Bitmap' could not be found (are you missing a using directive or an assembly reference?)".

Ngoài ra còn có lớp tóm tắt được tạo tự động IMyServiceStub, cũng không nhận dạng Bitmap. Hơn nữa, nó không biết một số tính năng tự động tạo ra BitmapStub một trong hai:

public abstract class IMyServiceStub : global::Android.OS.Binder, global::Android.OS.IInterface, IMyService 
{ 
    ... 
    protected override bool OnTransact (int code, global::Android.OS.Parcel data, global::Android.OS.Parcel reply, int flags) 
    { 
     ... 
     case TransactionPrintBitmapObject: { 
       data.EnforceInterface (descriptor); 
       Bitmap arg0 = default (Bitmap); //Bitmap red underlined 
       arg0 = BitmapStub.AsInterface (data.ReadStrongBinder()); //BitmapStub red underlined 
       byte [] arg1 = default (byte []); 
       var result = this.PrintBitmapObject (arg0, arg1); 
       reply.WriteNoException(); 
       reply.WriteInt (result ? 1 : 0); 
       data.WriteByteArray (arg1); 
       return true; 
       } 
     ... 
    } 

} 

Tôi đã cố gắng thêm using Bitmap = Android.Graphics.Bitmap đến tập tin tự động tạo ra, nhưng nó không giúp đỡ, vì BitmapStub vẫn chưa được biết và thay đổi của tôi sẽ bị ghi đè trong xây dựng tiếp theo.

Tôi có thể làm gì để khắc phục sự cố này không? Hay là một lỗi đã biết trong Xamarin (tôi sử dụng phiên bản 4.0)?

+0

Bạn có thể chia sẻ tệp .jar để tôi có thể giúp bạn không? – jzeferino

+0

@jzeferino Tôi không thể, thật không may, tôi sẽ phá vỡ NDA ... – vojta

Trả lời

1

Tôi chưa từng chơi Xamarin trong một thời gian, tuy nhiên không gian tên Android.Graphics.Bitmap thuộc về ngôn ngữ Java, chứ không phải là C#. Vì vậy, mã C# được tạo sẽ không biết gì về không gian tên đó.

Vì vậy, tôi sẽ cố gắng thêm using System.Drawing; thay vì using Bitmap = Android.Graphics.Bitmap

Bạn cũng có thể phải tự thêm DLL đó như là một tham chiếu đến C# dự án nếu trình biên dịch không nhận ra System.Drawing namespace.

Hãy cho tôi biết cách hoạt động.

+0

Đây không phải là một giải pháp, thật không may. Thậm chí nếu tôi thêm 'using System.Drawing;', nó sẽ bị ghi đè bởi bản build tiếp theo. Tệp được tạo tự động. – vojta

+0

System.Drawing chỉ dành riêng cho nền tảng windows !!! –

+0

Vâng, tôi biết ...nhưng kể từ khi lỗi được tạo ra tại thời gian xây dựng, nó tìm kiếm các loại cửa sổ, không phải là loại Java (trừ khi Visual Studio đang biên dịch nguồn Java và không chỉ tạo ra nó, mà sẽ là tin tức với tôi). – HBomb

2

Ràng buộc jar sẽ không hoạt động với Dự án thư viện Android, bạn cần phải bao gồm tệp .aar. Các tệp Jar không tham chiếu các thư viện cụ thể của Android trong jar, nhưng tệp .aar tham chiếu chính xác tất cả các thư viện có liên quan đến Android được yêu cầu.

+1

Cảm ơn bạn, điều đó thật thú vị ... Bạn có thể thêm một số chi tiết không? Tôi có tệp jar của bên thứ ba này hoạt động tốt trong ứng dụng Android của tôi được viết bằng Java và được xây dựng trong Android Studio. Tuy nhiên, tôi không có tập tin aar. Làm thế nào tôi có thể nhận được nó? Tôi nên làm theo các bước nào để có thể sử dụng chức năng tệp jar từ ứng dụng C# Xamarin Android của tôi trong Visual Studio? – vojta

+0

Bạn sẽ tìm thấy tệp aar trong thư mục 'build \ output \ aar'. Hãy làm theo hướng dẫn này, https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/binding-an-aar/ –

+0

Hướng dẫn được liên kết giải thích cách liên kết tệp .aar. Tuy nhiên, tôi không có bất kỳ tệp .aar nào và tôi không có mã nguồn cho tệp jar, vì vậy tôi không thể tự xây dựng nó. Tệp jar của tôi là thư viện của bên thứ ba. Tôi có thể biến cái lọ thành một con aar bằng cách nào đó không? – vojta

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