Bài viết tóm tắt một số điều các bạn cần hiểu để có thể bắt tay vào nghiên cứu và làm việc với nền tảng Xamarin. Xamarin là gì? Xamarin làm được gì? Xamarin có học dể không? Xamarin có phải là một công nghệ “mì ăn liền”? Yêu cầu gì đối với một lập trình viên Xamarin? Khi nào nên chọn Xamarin?,… sẽ được tổng hợp và giải đáp.

1. Phát triển ứng dụng di động ‘đơn’ nền tảng?

Hiện tại trên thì trường thiết bị di động thông minh, ta có một số hệ điều hành phổ biến như Android, iOS và Windows; kèm với các hệ điều hành đó nhà cung cấp sẽ đề ra các bộ công cụ và ngôn ngữ lập trình để phát triển ứng dụng trên chúng, tạm gọi là phương pháp “chính chủ”:

https://process.filestackapi.com/cache=expiry:max/resize=width:700/compress/0GtkLABxQCqPGGefJ1Ep

  • iOS: Objective-C hoặc Swift + Xcode
  • Android: Java + Eclipse/Android Studio
  • Windows: C# + Visual Studio

Nghĩa là bạn muốn phát triển một ứng dụng di động trên nền tảng nào, thì phải nghiên cứu và làm việc trên ngôn ngữ, công cụ và môi trường hỗ trợ nền tảng đó, ví dụ sau khi cài đặt đầy đủ các công cụ cần thiết bạn sẽ tạo ứng dụng đầu tiên theo hướng dẫn của tài liệu “chính chủ”, với các bước cơ bản như sau

  • iOS First App (Xem tại đây)
    • Tạo UI với Xcode
    • Kết nối thành phần UI và Code
    • Viết lệnh sử lý trên Controller bằng ngôn ngữ swift hoặc objC
    • Viết Data Model và các logic khác
    • Kiểm tra kết quả trên iPhone Simulator
  • Android First App (Xem tại đây)
    • Tạo UI với ngôn ngữ XML
    • Tạo Activity với Java
    • Xử lý logic và tương tác trên Activity
  • Windows First App (Xem tại đây)
    • Tạo UI với XAML
    • Viết logic ở code be-hind bằng C#

Như vậy bạn muốn có một ứng dụng hoàn chỉnh, đẹp đẽ thì bạn phải nghiên cứu các ngôn ngữ lập trình, cách build giao diện, cách sử dụng tools và hiểu về nền tảng bạn mà muốn phát triển ứng dụng trên đó. Giả sử bạn muốn build một ứng dụng như Uber hay như Zing Mp3 chạy trên Android, iOS, lẫn Windows, bạn phải master 3 ngôn ngữ lập trình và master 3 nền tảng hệ điều hành hoặc bạn thuê 3 team mỗi team làm trên một nền tảng, mọi thứ sẽ được x3 lên.

2. Phát triển ứng dụng di động đa nền tảng?

Để đáp ứng nhu cầu thực tế của doanh nghiệp là ứng dụng của họ phải chạy được trên nhiều nền tảng khác nhau và để giảm thiếu tối đa tài nguyên cho những dự án như vậy, các thế hệ công nghệ hỗ trợ cho việc phát triển ứng dụng đa nền tảng lần lượt ra đời, nổi trội trong số đó ta có:

  • Cordova/Ionic: Sự dụng công nghệ web, html, css, javascript để build ứng dụng “lai” (hybrid app).
  • React Native: Nền tảng xây dựng ứng dụng native sử dụng javascript của Facebook
  • Xamarin: Nền tảng xây dựng ứng dụng native sử dụng C# của Microsoft
  • Và một số công nghệ khác như: Kotlin, Unity, Cocos,…

Mỗi công nghệ có ưu điểm, nhược điểm riêng nhưng đều có mục tiêu chung là hỗ trợ chia sẻ code nhiều nhất có thể giữa các nền tảng nhưng vẫn đảm bảo được hiệu suất sử dụng và giao diện UI/UX như công nghệ “chính chủ” của nền tảng đó.

https://www.2basetechnologies.com/img/cross_platform/cross_platform_development_img.png

3. Xamarin là gì, khả năng của công nghệ này tới đâu?

Khái niệm cơ bản Xamarin là công nghệ giúp bạn xây dựng ứng dụng cho Android và iOS sử dụng ngôn ngữ lập trình C# thay thế cho ngôn ngữ “chính chủ” của các nền tảng đó, với mỗi nền tảng thì Xamarin đặt tên tương ứng là Xamarin.Android và Xamarin.iOS. Các phiên bản Xamarin.Android và Xamarin.iOS sẽ được cập nhật thường xuyên theo các bộ SDK chính chủ (như Android SDK, Xcode)

Như vậy “Những gì bạn làm được với Java, ObjectiveC/Swift bạn đều có thể làm với C# và Xamarin”, ví dụ bạn có thể viết một ứng dụng như Uber bằng Xamarin, hay bất kỳ ứng dụng nào đang được đăng trên Google Play hay App Store, tất nhiên tùy vào kỹ năng của bạn hoặc của team.

Chúng ta có ví dụ sau lần lượt là đoạn code cho một Activity sử dụng Java và sử dụng C# trên Xamarin.Android, bạn nhận thấy đâu là khác biệt? Ta có những class, những phương thức, những cách xử lý, các định nghĩa về Resources, Activity, Intent, App Life Cycle,… đều theo tài liệu của Android SDK, nhưng chỉ khác nhau ở cách trình bày của mỗi ngôn ngữ, ngoài ra ở Xamarin còn bổ sung một số đối tượng thuộc bộ C# .NET như List<>, Linq, Event Handler… để source code của bạn trở nên thân thuộc hơn và gọn gàn hơn. Và cũng tương tự trên Xamarin.iOS

Về việc xây dựng giao diện trên Xamarin.Android, Xamarin.iOS cũng hoàn toàn tương tự với phương pháp chính chủ. Android sử dụng xml, iOS sử dụng StoryBoard, Xib, …

Ví dụ một layout trên Xamarin.Android và  Java/Android Studio đều được thể hiện cùng một cấu trúc như sau

Như vậy với Xamarin.Android và Xamarin.iOS kết hợp với Windows UWP cho chúng ta một mô hình phát triển ứng dụng đa nền tảng như sau

https://blog.xamarin.com/wp-content/uploads/2015/05/code-sharing1.png

Khi mọi thứ đều code với cùng một ngôn ngữ, chúng ta có thể share toàn bộ các code logic của app, ví dụ như các thuật toán, các request web service, xử lý database. Tuy nhiên các thành phần riêng biệt, đặc trưng cho từng nên tảng thì ta sẽ xây dựng riêng biệt trong đó có UI của ứng dụng. Để có thể % code share được nhiều nhất và tối ưu nhất thì ta sẽ bắt đầu làm quen với các khái niệm như: Interface, Abstract, Dependency Injection, Service Locator, IoC container,… Dựa vào các cơ chế đó các mô hình design pattern và framework hỗ trợ ra đời phục vụ cho việc cấu trúc một dự án sao cho tối ưu nhất như MvvmCross, Prism, Flux,… Như vậy để xây dựng một ứng dụng “cỡ như” Uber thì lượng kiến thức và kỹ thuật áp dụng vào dự án của bạn phải khá lớn và phức tạp.

Vì vậy Xamarin không hẳn làm một công nghệ “mì ăn liền” như mọi người vẫn nghĩ.

4. Xamarin.Forms

Với Xamarin.Android và Xamarin.iOS bạn đã có thể build được ứng dụng đa nền tảng, tuy nhiên để phát triển được ứng dụng yêu cầu khá nhiều kiến thức cũng như ta phải tách biệt phần lớn code về UI của mỗi nền tảng. Để tăng khả năng chi sẻ code giữa các nền tảng Xamarin.Android, Xamarin.iOS và UWP, Xamarin cung cấp bộ thư viện hỗ trợ viết giao diện cho cả 3 nền tảng trên với một ngôn ngữ duy nhất là XAML gọi là Xamarin Forms, với Xamarin Forms, lúc này mô hình tổng thể của dự án sẽ là:Một điều lưu ý là dù bạn sử dụng XAML để xây dựng giao diện, nhưng khi build ra các nền tảng riêng biệt thì giao diện & control native sẽ được sử dụng đúng với đặt trưng của nền tảng đó, ví dụ một trang giao diện được code trên XAML như sau:

Và đây là kết quả của giao diện trên mỗi nền tảng:

Từ đó ta nhận thấy Xamarin Forms có ưu điểm là tăng % chia sẻ code khi build ứng dụng đa nền tảng do cho phép chia sẻ được code UI, tuy nhiên Xamarin Forms cũng có những hạn chế của nó:

  • Hiệu xuất sẽ bị giảm thấp hơn so với việc build ứng dụng riêng biệt với Xamarin.Android và Xamarin.iOS
  • Hiện tại Tool & IDE chưa hỗ trợ tốt cho việc thiết kế giao diện trên XAML
  • Xamarin Forms chỉ cung cấp đủ các loại control chuẩn để build giao diện, muốn tùy chỉnh phải áp dụng khá nhiều kỹ thuật.

5. Xamarin Native Forms

6. Khi nào thì chọn Xamarin để xây dựng ứng dụng cho doanh nghiệp bạn?

7. Phương pháp tiếp cận và nghiên cứu Xamarin

8. Những khó khăn cho người mới bắt đầu và cách giải quyết