Tôi đọc bài viết cùng Binding a Java Library bạn đã làm, đã trải qua các hướng dẫn, và không có xây dựng các lỗi. Khi tôi cố gắng sử dụng các lớp từ tệp jar của tôi, intellisense không nhận ra bất cứ điều gì. Sau đó, tôi đọc bài viết tiếp theo theo số API Metadata Reference. Điều này khiến tôi nghĩ rằng có lẽ tôi nên thử chỉnh sửa tệp Transforms/Metadata.xml. Sau khi chỉnh sửa một thời gian ngắn để bao gồm một tên của gói, Visual Studio cho phép (sau khi biên dịch) một tham chiếu đến một lớp từ tệp jar. Sau đó tôi đã cố gắng gọi một phương thức từ lớp, và một lần nữa, có một lỗi trình biên dịch khác. Vì vậy, tôi đã quay lại tệp Metadata.xml và thêm một mục để đổi tên phương thức được đề cập. Tôi đã chỉnh sửa mã của mình để gọi phương thức được đổi tên và Visual Studio đã biên dịch tốt. Tôi đã tích hợp cuộc gọi này vào một trường hợp thử nghiệm đơn vị và nó đã trôi qua!
Từ đọc của tôi, có vẻ như không cần thiết để chỉnh sửa tệp Metadata.xml, nhưng ít nhất theo kinh nghiệm của tôi, có vẻ như cần thiết. Nó sử dụng XPATH trên tệp obj/Release/api.xml (như đã nêu trong API Metadata Reference). Từ bài viết đó, có những ví dụ để đổi tên cả hai tên của phương thức &, vì vậy không có nhiều công việc để tôi chèn vào tệp Metadata.xml của mình. Ngoài ra, tôi đã tải xuống tệp OsmBindingDroidExample từ bài viết Binding a Java Library và cũng kiểm tra tệp Metadata.xml của họ.
Dưới đây là XML của tôi để tham khảo cũng như:
<metadata>
<attr path="/api/package[@name='com.abc.def']" name="managedName">MyRenamedPackage</attr>
<attr path="/api/package[@name='com.abc.def']/class[@name='MyClass']/method[@name='originalJavaMethod']" name="managedName">RenamedDotNetMethod</attr>
</metadata>
Vì vậy, bây giờ trong mã NET của tôi, tôi có thể viết:
MyRenamedPackage.MyClass.RenamedDotNetMethod(...);
Hope this helps!
EDIT:
Tôi đã quen thuộc hơn với bộ công cụ Xamarin và có bản cập nhật để sử dụng dễ dàng hơn.
Để hạn chế sự tham gia của mã cần tương tác với các phương thức jar, Xamarin cho phép bạn tạo các lớp C# trong thư mục Bổ sung.Vì vậy, tôi đã tạo ra một lớp trình bao bọc cho thấy các phương thức trong một lớp C# được quản lý mà các dự án khác có thể truy cập. Vì nó là C# không có khiếu nại từ Visual Studio.
Đây là những gì một lớp wrapper sẽ trông giống như đi với ví dụ trước đây của tôi (rõ ràng bạn muốn chọn một tên có ý nghĩa hơn đối với các nhiệm vụ trong tầm tay):
public class InovcationWrapper
{
public static void InvokeMethod(...)
{
MyRenamedPackage.MyClass.RenamedDotNetMethod(...);
}
}
Sau đó trong mã dự án của bạn, bạn muốn có đầy đủ intellisense nếu bạn chỉ cần gọi lớp wrapper của bạn:
InvocationWrapper.InvokeMethod(...);
Điều này giúp bạn làm việc dễ dàng hơn và hạn chế số lượng squiggles đỏ bị bỏ qua trong mã của bạn. Hi vọng điêu nay co ich!
Bạn có cần "Thư viện Android" hay chỉ là thư viện thông thường? Jar ví dụ của bạn không phải là một thư viện android, nó là một thư viện java standart có chứa bó của lớp biên dịch '. Sự khác biệt ở đây là thư viện Android chứa tài nguyên để chia sẻ không chỉ mã java. Vì ví dụ của bạn Test.java không có gì về android, bạn chỉ có thể biên dịch và kết hợp nó. –
Khi đổi tên * .jar thành * .zip, bạn có thể sử dụng bất kỳ công cụ lưu trữ nào để xem bên trong. Không biết về yêu cầu Android nhưng GitHub..bin/a2dp.jar của bạn chứa META-INF/MAINFEST.MF với 2 byte không có gì nên trông giống như một vấn đề trình biên dịch, vui lòng cung cấp bình thực – xmojmr