Phát triển ứng dụng di động đa nền tảng [đã đóng]


109

Ngày càng có nhiều nền tảng di động được tung ra và sdk có sẵn cho các nhà phát triển. Có nhiều nền tảng di động khác nhau: Android, iOS, Moblin, Windows mobile 7, RIM, symbian, bada, maemo, v.v.

Và việc tạo ra ứng dụng đa nền tảng đang khiến các nhà phát triển đau đầu. Tôi đang tìm kiếm những điểm chung trên các nền tảng, điều này sẽ giúp ích cho các nhà phát triển muốn chuyển ứng dụng sang tất cả các nền tảng. Giống như độ phân giải màn hình khác nhau, phương thức nhập liệu, hỗ trợ mở gl, v.v. vui lòng chia sẻ chi tiết mà bạn biết cho bất kỳ nền tảng nào.

Hoặc có những khả năng, bằng cách viết mã trong html (loại tiện ích con) và tải nó vào ứng dụng gốc. Tôi biết về android, trong đó chúng ta có thể thêm chế độ xem web vào ứng dụng bằng cách gọisetContentView(view)

Vui lòng chia sẻ chi tiết lớp học nơi chúng tôi có thể thêm chế độ xem html vào ứng dụng gốc của các loại nền tảng khác nhau mà bạn biết.

Mục đích của chủ đề này là chia sẻ thông tin chi tiết chung giữa các nhà phát triển. đánh dấu là wiki cộng đồng.

Thư viện và công cụ đa nền tảng


1
Trong khi tôi tìm thấy một chủ đề thú vị có liên quan đến chủ đề này, stackoverflow.com/questions/3326110/…
sohilv

khác tốt bài về nền tảng dev chéo: stackoverflow.com/questions/51988/...
sohilv

1
Đã bỏ phiếu để đóng nó như một bản sao. Điều này quá quan trọng để chia thành hai câu hỏi. stackoverflow.com/questions/51988/…
ripper234,

1
Gần đây tôi đã viết blog về vấn đề này stronia.com/2014/05/building-cross-platform-mobile-apps.html
Anshu Dwibhashi

Câu trả lời:


97

Câu trả lời của tôi ở đây bao gồm một số hạn chế kỹ thuật của các công cụ cross-platfrom nhưng hãy để tôi mở rộng một chút:

Tôi nghĩ rằng các công cụ đa nền tảng từ trước đến nay luôn là một thứ không có lợi vì những công cụ như vậy có trọng tâm triết học sai lầm.

Tất cả các điểm bán hàng cho các công cụ cross-plaform là lợi ích mà chúng mang lại cho các nhà phát triển . Chúng được bán với ý tưởng rằng chúng cho phép các nhà phát triển viết-một-lần-chạy-ở bất cứ đâu. Chúng được bán với ý tưởng rằng chúng cho phép các nhà phát triển mở rộng thị trường của họ mà không cần học các API mới. Chúng được bán với ý tưởng rằng chúng cho phép các nhà phát triển giảm chi phí và thời gian đưa ra thị trường.

Những gì công cụ cross-plaform KHÔNG được bán chính là lợi ích mà chúng mang lại cho người dùng cuối .

Lợi ích cho người dùng cuối không phải là một điểm bán hàng vì phát triển đa nền tảng hiếm khi mang lại lợi ích cho người dùng cuối. Người dùng cuối không quan tâm nhà phát triển đã phải làm việc vất vả như thế nào để đưa sản phẩm ra thị trường. Họ cũng không quan tâm ứng dụng có thể chạy trên bao nhiêu nền tảng khi họ không sử dụng ngoài một nền tảng. Họ chỉ quan tâm xem ứng dụng có thực hiện những gì họ cần trên phần cứng mà họ cần để chạy nó hay không. Trừ khi họ có nhu cầu cụ thể để chạy ứng dụng trên nhiều nền tảng khác nhau, thực tế là nó không mang lại giá trị gì cho họ.

Ngược lại, những thỏa hiệp không thể tránh khỏi của việc tạo API đa nền tảng có nghĩa là tất cả các ứng dụng được tạo bởi API sẽ ở mức B tốt nhất trên mọi nền tảng. Chúng sẽ không bao giờ là công cụ tốt nhất để sử dụng trên mỗi nền tảng.

Tất cả điều này có nghĩa là trong hầu hết các trường hợp sử dụng, các công cụ đa nền tảng cung cấp cho người dùng cuối một sản phẩm kém hơn so với những sản phẩm được tạo bằng các API dành riêng cho nền tảng. Người dùng cuối sẽ luôn có sự lựa chọn tốt hơn.

Bạn kiếm tiền về lâu dài bằng cách cung cấp cho người dùng cuối những công cụ hữu ích nhất. Nếu bạn không tập trung về mặt triết học vào việc làm cho cuộc sống của người dùng cuối dễ dàng hơn và hiệu quả hơn, bạn sẽ phải gánh chịu rất nhiều điều ngay từ đầu. Người dùng cuối có rất nhiều lựa chọn và nếu công cụ của bạn không phải là một trong những công cụ tốt nhất, bạn sẽ không đưa nó ra thị trường.

Bạn chỉ nên sử dụng các công cụ đa nền tảng nếu bạn nghĩ, "người dùng sẽ thực sự được lợi khi chạy ứng dụng này trên nhiều nền tảng khác nhau." Nếu bạn bắt đầu xem xét các công cụ đa nền tảng chỉ vì chúng sẽ giúp cuộc sống của bạn (các nhà phát triển) dễ dàng hơn, thì bạn đã chọn chúng sai lý do và chúng sẽ khiến bạn bị tổn thương nhiều hơn là chúng sẽ giúp ích.


52
Công việc ít hơn (không cần thiết) cho các nhà phát triển có nghĩa là chu kỳ cập nhật nhanh hơn, tính năng mới nhanh hơn, sửa lỗi nhanh hơn, v.v. Với cùng một nhân lực có thể đạt được nhiều hơn. Tôi coi đây là lợi ích cho người dùng cuối.
schoetbi

10
Về lý thuyết, phát triển nhanh hơn có thể tốt hơn cho người dùng cuối nhưng đó không phải là nền tảng triết học của hầu hết các API đa nền tảng. Tôi đã thấy nhiều nỗ lực để sử dụng các công cụ như vậy trong nhiều môi trường và trọng tâm luôn là làm cho cuộc sống của nhà phát triển dễ dàng hơn với cái giá là chất lượng của sản phẩm cuối cùng. Hơn nữa, lời hứa nhanh hơn và rẻ hơn hiếm khi xuất hiện. Có vẻ như luôn luôn có hiển thị dừng lại quá giang ở một nơi nào đó mà phần lớn thời gian tiết kiệm được.
TechZen

5
Để đưa quan điểm của tôi về nhà, hãy xem xét điều này: Các API đa nền tảng tồn tại cho nhiều lớp phần cứng và hệ điều hành khác nhau. Cá nhân bạn thường xuyên sử dụng bao nhiêu ứng dụng đa nền tảng? Bạn đã từng sử dụng bao nhiêu ứng dụng đa nền tảng mà bạn nghĩ tốt? Mọi người đã thúc đẩy các API đa nền tảng kể từ khi họ có nhiều hơn một nền tảng nhưng họ chưa bao giờ thực sự thành công ở bất kỳ đâu. Họ không thành công bởi vì họ không tạo ra các ứng dụng hữu ích nhất cho người dùng cuối.
TechZen

4
@TechZen - Hiện tôi đang sử dụng StackOverflow trên trình duyệt web của mình và không thấy lý do gì để tìm kiếm một ứng dụng khách gốc. Tôi nghĩ rằng bạn đã khái quát hóa các tuyên bố của mình.
Youval Bronicki

4
Tôi khá khó chịu khi kiểu tranh luận triết học chủ quan này lại được đánh dấu chính xác trên một trang web kỹ thuật. Điều tồi tệ hơn, luận điểm của bài đăng này không hợp lệ đối với hầu hết các phần mềm chính mà chúng ta sử dụng ngày nay: Trình duyệt web đa nền tảng; Photoshop, MS Office, Dropbox và các thứ là đa nền tảng; chỉ cần mở menu Start hoặc Finder của bạn và liệt kê những người cụ thể của nền tảng - rất có thể bạn sẽ tìm thấy những tiện ích nhỏ. Lập luận của bạn sẽ có giá trị nếu bạn tin rằng điện thoại di động hoàn toàn khác (một giả định có giá trị cao), nhưng dường như không có lập luận nào để xây dựng nền tảng đó.
kizzx2

14

Có một số cách tiếp cận để phát triển đa nền tảng trên thiết bị di động. Tất nhiên chúng đều có giới hạn. Không có giải pháp nào quản lý để tận dụng tất cả các chức năng của thiết bị theo cách một ứng dụng gốc có thể.

Sử dụng lại mã

Mặc dù tất cả hệ điều hành di động không sử dụng cùng một ngôn ngữ phát triển và API, nhưng đôi khi bạn có thể chia sẻ một số lớp hoặc mã tầng logic.

Ví dụ: C ++ có thể được sử dụng lại cho ứng dụng iOS , cho ứng dụng Android bằng NDK , cho ứng dụng Symbian vì chúng được phát triển bằng C ++, v.v.

Một số giải pháp cũng cung cấp khả năng viết ứng dụng bằng ngôn ngữ khác với ngôn ngữ mà thiết bị thường sử dụng. Cái nổi tiếng nhất (trên thực tế là cái duy nhất tôi biết) là thương mại và dựa trên dự án Mono (phát triển C #):

Nhưng tôi không chắc chúng ta thực sự có thể gọi đây là sự phát triển đa nền tảng vì việc sử dụng lại mã bị hạn chế tùy thuộc vào thiết bị:

  • Windows Phone 7 sẽ không cho phép phát triển mã gốc (có thể trong các bản cập nhật tiếp theo)
  • AFAIK mono like project không tồn tại cho tất cả các nền tảng (chưa?) Bada, webOS, maemo, v.v.

Và phần giao diện người dùng cũng vẫn dành riêng cho từng thiết bị.

phát triển web

Câu trả lời thường xuyên khi hỏi về phát triển đa nền tảng cho điện thoại di động là phát triển web. Sau đó, chúng tôi sẽ cần một trình bao bọc, sẽ sử dụng trình duyệt di động, để làm cho nó trông và hoạt động giống như một ứng dụng gốc. Đó là cách một số khuôn khổ đa nền tảng mà chúng ta sẽ thấy rõ hơn về công việc.

Sự nổi lên của HTML5 mang đến các chức năng phát triển web chỉ có thể được thực hiện với một ứng dụng gốc như định vị địa lý, ứng dụng ngoại tuyến, lưu trữ cục bộ.

Chúng tôi có thể tìm thấy ngày càng nhiều khuôn khổ để phát triển ứng dụng web cho điện thoại di động với giao diện nguyên bản bằng cách tận dụng các tiêu chuẩn web mới nhất HTML5, CSS3, Js:

Nhưng HTML5 vẫn còn rất non trẻ và việc triển khai có thể khác nhau giữa các trình duyệt. Hầu hết các trình duyệt di động mặc định sử dụng công cụ WebKit (ngoại lệ chính là Windows mobile / phone sử dụng Internet Explorer) và thậm chí vì vậy chúng không nhất thiết phải hỗ trợ các chức năng giống nhau . Cơ sở dữ liệu cục bộ vẫn còn lúng túng khi làm việc và chúng tôi không thể chắc chắn nó sẽ được triển khai như thế nào bởi các trình duyệt khác nhau. Hơn nữa, ngay cả với HTML5, việc phát triển web vẫn còn rất hạn chế so với một ứng dụng gốc. Bạn không thể truy cập danh bạ, máy ảnh, gia tốc kế, v.v.

Chỉnh sửa: Đầu tháng này, W3C đã đưa ra một số cảnh báo về sự phát triển của HTML5: Bài báo từ ZDNet

Vì vậy, nó sẽ chỉ phù hợp với một danh mục ứng dụng hạn chế.

Các khuôn khổ đa nền tảng

Và chúng tôi có các khung ứng dụng di động đa nền tảng. Với đó bạn có thể phát triển một lần và triển khai trên các nền tảng khác nhau. Các giải pháp này thường tập trung vào iOS và Android và dựa trên công cụ WebKit. Họ cung cấp nhiều tương tác hơn với các chức năng của điện thoại trong khi phát triển với công nghệ web. Nổi tiếng nhất là Nitobi PhoneGap, RhoMobile Rhodes, Appcelerator Titanium. Nhưng nhiều người khác không có sẵn và không phải tất cả đều sử dụng cùng một kỹ thuật như MoSync để dịch mã của bạn sang ngôn ngữ trung gian của riêng nó trước khi biên dịch nó cho nền tảng mong muốn.

[1] Hãy nhớ rằng Apple có chính sách đặc biệt về các ứng dụng được viết cho nền tảng của họ. Họ dường như không chặn các ứng dụng này vào ngày này nhưng đó là một thông tin cần được lưu ý. Chỉnh sửa: Apple đã thay đổi chính sách này kể từ ngày 9 tháng 9.


6

Bạn nhận được một số điểm chung khi triển khai dưới dạng ứng dụng web (html5 như đã đề cập ở trên) nhưng đối với các ứng dụng gốc phong phú, các API hoàn toàn khác nhau đối với các điện thoại thông minh khác nhau.

HTML5 có thể cải thiện phần nào mọi thứ nhưng để làm được những điều thú vị, bạn cần phải trở thành bản gốc.

Có những framework dành cho điện thoại thông minh 'đa nền tảng' chẳng hạn như Phonegap nhưng tôi hầu hết đã nghe những điều tồi tệ về việc sử dụng nó cho công việc "thực tế". (rất nhiều chi phí, v.v.)


5

Vâng, html5 đang được một số người chú ý. Bạn cũng nên xem xét tổ hợp & nền tảng này sẽ ra mắt vào Q4. Không chắc về sự thành công của dự án đó, vì nó nghe có vẻ là một thách thức lớn, nhưng đây là chi tiết:

Trang web: http://www.wholesaleappcommunity.com/default.aspx

Tin tức: http://news.google.de/news/search?aq=f&pz=1&cf=all&ned=us&hl=vi&q=%22Bán sỉ+Application+Community%22

WAC đặt mục tiêu xuất bản thông số kỹ thuật ban đầu và các thành phần của SDK cho các nhà phát triển vào tháng 11. Đặc điểm kỹ thuật này sẽ dựa trên tiêu chuẩn W3C và tạo ra một nền tảng mạnh mẽ để phát triển các ứng dụng web di động phong phú. WAC cũng sẽ cung cấp khả năng tương thích ngược cho các thiết bị dựa trên thông số kỹ thuật JIL và BONDI hiện tại. ( http://www.convergedigest.com/Bandwidth/newnetworksarticle.asp?ID=31021 )

.

Đây là một liên minh quốc tế bao gồm khoảng 25 công ty viễn thông nhằm tạo ra một nền tảng mở cho tất cả các nhà phát triển và bán cho tất cả người dùng điện thoại di động. ( http://www.downloadsquad.com/2010/02/15/atandt-whoyan-appilities-community-is-a-platform-not-an-app/ )


1

Theo như tôi biết hầu hết các thiết bị đó có thể chạy điều này:

Java ME - Nền tảng ứng dụng phổ biến nhất dành cho thiết bị di động

Tôi nghĩ điều này có thể là một ví dụ tốt và xấu.


Trên thực tế, không có java trên iPhone, và như xa như tôi biết, java tôi không chạy trên android
Alaa Nassef


Tôi không biết chi tiết, nhưng Avian JVM cho phép java chạy trên thiết bị iOS.
Quazi Irfan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.