Bạn nên chọn công cụ nào để phát triển ứng dụng di động đa nền tảng?

Bài viết được dịch từ Simple Programmer

Với kinh nghiệm đã sử dụng hầu hết tất cả các giải pháp chủ yếu trong phát triển các ứng dụng di động đa nền tảng. Và sau khi làm việc với tất cả các giải pháp khác nhau đó cùng với việc nghiên cứu thêm những nền tảng khác, tôi nghĩ rằng mình nên xuất bản một bài viết để đưa ra những suy nghĩ của bản thân về mỗi sự lựa chọn nói trên và sự khác nhau giữa chúng.

Hầu như tôi sẽ tập trung vào hai nền tảng chính là Android và iOS bởi vì mặc dù trên thị trường cũng có những đối thủ cạnh tranh khác, nhưng thực ra chỉ những “tay chơi lớn” là còn tồn tại cho đến ngày nay. Mọi nền tảng còn lại chỉ chia sẻ nhau một miếng bánh nhỏ bé trong thị trường ứng dụng di động mà thôi.

Công cụ phát triển ứng dụng di động đa nền tảng nào là tốt nhất?Công cụ phát triển ứng dụng di động đa nền tảng nào là tốt nhất?


Nếu bạn quan tâm thì có thể tham gia một số khóa học do tôi xuất bản tại Pluralsight bao gồm:

Phát triển ứng dụng dạng native (dạng gốc)

Cách phổ biến nhất để xây dựng các ứng dụng di động là sử dụng các công cụ native (gốc) đi cùng với nền tảng đó. Đối với Android thì nó là Java và Eclipse hoặc là Android Studio mới của họ, đi cùng với Android SDK. Đối với iOS, thì nó là Objective-C hoặc Swift và XCode. Đối với Windows Phone thì nó là C# và Visual Studio.

XCodeCòn nhớ, ứng dụng di động đầu tiên mà tôi phát triển là cho iOS và Android gốc. Lúc đầu tôi xây dựng một phiên bản ứng dụng trên Android và sau đó tôi định chuyển toàn bộ code và thiết kế của ứng dụng này sang iOS. Đây là một công việc tương đối khó và tôi hầu như đã không thể sử dụng phần code chung nào giữa 2 ứng dụng đó. Tôi đã phải học cả 2 nền tảng đi kèm với các SDK của họ và tôi cũng học thêm ngôn ngữ Objective-C, bởi vì trước khi tôi bắt đầu viết ứng dụng iOS đầu tiên của mình thì tôi không biết về Objective-C hoặc một chút gì về phát triển ứng dụng trên môi trường Mac.

Nói chung, tôi sẽ không đề xuất cách làm này bởi vì bạn sẽ tốn rất nhiều thời gian để duy trì mã nguồn của hai ứng dụng hoàn toàn tách biệt nhau và bạn thực sự không thu được gì nhiều bằng cách sử dụng các công cụ native (gốc).

Tuy nhiên, tôi cũng đề xuất rằng bất kỳ ai có ý định nghiêm túc về phát triển ứng dụng di động đa nền tảng thì ít nhất cũng nên phát triển một ứng dụng dạng natively (gốc) đơn giản trên cả Android và iOS. Lý do nên làm điều này đó là bởi vì nó sẽ giúp bạn dễ dàng hơn để hiểu cái gì đang diễn ra dưới các lớp trừu tượng (abstraction) trong một giải pháp phát triển ứng dụng di động đa nền tảng, và nó sẽ cung cấp và giúp bạn nhìn thấy điểm mạnh, điểm yếu trong các giải pháp đa nền tảng này.

Xamarin Tools

Các công cụ của Xamarin về cơ bản sẽ cho phép bạn phát triển các ứng dụng Android hoặc iOS bằng ngôn ngữ C# và có thể chia sẻ rất nhiều phần code giữa các ứng dụng với nhau.

XamarinKhi viết một ứng dụng sử dụng bộ công cụ của hãng Xamarin thì về cơ bản là bạn đang sử dụng một lớp trừu tượng phía trên các SDK thực sự của iOS và Android. Điều này có nghĩa là bạn sẽ thu được kết quả là một ứng dụng native hoàn toàn cùng với giao diện người dùng native trên mỗi nền tảng.

Nhưng điều này cũng có nghĩa là bạn sẽ bị giới hạn tới một mức độ nào đó việc chia sẻ code giữa các nền tảng này. Điển hình là khi tôi phát triển một ứng dụng sử dụng công cụ của Xamarin, tôi sẽ xây dựng một phần lõi của ứng dụng mà code của nó có thể chia sẻ giữa hai nền tảng iOS và Android, và thậm chí là cả phiên bản trên Windows Phone của ứng dụng cũng dựa trên thư viện lõi này. Với hướng tiếp cận này thì bạn có khả năng sử dụng lại khoảng từ 60-70% code của ứng dụng mà không phải vất vả.

Nhưng bạn có thể tiến xa hơn bằng cách hoặc là tự phát triển các lớp trừu tượng (abstractions) của riêng mình sử dụng một kiến trúc kiểu như MVC hay MVVM, hoặc là bạn có thể sử dụng một framework như MVVM cross. Với hướng tiếp cận này, dĩ nhiên là sẽ khó hơn một chút để bắt đầu nhưnng có thể sử dụng được lại nhiều code hơn, có lẽ lên đến khoảng 80-90%.

Nếu đánh giá về công cụ thì các công cụ của Xamarin có thể nói là rất tuyệt vời! Xamarin cũng có một IDE của riêng nó gọi là Xamarin Studio. IDE này thì đa nền tảng, nó được thiết kế rất tốt và dễ dàng sử dụng. Công cụ Xamarin này cũng có một plugin cho Visual Studio, nó sẽ cho phép bạn phát triển ứng dụng của mình trong Visual Studio. Thậm chí bạn có thể phát triển một ứng dụng iOS từ Visual Studio, nhưng sẽ cần một máy Mac để thực hiện công việc build ứng dụng. (Công cụ này sử dụng một triệu gọi từ xa tới máy Mac để thực hiện công việc build đó.)

Gần đây Xamarin cũng vừa giới thiệu một component store (kho chứa các mô-đun), điều này sẽ giúp bạn tìm được các thành phần có thể sử dụng lại trực tiếp từ Xamarin Studio một cách dễ dàng hơn và gắn chúng vào trong ứng dụng của mình.

Những cuốn sách hay về công cụ Xamarin:

PhoneGap

PhoneGap có thể được xem là cái tên nổi tiếng tiếp theo trong các giải pháp phát triển di động đa nền tảng, nhưng nó cũng có nhiều điểm gây khó hiểu cho mọi người.

PhoneGapPhoneGap về cơ bản là một tập các hàm JavaScript API, nó cho phép bạn có thể truy cập những khả năng gốc trong thiết bị di động. Nó cũng là một wrapper và cho phép bạn xây dựng một ứng dụng web mà sẽ được cài đặt cục bộ trên thiết bị đó.

Khi bạn xây dựng một ứng dụng sử dụng PhoneGap, thì về cơ bản là bạn đang xây dựng một trang web di động sử dụng HTML5 và JavaScript, cũng giống như bạn đã xây dựng những trang web khác hiện nay, nhưng bạn đang đặt mã HTML và JavaScript đó trên thiết bị di động. Các ứng dụng PhoneGap chạy trên trình duyệt cục bộ trên điện thoại và có một số hook để triệu gọi vào các thư viện gốc thông qua các giao diện lập trình ứng dụng JavaScript API.

Tất cả điều này có nghĩa là gì?

Vâng, nó có nghĩa là nếu bạn đang phát triển một ứng dụng PhoneGap, thì bạn có thể phát triển nó giống như một trang web di động đa nền tảng. Bạn có thể sử dụng bất kỳ mobile framework nào mà bạn muốn, như Sencha Touch, hoặc JQuery Mobile, v.v…

Vì tất cả code trong ứng dụng của bạn là HTML và JavaScript nên phần lớn sẽ có thể chia sẻ được, nhưng bạn sẽ không có thể viết một ứng dụng dạng native.

Bởi vì ứng dụng PhoneGap của bạn sẽ chạy trong một trình duyệt, vì thế nó sẽ giống một ứng dụng web hơn là một ứng dụng dạng native. Giao diện người dùng mà bạn thiết kế sẽ không sử dụng những control gốc và sẽ phụ thuộc vào giới hạn và tốc độ của trình duyệt web. Điều này cũng có nghĩa là bạn có thể phải viết một số code cho một nền tảng xác định nào đó để phù hợp với các loại trình duyệt khác nhau, nhưng về cơ bản thì bạn sẽ có khả năng chia sẻ hầu hết những đoạn code đó.

Công cụ cho PhoneGap này phụ thuộc hoàn toàn vào môi trường mà bạn muốn xây dựng ứng dụng trên đó. Bạn có thể phát triển nó trong bất cứ môi trường nào mà bạn thích và về cơ bản là sử dụng một plugin cho IDE trong hầu hết các trường hợp. Cần phải có một số bước nhỏ thao tác bằng tay, vì thế công việc setup này không dễ cho lắm. Nhưng một lợi ích lớn của PhoneGap là cho phép upload dự án của bạn vào bất cứ môi trường nào khác môi trường mà bạn đã tạo nó, và có thể build một cách tự động cho những nền tảng khác.

Những cuốn sách hay về công cụ PhoneGap:

Appcelerator Titanium

Tôi muốn đề cập đến nền tảng này tiếp theo bởi vì rất nhiều lập trình viên bị nhầm lẫn giữa nó và PhoneGap. Appcelerator Titanium hoàn toàn khác với PhoneGap. Chỉ có một điểm giống đó là ngôn ngữ được sử dụng là JavaScript. Mọi thứ còn lại thì hoàn toàn khác biệt.

Appcelerator TitaniumVới Appcelerator Titanium thì bạn sử dụng một custom API phát triển di động đa nền tảng để xây dựng ứng dụng. Điều này khác với PhoneGap hoặc Xamarin, bởi vì với Xamarin thì bạn sử dụng một wrapper xoay quanh các SDK native thực thụ, còn với PhoneGap thì bạn sử dụng bất cứ cái gì mà mình muốn để xây dựng một ứng dụng web HTML5.

Với Titanium thì bạn thực sự viết tất cả code của mình dựa trên SDK của họ bao gồm các thành phần giao diện UI. Điều này có nghĩa là khi bạn viết một ứng dụng Titanium đồng nghĩa với việc bạn đang viết một giao diện người dùng đa nền tảng.

Các ứng dụng Appcelerator Titanium được biên dịch xuống tới các ứng dụng gốc hoàn toàn và sử dụng những control gốc thực sự trên nền tảng đó.

Ví dụ, trong Titanium bạn có thể lập trình khai báo một button và layout xác định của nó cũng như một số thuộc tính cho button đó. Khi bạn biên dịch ứng dụng, thì cái button đó sẽ xuất hiện như là một button gốc của Android khi chạy trên thiết bị Android và như là một button gốc của iOS khi nó chạy trên iOS.

Vậy điều này có nghĩa là bạn có thể xây dựng một ứng dụng đa nền tảng hoàn chỉnh bao gồm UI với 100% code được sử dụng lại và thực hiện nó trong JavaScript?

Có thể, nhưng cũng không hẳn như vậy. Nhiều thành phần UI và mô hình tương tác là đa nền tảng, nhưng nhiều phần sẽ không như vậy. Ví dụ, trong iOS thì bạn có một control rất lý tưởng là Navigation Controller, nó sẽ lưu vết các screen nào mà bạn đã lướt qua và cho phép bạn quay trở lại một cách dễ dàng; trong Android thì không có control như vậy. Nhưng, Titanium cũng hỗ trợ các control theo nền tảng xác định, có nghĩa là bạn phải viết thêm một vài đoạn code điều kiện dựa trên nền tảng đó.

Tất cả điều này để nói lên một điều rằng bạn có thể lập trình với mẫu số chung nhỏ nhất giữa các nền tảng và thu được một ứng dụng đa nền tảng đầy đủ cùng với gần như 100% code có thể sử dụng lại, nhưng mặc dù bạn sẽ có các control gốc, nhưng kết quả đó có thể không được tốt lắm.

Một thực tế là, nếu bạn đang sử dụng Titanium thì bạn sẽ có thể muốn điều chỉnh một số phần của ứng dụng cho phù hợp với những nền tảng xác định.

Titanium thực sự có một số công cụ rất tốt. Có một Titanium IDE rất mạnh mẽ và cho phép auto-completing các đoạn code JavaScript, đặc biệt là đối với các Titanium API. Quá trình build từ IDE này cũng vô cùng đơn giản và thậm chí cho phép bạn build một ứng dụng web bên ngoài trên cùng codebase. Ngoài ra cũng có một chợ (marketplace) chứa các thành phần mà bạn có thể sử dụng và mua bổ sung cho các ứng dụng của mình.

Titanium gần đây giới thiệu một MVC framework có tên là Alloy, nó là một công cụ tuyệt vời để tạo ra các ứng dụng Titanium và giúp bạn giảm bớt các tác vụ lập trình nhàm chán khi tạo ra các giao diện người dùng. Cùng với framework này, bạn khai báo giao diện người dùng thông qua một file XML, công việc này tương đối đơn giản. Sau đó bạn có thể sử dụng các lớp controller để tương tác với UI đó. Nó cũng có khái niệm về style sheet gần giống với CSS.

Tuy nhiên, một trong những đặc điểm ấn tượng nhất về Titanium đó là nó đưa ra các tính năng về cloud. Titanium về cơ bản cho phép bạn có thể truy cập tới các dịch vụ đám mây (cloud services) phía backend của họ một cách đầy đủ, điều này sẽ cho phép bạn có thể dễ dàng tạo ra những tính năng rất hay giống như là Facebook-like mà bạn không phải viết code phía backend. Bạn có thể sử dụng các dịch vụ đám mây này để quản lý và xác thực người dùng, lưu trữ dữ liệu về họ, cũng như social graphs và thậm chí chỉ cần lưu trữ dưới dạng các cặp key/value. Tôi đã thực sự rất ấn tượng bởi chức năng này.

Những cuốn sách hay về công cụ Appcelerator Titanium:

Các tùy chọn phát triển di động đa nền tảng khác?

Dĩ nhiên là có rất nhiều lựa chọn phát triển khác, nhưng tôi chỉ chọn 3 nền tảng phát triển ứng dụng chuẩn này từ chính kinh nghiệm của bản thân, và đây có thể xem là những công cụ đưa ra nhiều tính năng tuyệt vời nhất.

Có 3 đặc trưng cũng được bao gồm trong các công cụ phát triển di động đa nền tảng này:

  • Chia sẻ code, nhưng phân biệt và có UI native (Xamarin)
  • Các ứng dụng HTML5 chạy cục bộ (PhoneGap)
  • Các ứng dụng gốc có thể chia sẻ code hoàn toàn (Titanium)

Dĩ nhiên là cũng có những mặt hạn chế của những hướng tiếp cận này vì trên đời này không có gì là hoàn hảo cả, nhưng tôi đánh giá cao tất cả các giải pháp tốt này.

Nói chung, tôi thích hướng tiếp cận Xamarin nhất bởi vì các control của nó có giao diện người dùng giống hoàn toàn với các control gốc và tôi muốn có khả năng phát triển nó bằng ngôn ngữ C#.

Tuy nhiên, nếu tôi phát triển ứng dụng bằng PhoneGap thì tôi sẽ sử dụng Icenium, vì nó cơ bản là một IDE cùng một tập các công cụ trợ giúp việc build và kiểm thử dựa trên Cordova (một phần mã nguồn mở của PhoneGap), nó giúp cho công việc phát triển và triển khai ứng dụng được dễ dàng hơn.

Bạn cũng đừng quên đăng ký các khóa học tại Pluralsight, nếu bạn muốn học cách làm thế nào để sử dụng một cách nhanh chóng các framework phát triển di động nói trên.

Nếu bạn đang sử dụng công cụ nào khác để phát triển ứng dụng di động đa nền tảng thì hãy dành chút thời gian để giới thiệu với mọi người ở phần bình luận phía dưới nhé!

Các bài viết liên quan:

Về tác giả bài viết:

johnJohn Sonmez là một lập trình viên, người lập ra trang web Simple Programmer, đồng thời anh là tác giả của giáo trình học trực tuyến Pluralsight. Anh đã xuất bản hơn 50 khóa học trực tuyến về các chủ đề như iOS, Android, .NET, Java và phát triển Games. Bạn có thể liên hệ với anh qua Twitter.

Advertisements

30 comments on “Bạn nên chọn công cụ nào để phát triển ứng dụng di động đa nền tảng?

  1. Mình thích Xamarin, tuy nhiên gặp khó khăn trong vấn đề debug IOS. Sẵn cho mình hỏi, trong Xamarin có thể viết code theo điều kiện riêng cho từng nền tảng không ? Ví dụ: nếu là android thì tôi cho nó làm như thế này, nhưng nếu là IOS thì tôi cho nó làm như thế khác ?
    Còn nữa, Xamarin có bản Free k? nghe nhiều người nói mua nó rất đắt.
    Xin cảm ơn

    • Trong Xamarin nó có 2 phần chính. Phần Share code và phần View, phần view thì mỗi nền tảng viết riêng, còn phần Share code là phần dùng chung cho các nền tảng. Bạn không cần phải viết câu điều kiện gì cả, đó là những project khác nhau, có nhúng phần chung là phần share code.

    • Microsoft đã mua lại Xamarin rồi nên nếu bạn dùng VS có bản quyền (key lậu khá nhiều :D) thì sẽ dùng dc Xamarin có bản quyền thôi, Xamarin có code theo từng nền tảng riêng nha, Andorid thì có Xamarin.Android, IOS thì Xamarin,IOS, còn Xamarin.Form thì là kiều đa nền tảng.

  2. Cho mình hỏi, mình đang học C# thấy rất hợp, mình muốn theo hướng lập trình di động mà Window phone yếu quá. Liệu có nên tiếp tục theo C# và hy vọng vào Xamarin được ko hay phải chuyển sang Java để lập trình Androi (với người tự học a-z như mình thì java quả là vất vả vì mọi cái đều phải tùy chỉnh nhiều quá ko sẵn sàng như visual studio). Cám ơn.

  3. Đang xài Sencha Touch, nếu muốn xài IDE của nó thì phải mua quá mắc.
    Không xài cũng dc nhưng hơi khó cho bạn mới tìm hiểu, component thì nhiều.
    Điểm yếu là nó load vào app không được nhanh như mấy framework #.
    Được cái khi build production thì nó minified js mấy file js thành 1 nên tốc độ chạy nhanh.
    Thấy app của bên TGDD hình như viết = Ionic, bạn nào muốn tìm hiểu thì down app về lấy source vọc cũng được.

  4. Còn một công cụ rất mạnh chắc ít người biết là Delphi XE (hiện tại là phiên bản RAD Studio 10 Seattle) có thể xây dựng 1 app chạy trên đa nền tảng IOS, Android, MacOS, Window mà hầu như ko phải chỉnh sửa code.

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s