MFCF

Phát triển ứng dụng cho các thiết bị di động có thật sự đơn giản? Mở IDE lên, cho tất cả các đoạn code vào trong đó, test thử, rồi ném lên App Store – tất cả chỉ trong một buổi sáng? Hay nó là một chu trình cực kỳ phức tạp, bao gồm từ việc thiết kết giao diện người dùng (UI/UX), đến việc kiểm thử khả năng tương thích trên nhiều loại thiết bị khác nhau (QA), một chu trình thử nghiệm thực tế (beta) hoàn hảo và trong đó có vô số cách phát triển khác nhau?


Trong phần này chúng ta sẽ tìm hiểu xem việc bắt đầu xây dựng ứng dụng trên thiết bị di động như thế nào. Hiện tại có rất nhiều loại thiết bị di động thông minh được cài đặt nhiều hệ điều hành khác nhau, mỗi loại có đặt trưng riêng từ phần cứng đến phần mềm và cách phát triển các ứng dụng trên đó về cơ bản cũng sẽ khác nhau. Nổi bật trong số các hệ điều hành di động mà lập trình viên thường hướng tới, ta có: iOS, AndroidWindows Phone.

Write Once, Run Anywhere

iOS, Android và Windows Phone, mặc dù cả ba đều là các nền tảng di động, nhưng chúng đều có những cách riêng và yêu cầu các ngôn ngữ khác nhau để phát triển. Ứng dụng iOS đa phần được viết bằng Objective-C, trong khi đó Android thì được viết bằng Java, còn Windows Phone thì dùng .Net Framework (C# hoặc VB.NET).

Thế nhưng bạn có thể dùng C/C++ để lập trình ứng dụng cho iOS, Android và cả Windows Phone (hỗ trợ tốt từ phiên bản 8.1) – Xem bảng 1.1, dù vậy nhưng cấu trúc C/C++ khá phức tạp cho người mới bắt đầu và đa phần vẫn chưa thể cross được hoàn toàn trên tất cả các nền tảng.

Nhà phát triển thường rất sợ khi phải code lại 3 lần trên 3 loại ngôn ngữ khác nhau, chưa kể bạn phải fix cùng một bug 3 lần, bảo trì/nâng cấp 3 lần… Đối với các ứng dụng không-tầm-thường (lớn) thì việc tìm kiếm một giải pháp đa-nền-tảng để giảm thiểu chi phí xây dựng và duy trì ứng dụng trên các thiết bị như thế là rất cần thiết.

Bảng 1.1. Native platform languages

iOS Android Windows Phone
C/C++ x x x (8.1)
Objective-C x
Java x
C# x
Visual Basic .NET x

Phương châm “write once, run anywhere” không lạ gì trong giới lập trình viên. Nó là xu hướng trong việc phát triển ứng dụng đa nền tảng, bất kể trên desktop hoặc trên thiết bị di động. Khởi xướng bới Sun khi họ đưa Java thành ngôn ngữ cho mọi thiết bị, kế thừa điều đó, cùng với sự phát triển và khả năng mạnh mẽ của .Net Framework mà ngôn ngữ đại diện là C#, công ty Xamarin đã tạo ra hai sản phẩm là MonoTouch (Xamarin.iOS) và Mono for Android (Xamarin.Android) để giúp nhà phát triển có thể xây dựng ứng dụng trên iOS lẫn Android hoàn toàn bằng C#.

Bảng 1.2 Native platform languages with Mono tools

iOS Android Windows Phone
C/C++ x x x (8.1)
Objective-C x
Java x
C# x x x
Visual Basic .NET x

Requirements

Nếu muốn phát triển ứng dụng trên iOS bạn cần có máy tính Apple Macintosh chạy phiên bản mới nhất của OS X Mountain Lion. Vì dù ứng dụng Xamarin dựa trên .Net BCL (Base Class Library) và được viết bằng ngôn ngữ C# nhưng với iOS thì cần phải có iOS SDK và Xcode để compile. Ngoài ra để deloy qua thiết bị thật bạn cần phải là thành viên của Apple’s Developer Program, chương trình này có mức phí là $99/năm.

Introduction to Xamarin

Xamarin hiện là bộ công cụ duy nhất có thể đưa một ngôn ngữ – C#, class library và runtime chạy được trên cả 3 nền tảng di động là iOS, Android và Windows Phone (Windows Phone mặc nhiên đã sử dụng C#) mà vẫn đảm bảo đủ hiệu suất thậm chí các đòi hỏi của game.

Xamarin hỗ trợ truy cập hoàn toàn tới SDK nguyên mẫu của từng nền tảng và thêm vào một số tiện ích mới, bao gồm:

  1. Kết nối – Binding – hoàn toàn với SDK nguyên mẫu: Xamarin xây dựng theo cơ chế chuyễn đổi trực tiếp những phương thức trong SDK của Android và iOS sang ngôn ngữ .Net, binding một cách mạnh mẽ, dễ dàng chuyển đổi và sử dụng. Cung cấp trình dò lỗi và kiểm tra “compile-time” hoặc trong quá trình phát triển, giảm thiểu lỗi runtime và tăng chất lượng ứng dụng.
  2. Tương thích với Objective-C, Java, C, và C++: Xamarin cho phép chèn trực tiếp các thư viện Objective-C, Java, C, và C++, giúp lập trình viên có thể sử dụng các thứ viện của bên-thứ-3 một cách dễ dàng.
  3. Modern Language Constructs: Do sử dụng C#, một ngôn ngữ hiện đại và có những phần vượt trội hơn với Objective-C và Java, như Dynamic Language Features, Lambdas, LINQ,
    Parallel Programming, Generics, v.v…
  4. Base Class Library (BCL): Ứng dụng Xamarin sử dụng .NET BCL, một bộ gồm rất nhiều class hỗ trợ toàn diện và sắp xếp hợp lý, như XML, Database, Serialization, IO, String, Networking và nhiều thứ khác.
  5. Modern Integrated Development Environment (IDE): Xamarin sử dụng bộ công cụ Xamarin Studio trên Mac OS, và Xamarin Studio hoặc Visual Studio 2013 trên Windows
  6. Hỗ trợ Cross Platform: Xamarin hỗ trợ đa nền tảng một cách tinh vi trên 3 hệ điều hành di động phổ biến là iOS, Android và Windows Phone. Ứng dụng có thể được viết với 90% code được chia sẻ/dùng chung. Qua đó có thể giảm đáng kể chi phí và thời gian phát triển ứng dụng di động cho 3 nền tảng phổ biến nhất.

How Does Xamarin Work?

Xamarin sử dụng 2 sản phẩm thương mại là Xamarin.iOSXamarin.Android xây dựng từ Mono, một phiên bản open-source dựa trên .Net Framework publish bởi .NET ECMA. Mono biến đổi .Net Framework để có thể chạy được trên các nền tảng khác như Linux, Unix, FreeBSD, và Mac OS X.

Trên iOS, Xamarin Ahead-of-Time (AOT) Compiler compile ứng dụng Xamarin.iOS trực tiếp sang native ARM assembly code.

Trên Android, Xamarin Compiler compile ứng dụng xuống thành Intermediate Language (IL), rồi sau đó Just-in-Time (JIT) compile thành native assembly khi ứng dụng được thực thi.

Trong cả hai trường hợp, ứng dụng Xamarin sẽ tự động xử lý những thứ như phân bổ bộ nhớ
(memory allocation), dọn rác (garbage collection),…

Tham khảo danh sách assemblies và classes, tại Xamarin.iOS Assembly ListXamarin.Android Assembly List

Application Output

Khi ứng dụng Xamarin đã được compile, kết quả cho ta một file Application Package, iOS là .app và Android là .apk. Các file hoàn toàn giống với các package nguyên mẫu và deploy theo cùng một cách.

Resources

Bài viết có tham khảo các tư liệu, tài nguyên tại:

Note

Trong các bài viết sau chủ yếu tập trung vào việc phát triển ứng dụng trên nền tảng Xamarin Android & Windows Phone