2013-04-12 32 views
5

Tôi là một nhà phát triển .NET (hơn 6 năm nay) và chỉ mới bắt đầu tìm hiểu về phát triển điện thoại di động/điện thoại thông minh/máy tính bảng. Một cách hợp lý, tôi (và có lẽ tất cả mọi người khác ngoài kia) muốn ứng dụng chúng tôi tạo ra để chạy trên tất cả các nền tảng điện thoại thông minh. Nó chỉ cảm thấy tự nhiên từ quan điểm người dùng bình thường (layman) rằng nếu đó là một "ứng dụng di động" nó sẽ chạy trên thiết bị di động. Nó không quan trọng nếu tôi sở hữu iPhone hoặc Android, ứng dụng dành cho thiết bị di động là ứng dụng dành cho thiết bị di động. Lưu ý: Tôi đang nói về phát triển nền tảng gốc, không phải HTML/ứng dụng web có thể được sử dụng từ trình duyệt.Phát triển di động đa nền tảng được thực hiện như thế nào trong thực tế hiện nay (năm 2013)?

Vì vậy, đây chỉ là câu hỏi tổng quan cấp cao ... các chiến lược hiện tại (trong năm 2013) là gì để giải quyết vấn đề này? Cách tôi tưởng tượng các công trình phát triển nền tảng di động có thể là một cơ sở mã duy nhất phổ biến thực hiện logic nghiệp vụ của ứng dụng và sau đó cho mỗi nền tảng nhắm mục tiêu, chúng ta cần phát triển phần GUI riêng biệt. Làm thế nào đến nay là từ sự thật trong thực tế?

Lấy ví dụ trò chơi phổ biến "Angry Birds". Tôi đã chơi trên iPhone, Android và thậm chí từ trình duyệt Chrome trên Windows Desktop (có thể là trò chơi Flash hoặc HTML5) và mỗi phiên bản có cảm giác giống hệt nhau khi chơi. Họ đã làm như thế nào? Tôi tưởng tượng họ có công cụ trò chơi như mã thông thường nhưng trong ngôn ngữ nào nó có thể được viết? Theo như tôi biết không có ngôn ngữ lập trình phổ biến cho các tệp mã nguồn duy nhất, nó có thể được biên dịch thành các tệp nhị phân gốc cho điện thoại ios/android/win8.

Trả lời

6

Thật không may, không có cách nào để phát triển một ứng dụng đa nền tảng có giao diện thực sự và chia sẻ mã giống nhau cho tất cả các nền tảng. Có thể chia sẻ một số mã trên một số nền tảng (ví dụ: bạn có thể sử dụng C/C++ cho iOS và Android), nhưng chỉ cho phần logic của ứng dụng của bạn. Để có giao diện người dùng gốc, bạn sẽ bị buộc phải sử dụng các API gốc. Nếu ứng dụng của bạn không liên quan đến một số xử lý dữ liệu phức tạp thì phương pháp này có thể có nhiều nhược điểm hơn là thực sự giúp bạn.

Bạn có thể có nền tảng độc lập khá tốt với nền tảng ứng dụng hỗn hợp như PhoneGap hoặc Titanium, nhưng liên quan đến phát triển HTML/Javascript, có thể dẫn đến rất nhiều thời gian và nỗ lực để mang lại trải nghiệm người dùng tương tự như ứng dụng gốc.

+0

Đồng ý với các điều trên. Tôi nghĩ PhoneGap có ý nghĩa hơn trong những ngày đầu của sự phát triển iOS, khi không có nhiều người bên ngoài Apple, những người thông thạo mục tiêu C, nhưng có rất nhiều người biết công nghệ web. Bây giờ, Obj-C là một trong 10 ngôn ngữ lập trình hàng đầu và có rất nhiều nhà phát triển bản địa tài năng. Tôi đã nghiên cứu sử dụng nó để mở rộng khả năng của mình vào Android, nhưng kết luận rằng nó có ý nghĩa hơn để tìm hiểu rằng SDK hoặc hợp đồng phụ. –

+0

Tôi sẽ không viết tắt PhoneGap do những lý do được liệt kê. Trong thực tế, phần lớn các thay đổi giao diện người dùng của bạn có thể có bằng cách sử dụng một tệp CSS khác cho từng thiết bị hoặc bạn luôn có thể ít quan tâm hơn đến việc tìm kiếm 100% gốc. Các nút sẽ trông giống như một nút mặc định xuất hiện trong trình duyệt ... như các phần tử khác. Cả hai tùy chọn được liệt kê trong câu trả lời của tôi có thể dễ dàng thích nghi với bất kỳ nền tảng nào được hỗ trợ bằng cách thay đổi chỉ các lớp giao diện người dùng (CSS cho phonegap và một dự án giao diện người dùng cho Xamarin). Lý do của tôi bỏ qua phonegap sẽ là hiệu suất ... không xuất hiện. – Jared

+0

Tôi không nói rằng họ nên tránh PhoneGap hoặc tương tự. Trên thực tế, nó có thể là một giải pháp tuyệt vời để triển khai một ứng dụng cho tất cả các nền tảng chính một cách nhanh chóng và sau đó (nếu cần) di chuyển sang giao diện người dùng gốc từng bước. Điểm của câu trả lời của tôi là không có viên đạn bạc. Có một số cách để đi, nhưng tất cả đều có nhược điểm của họ. – Const

3

Vì bạn là một .NET Dev, một giải pháp hợp lý cho bạn sẽ sử dụng các dịch vụ của Xamarin. (http://xamarin.com/) Chúng cho phép bạn phát triển logic back-end của bạn một lần và sau đó biên dịch nó thành cả ba nền tảng di động chính (iPhone/Android/WP). Sau đó bạn có thể sử dụng dự án logic back-end này để viết lớp giao diện người dùng cho từng nền tảng cụ thể.

Một tùy chọn khác mà nhà phát triển có là sử dụng tuyến đường javascript/html tương tự như PhoneGap. Trong khi tôi đã không nhìn vào điều này gần đây có sử dụng được một số số lần truy cập hiệu suất và khoảng trống khả năng sử dụng phần cứng khi đi các tuyến đường JS/HTML. Điều này có thể đã được cải thiện ngay bây giờ.

EDIT: Vì bạn đã đề cập cụ thể các trò chơi như Angry Birds. Nền tảng Unity cung cấp hỗ trợ rất tốt cho sự phát triển tương thích với hầu hết các thiết bị nếu bạn cần 3D.

Đối với Angry Birds cụ thể ... chúng sử dụng Box2D cho Vật lý và tôi không phải là 100%, nhưng có vẻ như Cocos2d vẽ các phần tử.

Nếu bạn đang tìm cách xây dựng trò chơi và thích ý tưởng của Xamarin thì hãy xem MonoGame về cơ bản trông giống như một cổng XNA đến Khung Mono.

2

ngoài câu trả lời của Jared, chiều nay tôi đã thử nghiệm Xamarin.

Bạn là a.Net Developer và nếu bạn đang sử dụng Visual Studio, bạn thật may mắn. Bởi vì Xamarin có extension for Visual Studio

Tôi chỉ muốn tạo ấn tượng xấu về xamarin, bạn có thể thử nghiệm tốt vào thời điểm đó, giao diện người dùng được tạo trong tệp dựa trên xml và không có tự động hoàn chỉnh, vì vậy bạn phải viết toàn bộ mã hoặc cửa sổ thuộc tính sử dụng. Nhưng tôi nghĩ nó sẽ tốt hơn vào thời điểm đó. mã hóa tốt đẹp

+0

Thực ra, tất cả các nền tảng đều có trình chỉnh sửa trực quan miễn phí cho giao diện người dùng. Bạn có thể cần phải tinh chỉnh XML, nhưng không có một nền tảng duy nhất (mà Xamarin hỗ trợ) mà YÊU CẦU bạn phải chạm vào XML. Windows Phone = Expression Blend (Biểu hiện sẽ biến mất tại một số điểm)/Android có một vài tùy chọn, nhưng một là DroidDraw/iPhone đây là một phần của XCode? (không nhớ tên chính xác, nhưng bạn tải nó xuống như một phần của giấy phép iOS/dev kit) – Jared

+1

Tôi nghĩ rằng có một sự hiểu lầm ở đây. Tôi chỉ muốn nói nó là một điểm cộng cho Xamarin có Visual Studio. Sau đó, nếu bạn kiểm tra trang nguồn thành phần, có một cú pháp dựa trên xml và tôi đã không truy cập tự động hoàn thành. Tôi không nói về tập tin xml riêng biệt. –

Các vấn đề liên quan