Kết quả hình ảnh cho binding android xamarin

Với một vài dự án khách hàng đã code sẵn cho 1 cái library android rồi, và họ sẽ gửi cho bạn sử dụng cái lib đó. Hoặc là bạn có 1 cái lib rất ngon trên android. Nhưng muốn dùng trong project Xamarin của bạn mà không muốn code lại logic của nó. Như vậy bạn cần binding nó vào project của bạn và chỉ việc dùng không cần code lại 1 tí logic nào.

I. Input:
Project dự án code bằng ngôn ngữ Xamarin
Các file android libraries .aar (Android Archive Library)
Bản chất của file này là file .zip gồm
– Compiled Java code
– Resource Ids (File R)
– Resources
– Meta-data (for example, Activity declarations, permissions)

II. Output
Project Xamarin có thể gọi và sử dụng được class chứa trong file .aar

III.Guideline
1. Tạo 1 project binding với 1 file .aar cơ bản
1) Add new project Binding library(Android)
2) Add file .aar vào folder Jar
3) Set build action cho .AAR file là LibraryProjectZip
4) Chọn target framework cho project lib nếu cần
5) Build Bindings Library.
Sau khi tạo xong và build thành công chúng ta sẽ add file đó vào project Xamarin của chúng ta muốn sử dụng.
Vậy là chúng ta có thể call tới class chứa trong file .aar.
Mình chỉ nói các bước thực hiện thôi, chi tiết các bạn nên tham khảo tại : https://docs.microsoft.com/en-us/xamarin/android/platform/binding-java-library/binding-an-aar

Như ở trên là cách tạo và add 1 project binding library với file source code trong file aar là đơn giản.
Với những file .aar phức tạp và chúng có link đến nhau thì sao ?

2. Tạo project binding nâng cao
1. Đầu tiên các bạn vẫn phải thực hiện các bước như trên. Vì xamarin có 1 nhược điểm là 1 file aar bắt buộc bạn cần phải tạo ra 1 project binding
2. Cần phải xác định file aar nào sử dụng file aar nào.
Ví dụ chúng ta có 2 file aar, file thứ nhất call đến 1 class trong file thứ 2
Như vậy làm thế nào để biết được file nào dùng đến file nào
– Bạn cần 1 tool để decode java trong file aar (Android studio chẳng hạn)
– Sau đó bạn mở những class trong file aar ra. Xem phần import của chúng sử dụng những class nào có chứa trong file aar khác không
– Đôi khi trong file aar nó sẽ sử dụng dependence đến 1 lib nào mà k chứa trong tất cả file aar của bạn. Thì bạn cần xem nó là những lib nào.
Click chuột phải vào Packages của Project đó chọn Add packages. Rồi tìm xem tên lib đó có trong nuget không.
Nếu không có, thì bạn có thể tìm và tải file jar của lib ấy về rồi copy vào folder Jar. Build action bạn để là EmbeddedJar
Bạn thử build xem còn lỗi gì không.
Nếu còn lỗi. Bạn cần phải customizing binding.
3.Customizing Binding
Với android chúng ta chỉ cần customize lại file Metadata.xml Transform File.
Trong file Metadata.xml thì sẽ có 3 element :
– add-node
– attr
– remove-node

Mình cũng làm 1 vài project liên quan đến binding library. Và cũng customize file metadata.xml này, mình thấy như sau

khi thấy error bạn chọn vào 1 item error

Bạn có thể nhìn thấy dòng // Metadata.xml Xpath classs ….
hãy coppy từ chỗ path=”…”
Bạn có thể sử dụng remove-node trong file metadata.xml với lỗi ”do not exist in the namespace …’
Thực ra bạn remove node này nó không ảnh hưởng gì đến code trong project cả. Việc generate class java sang c# ở đây chỉ là Android.Runtime.Register thôi.
chứ không phải là nó generate all source code của cả class java sang c# .

Một số trường hợp bạn không nhìn thấy class mình dùng được generate ra
Trường hợp này chúng ta sẽ add bằng tay dùng add-node
Ví dụ :

<add-node path="/api/package[@name='your package name']">	
        <class abstract="false" deprecated="not deprecated" extends="java.lang.Object" 	
            extends-generic-aware="java.lang.Object" final="false" name=" your class name" static="true" visibility="public">	
        </class>	
</add-node>	

Một số trường hợp khác như tên classs trùng nhau, rồi đổi visibility của class … thì bạn dùng thằng att để thay đổi attribute của nó.
Về chi tiết các bạn có thể tham khảo tại : https://docs.microsoft.com/en-us/xamarin/android/platform/binding-java-library/customizing-bindings/java-bindings-metadata
Một vài lưu ý nữa là kể cả việc file aar bị mã hoá cũng không ảnh hưởng gì đến việc binding nhé. Vì những class a, b, c trong đó bạn trả bao giờ dùng đến cả.

Bài viết của mình xin hết, nếu bạn nào dùng mà cảm thấy không hiểu thì contact với mình.

Nếu các bạn cần binding với xamarin ios xem tại: https://magz.techover.io/2019/12/30/binding-objective-c-libraries-xamarin-ios/

Thanks you!

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.

You may also like