2012-05-17 44 views
38

Tôi đang tìm kiếm các giải pháp thay thế để phát triển cho nhiều nền tảng di động và đã tìm thấy Codename One, sử dụng Java là lingua franca, thay vì HTML/CSS/JS hoặc ngôn ngữ kịch bản.Codename One hoạt động như thế nào?

Điều tôi không thể tìm thấy là nó hoạt động như thế nào. Nó có bao gồm một JVM với ứng dụng cho iOS và Win7, và sử dụng Dalvik trong Android không? Liệu nó có dịch mã nguồn sang nguồn gốc và chúng tôi có quyền truy cập vào mã nguồn này không? Có ma thuật nào khác, xem họ hứa hẹn "không thỏa hiệp"? Tôi nên biết những hạn chế nào khi mã hóa Java bất khả tri?

Cảnh cáo ưu tiên: đây là câu hỏi về Codename One, không về nền tảng nào tôi nên chọn hoặc nếu tôi nên xuất bản hoặc nếu tôi nên truy cập web.

Trả lời

66

Codename One sử dụng phương pháp dựa trên SaaS để điều này có thể (và có thể sẽ) thay đổi trong tương lai để phù hợp với kiến ​​trúc cải tiến. Chú ý rằng Codename One cũng cung cấp một tùy chọn cho build offline có nghĩa là các tập đoàn có chính sách cấm các kiến ​​trúc đám mây như vậy vẫn có thể sử dụng Codename One với một số chi phí/phức tạp bổ sung.

Hiện tại trên Android mã Java chuẩn được thực thi như hiện tại. Cú pháp Java 8 được dịch bằng cách sử dụng retrolambda cho tất cả các nền tảng khi nó được sử dụng. Điều này cho phép nó tương thích với tất cả các phiên bản Android cũng như các cổng khác.

Trên tên mã hóa iOS Một được xây dựng & nguồn mở ParparVM là một máy ảo rất bảo thủ. ParparVM có GC đồng thời (không chặn) và được viết hoàn toàn bằng Java/C. Điều này có nghĩa là một dự án xcode được tạo ra và biên dịch trên các máy chủ xây dựng để có hiệu quả như thể bạn đã mã hóa một ứng dụng gốc và do đó "bằng chứng trong tương lai" cho các thay đổi do Apple tạo ra. Ví dụ. với những thay đổi 64 bit và bitcode gần đây đối với iOS, ParparVM không cần sửa đổi để tuân thủ những thay đổi đó.

Trong quá khứ Codename One đã sử dụng XMLVM để tạo mã gốc theo cách rất giống nhau nhưng giải pháp XMLVM quá chung chung đối với các nhu cầu của Codename One.

Bản dựng iOS được biên dịch và ký trên máy Mac trong đám mây bằng cách sử dụng xcode (công cụ xây dựng chính thức của Apple). Điều này làm cho chúng tương thích với những thay đổi hiện tại/tương lai từ Apple và cho phép các nhà phát triển sử dụng Windows/Linux trong khi nhắm mục tiêu iOS. Bạn có thể đọc thêm về khả năng tương thích của ParparVM với iOS here.

Trong quá khứ Codename One đã hỗ trợ Windows Phone bằng trình dịch C# dựa trên XMLVM nhưng nó không phải là một cách tiếp cận lý tưởng. Lưu ý rằng backend XMLVM chuyển thành C# rất khác so với phần trước đã được sử dụng để dịch sang iOS. Codename One đã chọn discontinue that old backend vì nó không mạnh bằng phần phụ trợ UWP mới và không phù hợp với các mục tiêu của Microsofts di chuyển về phía trước và tập trung vào UWP (Universal Windows Platform).

Đối với Windows 10 máy tính để bàn và Hỗ trợ di động Codename One sử dụng iKVM đến target UWP (Universal Windows Platform) và đã mở nguồn gốc các thay đổi đối với mã iKVM ban đầu trong Codename One github repository.

ý rằng UWP xây dựng được thực hiện trên Windows 10 máy trong đám mây do đó cho phép các nhà phát triển để sử dụng Mac/Linux hoặc phiên bản cũ của Windows khi xây dựng các cửa sổ ứng dụng bản địa ...

xây dựng Javascript mục tiêu đó có sẵn trên người đăng ký cấp doanh nghiệp sử dụng TeaVM để thực hiện việc dịch tĩnh. TeaVM cung cấp hỗ trợ cho luồng bằng cách sử dụng JavaScript bằng cách phá vỡ ứng dụng theo một cách khá phức tạp.Để hỗ trợ UI Codename phức tạp, One sử dụng API HTML5 Canvas cho phép linh hoạt tuyệt đối để xây dựng các ứng dụng.

Để tạo máy tính để bàn, Codename One sử dụng javafxpackager, vì cả máy Mac và Windows đều có sẵn trên đám mây, nên tính chất nền tảng cụ thể của javafxpackager không phải là vấn đề.

Điều làm cho Codename One nổi bật là cách tiếp cận giao diện người dùng sử dụng kiến ​​trúc nhẹ để cho phép giao diện người dùng làm việc liên tục trên mọi nền tảng và được phát triển gần như hoàn toàn bằng Java. Nó được tăng cường bởi khả năng nhúng "nặng" widget vào vị trí trong số các "lightweights". Bạn có thể tìm hiểu thêm về điều này trong số blog post này. Lưu ý rằng tại thời điểm này peering is undergoing some improvements và bây giờ hỗ trợ các tập quán phức tạp hơn như phân lớp.

Thành phần nhẹ được viết hoàn toàn bằng Java, điều này cho phép nhà phát triển xem trước ứng dụng chính xác trong trình mô phỏng & Trình tạo GUI.

Codename One đạt được hiệu suất nhanh bằng cách vẽ bằng cách sử dụng API trò chơi gốc của hầu hết các nền tảng, ví dụ: OpenGL ES trên iOS.

Các công nghệ cốt lõi đằng sau Codename One là tất cả nguồn mở, bao gồm hầu hết các nội dung được phát triển bởi Codename One, ví dụ: ParparVM nhưng cũng là full library, platform ports, designer tool, device skins v.v. Bạn có thể tìm hiểu thêm về cách sử dụng các nguồn Codename One here.

FYI Shai Almog, tác giả của câu trả lời này, là Giám đốc điều hành của Codename One.

+3

Cảm ơn sự quan tâm của bạn, Shai! Tôi nghĩ rằng bạn nên đặt nó trong FAQ của bạn, chúng tôi biết không có ma thuật _real_ xảy ra và muốn biết làm thế nào các phép thuật _perceived_ hoạt động. Tôi có thể sẽ thử nó trong giai đoạn đánh giá! –

+4

Không có giai đoạn đánh giá cho Codename One, ý định của chúng tôi là luôn có tùy chọn miễn phí hợp lý cho các nhà phát triển không có chuỗi đính kèm. Vì sản phẩm là nguồn mở, điều quan trọng là chúng ta phải mang theo một số quyền tự do đó vào các dịch vụ SaaS. –

+0

Xin lỗi, tôi đã thể hiện sai: P Tôi hiện chỉ đang tìm kiếm các giải pháp thay thế, sau đó chúng tôi sẽ có một giai đoạn đánh giá, để xem cách các công nghệ đáp ứng nhu cầu của chúng tôi. –

8

Tên mã một cách tiếp cận rất cân bằng với tính di động. Tôi muốn thêm một bình luận thực dụng.

Từ phía giao diện người dùng, CN1 vẽ tất cả giao diện người dùng của nó trên canvas được nền tảng cung cấp. Nó cố gắng bắt chước giao diện của nền tảng bản địa, nếu bạn chọn nó, nhưng có nhiều thành công như Swing có "giao diện nền tảng tự nhiên" của nó, bởi vì nền tảng gốc liên tục thay đổi, và "native l & f" luôn thiếu sót và trong hầu hết các trường hợp, cảm thấy không hoàn toàn đúng.

Tuy nhiên, nếu bạn chọn giao diện độc lập nền tảng (đó là loại xu hướng hiện nay), bạn không bị hạn chế bởi bộ thành phần mặc định của Codenameone theo bất kỳ cách nào: nó giống như Swing với giao diện nền tảng của nó và cảm nhận ("Kim loại" vv). Cái nào tốt.

Từ phía ngôn ngữ: trên iOS, java được biên dịch thành C, sau đó được gắn với Objective-C viết tay và không bó VM, chỉ lớp di động. Điều quan trọng nhất ở đây là thực tế là java được biên dịch thành C và không phải Objective-C, mà làm cho nó nhanh hơn sau đó mã Objective-C thành ngữ, vì nó thực hiện ảo hoặc thường xuyên hơn, gọi phương thức trực tiếp thay vì gửi thông điệp Objective C chậm. Cái nào tốt.

Nó cũng có thể có vẻ nhanh hơn một chút trên Android, bởi vì, trong khi sử dụng Dalvik/Art, nó không sử dụng giao diện người dùng gốc của Android mà cồng kềnh so với CN1. Điều này có thể làm cho việc tạo UI động nhanh hơn trong thời gian chạy, điều này là tốt.

Một trong những điểm mạnh nhất của phương pháp CN1 là trình giả lập của nó (được triển khai trên canvas JavaFX trên máy tính để bàn) mà bạn sử dụng để phát triển phần mềm. Trình giả lập sử dụng cùng một mã giao diện người dùng và các API di động như trên các nền tảng di động và cho phép bạn sử dụng IDE để chọn gỡ lỗi. Nó khởi động lại một cách nhanh chóng và chu trình biên dịch chạy rất bền vững so với Android. Cái nào tốt.

Điểm mạnh thứ hai (chính là điểm mạnh!) là bản chất mở của thư viện giao diện người dùng của họ, tất cả mã nguồn gốc và dịch giả bytecode-to-C. Nếu bạn dành chút nỗ lực, bạn có thể tránh việc xây dựng các cổng Android/iOS trên trang trại của họ và tự tháo gỡ bản thân khỏi bản sửa đổi sản phẩm cụ thể của họ (nhưng không phải từ một số dịch vụ giá trị gia tăng mà họ cung cấp, vốn không phải là nguồn mở!). Tùy thuộc vào tình hình của bạn, điều này có thể (hoặc có thể không!) Khá tốt cho bạn!

Điểm yếu của Codenameone là độ chín ít lý tưởng, có nghĩa là bạn có thể dễ dàng chụp chân bằng các thành phần UI cơ bản, nếu bạn sử dụng chúng theo cách mà chúng không được sử dụng. Ngoài ra nó có nghĩa là lớp java portability của nó không đủ lớn (và có lỗ hổng trong nó) để đáp ứng nhu cầu của mọi người, và bạn có thể phải sử dụng bản địa ở một số nơi, và cổng các thư viện java thuần túy khác.

Ngoài ra, trạng thái hiện tại của hiệu suất đồ họa là không tối ưu; nếu bạn nhận được bó văn bản trên màn hình, bạn sẽ dễ dàng bỏ lỡ 16msec hoạt ảnh/thời gian quét lại, điều này có thể được thực hiện xung quanh bằng cách đệm đôi, nhưng nó cũng có giới hạn của nó. May mắn thay, vẫn còn chỗ để tối ưu hóa việc triển khai trên cả hai nền tảng chính, hy vọng họ sẽ cải thiện nó.

Nhìn chung, Codenameone có khả năng thích hợp tốt như một khung công tác đa nền tảng cho một số lớp ứng dụng; bạn cũng có thể tìm thấy giá trị trong dịch vụ của họ.

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