Xamarin là nền tảng của Microsoft để tạo ứng dụng di động bằng C#, được công bố vào năm 2011. Theo Microsoft Xamarin Documentation, 2024, Xamarin cho phép viết ứng dụng cho iOS, Android và Windows với cơ sở mã dùng chung bằng C# và .NET, sử dụng Mono Runtime để biên dịch thành mã gốc. Từ năm 2024, Xamarin.Forms đã được thay thế bằng .NET MAUI.
Những Điểm Chính
Xamarin là nền tảng dựa trên .NET và Mono cho phép sử dụng C# để tạo ứng dụng di động đa nền tảng. Công ty Xamarin được thành lập vào năm 2011 và được Microsoft mua lại vào năm 2016 với giá 400 triệu đô la. Sau khi mua lại, Xamarin trở thành một phần của hệ sinh thái Visual Studio và Azure.
Trước khi được mua lại, Xamarin là sản phẩm thương mại với giấy phép Enterprise. Microsoft đã làm cho nó miễn phí như một phần của Visual Studio Community và cũng mở mã nguồn của Mono Runtime và các ràng buộc SDK. Điều này dẫn đến sự gia tăng phổ biến: đến năm 2020, Xamarin được sử dụng trong 15% các dự án đa nền tảng, theo báo cáo của SlashData.
Ý tưởng chính của Xamarin là chia mã thành ba lớp: logic nghiệp vụ dùng chung (C#, .NET Standard), dự án dành riêng cho nền tảng (iOS, Android) và UI dùng chung tùy chọn qua Xamarin.Forms. Cách tiếp cận này cho phép tái sử dụng tới 75% mã trong khi vẫn duy trì quyền truy cập gốc vào API của từng nền tảng.
Phiên bản đầu tiên Xamarin 1.0 được phát hành vào năm 2012 chỉ hỗ trợ iOS. Hỗ trợ Android được thêm vào năm 2013. Xamarin.Forms — một framework UI khai báo — được giới thiệu vào năm 2014 tại hội nghị Evolve. Xamarin 4.0 (2016) bao gồm hỗ trợ cho watchOS và tvOS. Xamarin 5.0 (2019) đã giới thiệu kiểu CSS và chủ đề Material Design.
Phiên bản chính mới nhất Xamarin.Forms 5.0 được phát hành vào năm 2021. Microsoft thông báo rằng Xamarin đang chuyển sang chế độ hỗ trợ (kết thúc vòng đời — ngày 1 tháng 5 năm 2024) và khuyến nghị di chuyển sang .NET MAUI (Multi-platform App UI), một phần của .NET 6+. Xamarin.Forms 5.0 không còn nhận được tính năng mới, chỉ nhận được các bản sửa lỗi bảo mật quan trọng.
Xamarin.Forms là framework UI trừu tượng hóa giao diện thông qua một tập hợp các thành phần thống nhất. Đánh dấu XAML (ContentPage, StackLayout, Label, Button) được ánh xạ tới các điều khiển gốc trên mỗi nền tảng thông qua các trình kết xuất. Label được dịch thành UILabel trên iOS và TextView trên Android. Cách tiếp cận này cung cấp tới 95% mã UI dùng chung.
Xamarin.Native (còn gọi là Xamarin.iOS và Xamarin.Android) là cách tiếp cận không có UI dùng chung. Nhà phát triển tạo các màn hình riêng biệt cho iOS (Interface Builder hoặc Storyboard) và Android (AXML), sử dụng một backend C# duy nhất. Điều này mang lại toàn quyền kiểm soát giao diện của từng nền tảng nhưng làm tăng sự trùng lặp mã UI lên 50–60%.
Theo Khảo sát Nhà phát triển Microsoft 2023, 70% dự án Xamarin sử dụng Xamarin.Forms, 20% sử dụng Xamarin.Native với các dịch vụ dùng chung và 10% sử dụng cách tiếp cận kết hợp với các trình kết xuất tùy chỉnh để tối ưu hóa dành riêng cho nền tảng.
Kiến trúc Xamarin bao gồm hai cấp độ. Cấp độ dưới cùng là Mono Runtime, thực thi C# IL (Intermediate Language) trên nền tảng. Cấp độ trên cùng bao gồm Managed Callable Wrappers (MCW) cho iOS và Android Bindings cho Android, cung cấp quyền truy cập vào các API gốc từ mã C# được quản lý.
Mono là triển khai mã nguồn mở của .NET Framework. Trong Xamarin, Mono hoạt động như Common Language Runtime (CLR), tải các assembly C# và biên dịch chúng thành mã máy. Trên iOS, Mono biên dịch Ahead-of-Time (AOT) — thành mã máy ARM64, vì Apple cấm biên dịch JIT trong ứng dụng người dùng. Trên Android, Mono sử dụng biên dịch JIT với lập hồ sơ AOT.
Ràng buộc iOS (Xamarin.iOS) là các trình bao bọc C# trên nền tảng runtime Objective-C. Mỗi lớp UIKit (UIView, UIViewController) được đại diện bởi một lớp được quản lý trong assembly Xamarin.iOS.dll. Các Selector Objective-C được gọi thông qua cơ chế MessageUI. Trên Android, Xamarin.Android sử dụng Android Callable Wrappers (ACW) — cầu nối JNI giữa C# và Java/Kotlin. Các thư viện Kotlin được bao bọc thông qua Android Bindings Library.
XAML (eXtensible Application Markup Language) là ngôn ngữ khai báo để mô tả UI. Trong Xamarin.Forms, XAML định nghĩa cấu trúc màn hình: trang (ContentPage), vùng chứa (StackLayout, Grid, FlexLayout) và phần tử (Label, Entry, Button, ListView). Mã code-behind bằng C# xử lý các sự kiện (Clicked, PropertyChanged) và quản lý ràng buộc dữ liệu (Binding, Data Binding).
Mô hình MVVM là kiến trúc được khuyến nghị cho Xamarin.Forms. Model chứa dữ liệu, ViewModel triển khai INotifyPropertyChanged và các lệnh (ICommand), và View (XAML) liên kết thông qua BindingContext. Việc triển khai ICommand qua RelayCommand hoặc Prism DelegateCommand cho phép kiểm thử ViewModel mà không phụ thuộc vào UI. Thư viện Prism.Forms cung cấp NavigationService, DialogService và tính mô-đun.
using Xamarin.Forms;
namespace XamarinApp
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
var label = new Label
{
Text = "Hello, Xamarin!",
FontSize = 24,
VerticalOptions = LayoutOptions.Center,
HorizontalOptions = LayoutOptions.Center
};
Content = new StackLayout
{
Children = { label }
};
}
}
}
Ngôn ngữ C# thống nhất — ưu điểm chính của Xamarin. Các nhà phát triển C# và .NET có thể tạo ứng dụng di động mà không cần học Swift, Kotlin hay Objective-C. Logic nghiệp vụ, kết nối mạng, cơ sở dữ liệu (SQLite qua ORM), mã hóa và ghi nhật ký được viết một lần và tái sử dụng trên tất cả các nền tảng. Điều này đơn giản hóa việc bảo trì và kiểm thử mã.
Truy cập API gốc — Xamarin cung cấp 100% quyền truy cập vào API iOS (Cocoa Touch) và Android (Android SDK) thông qua các ràng buộc. Khi phiên bản mới của iOS hoặc Android được phát hành, Microsoft công bố các ràng buộc cập nhật trong vòng 24–48 giờ. Đối với các ràng buộc bị thiếu (thư viện Objective-C hoặc Kotlin tùy chỉnh), bạn tạo Android Bindings Library hoặc iOS Binding Library thủ công.
Tích hợp với hệ sinh thái Microsoft — Xamarin hỗ trợ Visual Studio, Azure DevOps, App Center (CI/CD, kiểm thử, giám sát) và Enterprise Mobility + Security (Intune, ADAL, MSAL). App Center Analytics và Crashes thu thập dữ liệu từ các ứng dụng trực tiếp. Visual Studio App Center tự động hóa việc xây dựng, kiểm thử trên thiết bị và xuất bản lên cửa hàng ứng dụng.
Nhược điểm của Xamarin bao gồm kích thước ứng dụng — APK Xamarin.Forms với màn hình trống nặng 25–35 MB so với 5–8 MB của ứng dụng Android gốc. Thời gian biên dịch cũng cao hơn: dự án cỡ trung bình xây dựng trong 2–5 phút so với 30–60 giây trong Android Studio gốc. Mono Runtime thêm 15–20 MB vào tệp nhị phân cuối cùng.
Nhược điểm thứ hai là sự chậm trễ API mới. Các tính năng iOS/Android mới xuất hiện ngay lập tức trong phát triển gốc, trong khi ở Xamarin chúng đến sau 1–2 tháng kể từ khi phát hành ràng buộc. iOS 17 SDK (2023) được Xamarin hỗ trợ đầy đủ 3 tuần sau khi phát hành. Đối với các dự án khẩn cấp, điều này có thể rất quan trọng. .NET MAUI giải quyết vấn đề này thông qua tích hợp trực tiếp với .NET 8.
| Tiêu chí | Xamarin | .NET MAUI |
|---|---|---|
| Nền tảng | iOS, Android, Windows | iOS, Android, Windows, macOS, Tizen |
| Framework cơ bản | Mono + .NET Standard | .NET 6+ (BCL thống nhất) |
| Framework UI | Xamarin.Forms | .NET MAUI (kế thừa) |
| Trạng thái hỗ trợ | Kết thúc vòng đời từ ngày 1 tháng 5 năm 2024 | Đang được Microsoft phát triển tích cực |
| Hot Reload | Hạn chế | XAML Hot Reload + C# Reload |
.NET MAUI (Multi-platform App UI) là sự tiến hóa của Xamarin.Forms, được Microsoft phát hành vào năm 2022 cùng với .NET 6. MAUI hợp nhất iOS, Android, Windows và macOS thành một dự án duy nhất mà không cần các dự án riêng biệt cho từng nền tảng. Không giống như Xamarin.Forms, MAUI sử dụng .NET 6+ BCL thay vì Mono và .NET Standard.
Microsoft cung cấp một công cụ di chuyển — .NET Upgrade Assistant cho Visual Studio. Nó phân tích dự án Xamarin.Forms, thay thế không gian tên (Xamarin.Forms.* -> Microsoft.Maui.*), cập nhật tệp .csproj (định dạng kiểu SDK) và di chuyển cài đặt Android và iOS vào cấu hình thống nhất. Sau khi di chuyển, dự án có thể tận dụng tất cả các khả năng mới của .NET 8: Native AOT, CodeQL cho bảo mật và hiệu suất xây dựng được cải thiện.
Thay đổi chính là dự án đơn nhất. Trong khi Xamarin.Forms yêu cầu 3 dự án riêng biệt (iOS, Android, .NET Standard), .NET MAUI sử dụng một dự án duy nhất với các thư mục Platforms/iOS, Platforms/Android, Platforms/Windows và Platforms/MacCatalyst. Mỗi nền tảng biên dịch từ mã dùng chung với các chỉ thị có điều kiện dành riêng cho nền tảng (#if ANDROID, #if IOS).
Đối với cơ sở mã hiện có, .NET MAUI duy trì 90% tương thích ngược với Xamarin.Forms. Tương thích API bao gồm ContentView, ContentPage, Shell, NavigationPage, DependencyService và MessagingCenter. Các thay đổi chính ảnh hưởng đến Device.StartTimer (được thay thế bằng IDispatcher), Platform API (được chuyển sang Microsoft.Maui.ApplicationModel) và các trình kết xuất lỗi thời (được thay thế bằng Handlers).
Quy trình di chuyển bao gồm năm bước. Đầu tiên — cập nhật Xamarin.Forms lên phiên bản mới nhất 5.0. Thứ hai — thay thế .NET Standard 2.0 bằng .NET 6 hoặc 8. Thứ ba — chạy Upgrade Assistant để chuyển đổi dự án tự động. Thứ tư — sửa mã dành riêng cho nền tảng trong các thư mục Platforms. Thứ năm — kiểm thử, đặc biệt là các trình kết xuất tùy chỉnh và dịch vụ nền tảng.
Các Câu Hỏi Thường Gặp
Xamarin là nền tảng di động của Microsoft để phát triển C# cho iOS, Android và Windows. Nó sử dụng Mono Runtime để biên dịch mã dùng chung và cung cấp hai cách tiếp cận: Xamarin.Forms (UI thống nhất qua XAML) và Xamarin.Native (màn hình gốc của nền tảng). Từ năm 2024, Xamarin ở chế độ hỗ trợ.
Xamarin sử dụng C# và .NET, kết xuất thông qua các điều khiển gốc (UIKit, View) qua các ràng buộc. Flutter sử dụng Dart và công cụ kết xuất riêng (Impeller), không phụ thuộc vào các thành phần UI gốc. Flutter cung cấp giao diện nhất quán trên tất cả các nền tảng, trong khi Xamarin cung cấp giao diện gốc của mỗi hệ điều hành. Flutter được Google hỗ trợ và có 46% thị phần so với 15% của Xamarin.
Không. Microsoft đã ngừng hỗ trợ Xamarin vào ngày 1 tháng 5 năm 2024. Tất cả các dự án mới nên được bắt đầu trên .NET MAUI — người kế thừa của nó, được tích hợp trong .NET 8 và sẽ nhận được cập nhật cùng với nền tảng .NET. Đối với các dự án Xamarin.Forms hiện có, nên di chuyển trong vòng 12–18 tháng.
Sự khác biệt là không đáng kể đối với các ứng dụng thông thường. Xamarin.Forms thêm 5–10% chi phí kết xuất do các lớp Managed-Wrapper-Native. Vấn đề phát sinh với danh sách nặng (ListView so với RecyclerView) và hoạt ảnh (sử dụng Xamarin.Forms mà không có API nền tảng). Nên sử dụng CollectionView (đã thay thế ListView) và hoạt ảnh gốc.
Có, thông qua Android Bindings Library. Loại dự án .NET này bao bọc các kho lưu trữ AAR hoặc JAR thành các ràng buộc C# với tự động tạo lớp và phương thức. Các thư viện Kotlin yêu cầu trình xử lý bổ sung cho coroutines và sealed class, được cấu hình qua Metadata.xml trong Binding Library.
Tổng Kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm