Người lập trình ứng dụng cho thiết bị di động truyền thống luôn luôn phải nhớ trong đầu nguyên tắc "tiết kiệm tối đa tài nguyên" của thiết bị, dùng mọi cách để tối ưu hóa độ phức tạp tính toán cũng như lượng bộ nhớ cần sử dụng. Tuy nhiên, cùng với sự phát triển nhanh chóng của phần cứng, các thiết bị di động hiện đại thường có cấu hình rất tốt, với chip xử lý mạnh mẽ, bộ nhớ (RAM) lớn, khiến việc lập trình cho thiết bị di dộng trở nên dễ dàng hơn bao giờ hết. Các bộ kit phát triển của các hãng sản xuất hệ điều hành di động hiện nay cũng thường làm trong suốt hầu hết các tác vụ liên quan đến quản lý bộ nhớ, quản lý tiến trình... Lập trình viên có thể ít quan tâm hơn đến việc tối ưu hóa sử dụng tài nguyên và tập trung vào việc "lập trình", phát triển tính năng cho ứng dụng như khi lập trình cho máy tính cá nhân.
Tuy nhiên, đặc trưng di động của các thiết bị này cũng đem đến nhiều vấn đề mà người lập trình cần phải quan tâm như:
- Tính "di động" của các thiệt bị này khiến kết nối mạng trở nên rất bất ổn định và khó kiểm soát. Các ứng dụng phụ thuộc nhiều vào kết nối Internet cần chú ý điểm này.
- Lưu lượng Internet trền thiết bị di động thường có chi phí cao hơn so với Internet cố định. Điều này cũng cần lưu ý khi phát triển các ứng dụng sử dụng nhiều tài nguyên Internet như phim trực tuyến, nhạc trực tuyến...
- So với máy tính cá nhân, các thiết bị di động hiện đại được trang bị thêm rất nhiều tính năng giúp việc tương tác với người dùng trở nên thuận tiện (màn hình cảm ứng đa điểm, tương tác giọng nói, cử chỉ...), các loại kết nối đa dạng (NFC, GPS, 3G, 4G, bluetooth, IR...), các cảm biến phong phú giúp trải nghiệm rất đa dạng (cảm biến ánh sáng, cảm biến tiệm cận, la bàn, cám biến chuyển động, gia tốc kế...). Người lập trình, tùy thuộc vào ứng dụng cụ thể, có thể sử dụng đến các tính năng đặc biệt này để đem đến cho người dùng trải nghiệm tốt nhất trên thiết bị di động của mình.
Ngoài ra các hãng phát triển hệ điều hành di động đều làm ra bộ công cụ phát triển (SDK) và môi trường phát triển tích hợp (IDE) rất thuận tiện cho việc viết mã nguồn, biên dịch, gỡ rối, kiểm thử cũng như xuất bản phần mềm.
Xét theo thị phần trên thị trường, ba hệ điều hành phổ biến nhất cho thiết bị di động hiện nay là Google's Android, Apple's iOS và Microsoft's Windows Phone. Mỗi ứng dụng thành công thường được phát triển cho cả 3 hệ nền này. Mỗi hệ nền đều có một chợ ứng dụng chính hãng (Google có Google Play Store, Apple có Apple AppStore, Microsoft có Windows Phone Store) với rất nhiều khách hàng tiềm năng, giúp người phát triển có thể phân phối ứng dụng miễn phí hoặc có phí với chi phí nhất định.
Bảng dưới đây liệt kê các hệ điều hành cùng với ngôn ngữ lập trình và IDE phổ biến nhất của nó.
HĐH | Ngôn ngữ lập trình | IDE |
---|---|---|
Android | Java | IBM's Eclipse với Google's ADT plugins |
iOS | Objective-C | Apple' Xcode |
Windows Phone | C# | Microsoft's Visual Studio cho Windows phone |
Ngoài việc phát triển ứng dụng cho từng hệ điều hành như kể trên, lập trình viên có thể lựa chọn các thư viện lập trình đa nền tảng để phát triển ứng dụng, phổ biến nhất trong các ứng dụng đa nền là các ứng dụng viết bằng ngôn ngữ Web (HTML5, CSS & Javascript). Trình duyệt web của các thiết bị di động hiện nay có đầy đủ tính năng lẫn hiệu năng để chạy tốt các ứng dụng web hiện đại. Một ứng dụng Web có thể được đặt trên máy chủ hoặc được đóng gói thành native app (ứng dụng cho từng hệ điều hành) qua một số công cụ đóng gói của các hãng thứ ba.
Công cụ đóng gói ứng dụng Web cho thiết bị di động phổ biến nhất hiện nay là PhoneGap(http://phonegap.com/), được phát triển bởi Nitobi, sau được Adobe mua lại. PhoneGap cho phép lập trình viên phát triển ứng dụng di động sử dụng ngôn ngữ Web phổ biến (HTML5, CSS3 và Javascript), với các tính năng bổ sung, cho phép ứng dụng truy cập vào phần cứng của thiết bị như gia tốc kế, máy ảnh, GPS... và đóng gói thành ứng dụng cho nhiều hệ điều hành khác nhau, bao gồm Android, iOS, Blackberry, BlackBerry 10, Windows Phone, Windows 8, Tizen, Bada. Tuy nhiên, nhược điểm của các ứng dụng loại này là hiệu suất thấp (chạy không được "mượt mà" như ứng dụng native) và không đồng nhất giữa tất cả các trình duyệt Web di động (có thể chạy hoặc hiển thị khác nhau trên các hệ điều hành với các trình duyệt khác nhau).
Việc chọn hệ điều hành/thư viện nào để phát triển tùy thuộc vào nhiều yếu tố khác nhau như mục đích của ứng dụng, đối tượng sử dụng, tiềm năng của hệ điều hành, các yêu cầu kỹ thuật cụ thể cũng như thói quen và kỹ năng của lập trình viên. Trong khuôn khổ giáo trình này, chúng tôi tập trung đi sâu vào việc phát triển ứng dụng cho hệ điều hành di động phổ biến nhất hiện nay - Google's Android.