2015-01-17 13 views
20

Sau khi đọc một số câu hỏi trên Q, tôi nhận ra rằng một trong hai tùy chọn có nghĩa là QPython và Kivy để lập trình cho Android, tuy nhiên, cả hai đều có cách tiếp cận khác nhau. Tôi đang cố gắng xác thực sự hiểu biết của mình và xem liệu tôi có thiếu một số thông tin quan trọng hay không.QPython hoặc Kivy để lập trình Android với Python - tạo ra các gói ứng dụng có thể cài đặt

  • QPython cho phép sử dụng của thư viện Kivy cho việc phát triển các ứng dụng đồ họa
  • QPython và Kivy đều sử dụng SL4A, trong khi QPython đã mở rộng SL4A tiêu chuẩn (hoặc nó bindings cho Python) bằng cách thêm một số NFC và chức năng tương tự
  • QPython được sử dụng để tạo các tập lệnh python có thể sử dụng nhiều loại mô-đun, thư viện, nhưng chúng cần cài đặt QPython trên thiết bị đích. Không có cách nào để gói tập lệnh vào một gói ứng dụng.
  • Kivy OTOH, cho phép nhà phát triển viết ứng dụng biên dịch sang apk, sử dụng hệ thống xây dựng dựa trên đám mây của họ (hệ thống xây dựng thay thế cục bộ có thể được thiết lập trên Ubuntu Linux) [Tuy nhiên, tôi nhận thấy rằng hầu hết các gói ứng dụng mẫu Kivy là khá lớn, trong phạm vi 40MB. Tôi đã bỏ lỡ bất cứ điều gì?]
  • Gói ứng dụng QPython có 2 phiên bản, ví dụ: phiên bản Python-2.7 và phiên bản khác cho Python-3.x. Đối với Kivy, tôi không chắc phiên bản đó là gì.
  • Kịch bản mẫu QPython (HelloWorld.py) dường như không hoạt động như mong đợi, từ QPython-3.x mới nhất từ ​​Market, trên hệ thống Android Kitkat (4.4.2). Tôi nhận được hộp thoại để nhập văn bản, nhưng sau đó tôi mong đợi một Toast để bật lên, nhưng không có gì xảy ra.
  • Nhận ấn tượng rằng cả QPython và Kivy đều được phát triển bởi một nhà phát triển duy nhất mỗi (hoặc chỉ một người thực sự hoạt động hiện tại), và chưa có một cộng đồng lớn. [Đây là mối quan tâm lớn nhất của tôi] Tôi nhận thấy rằng có 3-4 câu hỏi với thẻ 'qpython' trên SO và hơn nghìn câu hỏi với 'kivy'!
  • Cũng nhận được ấn tượng rằng tại thời điểm này Kivy phát triển là phần nào hoạt động hơn (có lẽ khá tích cực), nhưng đối với QPython tôi không có một hình ảnh rõ ràng.
  • Kivy dường như đang cố gắng mở rộng bản chất của ứng dụng có thể được viết bằng cách sử dụng nó, so sánh với QPython. Có API giống như plyerpyjnius giúp mở rộng khả năng. Có lẽ khá đáng kể, so với QPython.
  • Cả QPython và Kivy dường như đang phát triển mạnh. Chương trình (/ script) treo (/ thất bại) dường như được báo cáo trên cả hai bộ công cụ.

Nhìn chung, ý kiến ​​kết quả (của các điểm trên) dường như xoay quanh lợi cho Kivy, nhiều hơn một chút. Sự hiểu biết có đúng không? Tôi có bỏ lỡ bất kỳ điểm quan trọng nào không? Đây không phải là một câu hỏi tu từ, và tôi chỉ tìm câu trả lời thực tế.

Trả lời

14

QPython cho phép sử dụng của thư viện Kivy cho việc phát triển các ứng dụng đồ họa

Vâng, qpython là một thông dịch viên + các công cụ liên quan, và có một số hội nhập kivy tốt đẹp. Bạn không thể biên dịch mã kivy thành một gói độc lập với qpython + android một mình.

QPython và Kivy đều sử dụng SL4A, trong khi QPython đã mở rộng SL4A tiêu chuẩn (hoặc nó bindings cho Python) bằng cách thêm một số NFC và chức năng tương tự

Kivy không sử dụng SL4A. Chúng tôi đạt được tích hợp api android chủ yếu thông qua pyjnius, một thư viện để tự động gói các lớp java với python, cho phép bạn gọi trực tiếp java api. Chúng tôi cũng đã tóm tắt một số điều tiêu chuẩn cho một giao diện pythonic với plyer.

(tôi thấy sau đó bạn đã đã tìm thấy những)

QPython được sử dụng để tạo ra các kịch bản python có thể sử dụng hàng loạt các mô-đun, thư viện, nhưng họ cần QPython cài đặt được thực hiện trên thiết bị mục tiêu. Không có cách nào để gói tập lệnh vào một gói ứng dụng.

Tôi không sử dụng qpython nhiều, nhưng tôi nghĩ điều này là đúng, mặc dù có thể có một số công cụ chuyển tập lệnh thành apks trong một số trường hợp (ví dụ: bạn có thể sử dụng công cụ xây dựng của kivy nếu bạn có giao diện kivy, hoặc có lẽ sl4a có một cái gì đó cho điều này).

Kivy OTOH, cho phép nhà phát triển viết các ứng dụng biên dịch cho apk, sử dụng điện toán đám mây dựa trên xây dựng hệ thống của họ (thay thế - Hệ thống xây dựng địa phương có thể được thiết lập trên Ubuntu Linux) [Tuy nhiên, tôi nhận thấy rằng hầu hết các nhân apk mẫu sử dụng Kivy khá lớn, trong phạm vi 40MB. Tôi có bỏ lỡ bất cứ điều gì không?]

Chúng tôi có một hệ thống xây dựng dựa trên đám mây cơ bản nhưng không có gì khác như bây giờ, hầu hết mọi người đều xây dựng apks trên máy của mình bằng cách sử dụng công cụ xây dựng của chúng tôi cho android. Chúng chạy trên Linux hoặc OSX, và có thể dễ dàng chạy trong một máy ảo nếu cần thiết.

Ứng dụng tối thiểu có kích thước APK khoảng 7MB do sự cần thiết phải gói trình thông dịch python và nhiều mô-đun.

Gói ứng dụng QPython có 2 phiên bản, ví dụ: một cho Python-2.7 và phiên bản khác cho Python-3.x. Đối với Kivy, tôi không chắc phiên bản đó là gì.

Bản thân Kivy hỗ trợ python3, nhưng công cụ xây dựng android của chúng tôi chỉ hỗ trợ python2.7 bây giờ.

Có ấn tượng rằng cả QPython và Kivy đều được phát triển bởi một nhà phát triển duy nhất (hoặc chỉ một người thực sự hoạt động hiện tại) và chưa có cộng đồng lớn. [Đây là mối quan tâm lớn nhất của tôi] Tôi nhận thấy rằng có 3-4 câu hỏi với thẻ 'qpython' trên SO, và hơn nghìn câu hỏi với 'kivy'!

Phát triển Kivy khá tích cực với một số cộng tác viên thường xuyên cộng với những người thường xuyên rời rạc. Bạn có thể xem ví dụ hoạt động cam kết gần đây on github. Nó chắc chắn là nhiều hơn một nhà phát triển duy nhất!

Kivy có vẻ đang cố gắng mở rộng bản chất của ứng dụng có thể được viết bằng cách sử dụng nó, so sánh với QPython. Có API như plyer và pyjnius giúp mở rộng khả năng. Có lẽ khá đáng kể, so với QPython.

Tôi nghĩ qpython bao gồm pyjnius.Không chắc chắn về plyer.

Cả QPython và Kivy dường như đang phát triển mạnh. Chương trình (/ script) treo (/ thất bại) dường như được báo cáo trên cả hai bộ công cụ.

Tôi không chắc chắn những gì bạn đang xem, nhưng bất kỳ dự án không tầm thường nào sẽ có lỗi/lỗi/lỗi được báo cáo. Tôi không nghĩ rằng kivy đặc biệt vốn không ổn định.

Nhìn chung, ý kiến ​​là kết quả (của các điểm trên) dường như có lợi cho Kivy, nhiều hơn một chút.

Tôi đã nói rằng qpython và kivy là những thứ khá khác nhau. Qpython cho phép bạn viết và chạy các tập lệnh, trong khi kivy là một khung công cụ đồ họa và các công cụ liên quan để tạo các ứng dụng độc lập. Có một số chồng chéo với các nhiệm vụ có thể đạt được với cả hai, nhưng cũng có rất nhiều thứ mà cả hai không phù hợp - ví dụ, tôi nghĩ qpython có lẽ thuận tiện hơn nhiều để tạo các kịch bản nhanh chóng mà không có gui cho ví dụ. tự động hóa đơn giản (tôi nghĩ rằng điều này là có thể), trong khi tôi nghĩ rằng kivy là một lựa chọn tốt hơn cho việc tạo ra các ứng dụng độc lập với guis không tầm thường. Tất nhiên bạn có thể viết mã kivy trong qpython, như đã thảo luận, nhưng đây không phải là trải nghiệm người dùng tuyệt vời cho bất kỳ thứ gì không tầm thường và bạn cần một máy tính để bàn/máy tính xách tay để tạo một gói độc lập.

+0

Cảm ơn phản hồi chi tiết. Hình ảnh rõ ràng là rõ ràng hơn bây giờ. Nếu không SL4A, tôi đoán cả QPython và Kivy đều sử dụng 'Python cho Android', mặc dù cho đến nay tôi không có nhiều manh mối về cái đó là gì, và nếu có thể là một cái tên khác cho SL4A? Tôi đã thấy lưu ý về hỗ trợ thương mại có sẵn trong tương lai, cho kivy. Có một ETA biết (thậm chí là ước tính sơ bộ)? Nó sẽ thay đổi việc cấp phép của kivy trong anyway? I E. đi giấy phép kép hoặc một cái gì đó tương tự? – icarus74

+0

Ngoài ra, câu trả lời về chủ đề môi trường xây dựng (chỉ dành cho đám mây), có nghĩa là hình ảnh Virtualbox dựng sẵn không hoạt động như mong đợi, ngay bây giờ không? – icarus74

+1

Hình ảnh hộp hình ảo sẽ hoạt động tốt, mặc dù hiện tại nó đã lỗi thời và có thể chúng tôi sẽ sớm cập nhật hình ảnh đó. – inclement

3

Có ít nhất hai hơn (mặc dù kiến ​​thức của tôi chỉ lý thuyết) cách để nhận được mã Python chạy trên Android:

  • Sử dụng và chuyển đổi bytecode Java để Dalvik, như đã đề cập elsewhere. Thật không may, không phải tất cả thư viện CPython, ví dụ: numpy, có sẵn cho jython và nếu bạn sử dụng các thư viện Java, hãy nhớ rằng Android không cung cấp những thứ tương tự như ví dụ: Máy tính để bàn JRE
  • Sử dụng , tạo mã C++ từ mã Python của bạn. Sau đó, sử dụng .
+1

Cảm ơn bạn đã trả lời Tobias. Đọc SO Q & A được liên kết, có vẻ như jython chỉ là một khả năng lý thuyết mà sau này được chứng minh là một cách tiếp cận gần như không thực tế. Trừ khi, tất nhiên, tôi đã bỏ lỡ một cái gì đó. Cảm ơn về tip-off trên Nuitka, nói chung. Không bao giờ biết rằng nó tồn tại, và nó là mạnh mẽ thú vị cho các tình huống mà hiệu suất quan trọng. – icarus74

+1

Tôi sẽ không gọi jython là một cách tiếp cận không thực tế, chỉ đơn thuần là một cách chưa được kiểm chứng (do đó có thể tẻ nhạt để làm việc) mà tôi dự định thay đổi vào một thời điểm nào đó trong tương lai không xa ... Liên quan đến tối ưu hóa hiệu suất cũng nên kiểm tra numpy (hoặc PyPy, Cython và có thể là Shedskin) –

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