Câu hỏi Có cách nào để chạy Python trên Android không? [đã đóng]


Chúng tôi đang làm việc trên một S60 phiên bản và nền tảng này có một API Python tốt đẹp.

Tuy nhiên, không có gì chính thức về Python trên Android, nhưng kể từ đó Jython tồn tại, có cách nào để con rắn và robot làm việc cùng nhau không?


1892
2017-09-19 13:21


gốc


Hãy thử nghiệm lý thuyết của Joel về khả năng cập nhật các bài viết SO được xếp hạng tốt trên google. Xem dưới đây hoặc điều này: google-opensource.blogspot.com/2009/06/… - unmounted
Ý tôi là ngược lại. Với nội dung nhỏ của bài đăng này, nếu nó được xếp hạng tốt, nó phải là một kỳ vọng rất lớn. Tôi mạnh mẽ hy vọng điều tốt nhất cho dự án này, bản thân tôi là một pythonista hơn là một anh chàng Java và mã hóa Android với ngôn ngữ này sẽ là bầu trời rock giai đoạn tạo mẫu. - e-satis
Oh, phải ... Tôi không nghĩ rằng việc cập nhật câu hỏi là hữu ích, nhưng việc thay đổi người trả lời được chấp nhận chắc chắn là vậy. - e-satis
@ e-satis bạn đúng. Tôi mới đến python và kỹ thuật của nó, Im được sử dụng để biên dịch ngôn ngữ C / C ++. Nhưng vẫn còn một máy ảo bên trong một máy ảo sẽ không phải là thứ nhanh nhất từ ​​trước đến giờ, và có lẽ có thể cạnh tranh để làm cách nào để chạy mã chậm nhất. Để chắc chắn nó có tiện ích của nó. Tôi không ghét Python và Android, nhưng ... - user457015
@ user457015 Tôi nghĩ bạn nên thực sự đọc về cách các JVM hiện đại được triển khai, chúng nơi nào gần để "viết kịch bản" hoặc "giải thích" bây giờ. Nếu bất cứ điều gì, Java bây giờ chỉ chậm hơn ~ 10-25% so với tốt / hoàn toàn bằng văn bản Mã C / C ++. Và có ít cách để viết lên bằng văn bản trong Java ... - TC1


Các câu trả lời:


Một cách là sử dụng Kivy:

Thư viện Python nguồn mở để phát triển nhanh các ứng dụng   sử dụng giao diện người dùng sáng tạo, chẳng hạn như ứng dụng đa chạm.

Kivy chạy trên Linux, Windows, OS X, Android và iOS. Bạn có thể chạy cùng một mã [python] trên tất cả các nền tảng được hỗ trợ.

Ứng dụng Kivy Showcase 


820
2017-11-18 21:49



Nếu bạn sử dụng Kivy, đây là công cụ giúp gói dự án của bạn thành APK: github.com/kivy/python-for-android - gdw2
@ e-satis đã làm Kivy làm việc cho bạn? nó có hữu ích không? Tôi sẽ thực sự biết ơn nếu bạn có thể đăng kinh nghiệm của bạn với Kivy trong câu hỏi :) - juliomalegria
Tôi đã chơi đùa với Kivy tuần vừa qua cố gắng viết một trò chơi. Các nhà phát triển chính của họ rất nhanh chóng trả lời các câu hỏi về IRC tuy nhiên nếu bạn đã lập trình một GUI trước khi Kivy sẽ khiến bạn nói WTF một chút. Một số widget nhận được mọi sự kiện on_touch_down ngay cả khi sự kiện xảy ra bên ngoài khu vực của họ, Không có widget nào có phương thức draw (), hầu như mọi thứ xảy ra thông qua một mẫu quan sát tùy chỉnh trên Thuộc tính tùy chỉnh mà chúng tạo ra ( lưu ý những chia sẻ tên với thuộc tính của Python, nhưng không giống nhau) - Trey Stout
Bây giờ, gần một năm sau, có hỗ trợ tốt hơn không? Ở đây có bất kỳ cải tiến đáng chú ý nào không? - TankorSmash
Và một năm nữa, google chết tiệt, với tất cả những con trăn họ có vẻ thích với các trang web, không có tình yêu cho python trong Android. - Dexter


Cũng có cái mới Môi trường kịch bản Android (ASE / SL4A) dự án. Nó trông tuyệt vời, và nó có một số tích hợp với các thành phần Android bản địa.

Lưu ý: không còn trong "hoạt động phát triển", nhưng một số dĩa có thể được.


303
2018-06-10 05:24



Đúng, nhưng họ phải có ASE cài đặt, nó không phải là một giải pháp cho phép bạn viết một ứng dụng Android trong python mà không có bất cứ điều gì đã được cài đặt (người dùng bình thường sẽ là tất cả "wtf là điều ASE này?) - Stuart Axon
Hơn nữa, ASE là một môi trường bị hạn chế; bạn không thể viết các ứng dụng Android đầy đủ ngay cả khi ASE được cài đặt sẵn. Xem stackoverflow.com/questions/2076381 - Sridhar Ratnakumar
Tôi nghĩ rằng nó đã được đổi tên thành SL4A. - Vanuan
Bạn có thể viết ứng dụng, đóng gói chúng và thậm chí bán chúng trên Cửa hàng Play nếu bạn thích, với SL4A hiện nay. Nó đến cùng từ khi các bình luận ở trên được đăng tải. Nếu bạn muốn Python trên Android, thì PY4A, chạy trên SL4A có lẽ là lựa chọn tốt nhất. - Carl Smith
Tôi xác nhận, SL4A bây giờ cho phép viết các gói ứng dụng sẵn sàng để sử dụng, tôi đã thử với perl nó hoạt động - ubugnu


VÂNG!

Một ví dụ qua Matt Cutts qua SL4A - "đây là máy quét mã vạch được viết bằng sáu dòng mã Python:

import android
droid = android.Android()
code = droid.scanBarcode()
isbn = int(code['result']['SCAN_RESULT'])
url = "http://books.google.com?q=%d" % isbn
droid.startActivity('android.intent.action.VIEW', url)

180
2018-06-10 05:13



s / CÓ / meh. có lẽ / ... nó rất hạn chế. bất cứ điều gì đồ họa hoặc đa cảm ứng? một NO lớn. - gcb
@ gcb bạn không thể sử dụng tập hợp widget android bình thường, nhưng bạn có thể sử dụng "webviews" (ví dụ như ứng dụng gmail gốc). - gdw2
chơi golf: import android as a;d=a.Android();d.startActivity('android.intent.action.VIEW',"http://books.google.com?q=%d"%int(d.scanBarcode()['result']['SCAN_RESULT'])) - Alex L
@ gdw2, chắc chắn ứng dụng Gmail gốc chỉ sử dụng WebViews để phân tích email mặc dù không phải cho giao diện người dùng thực tế. Điều đó làm cho so sánh một chút ngớ ngẩn. - Veselin Romić


Cũng có SL4A được viết bởi các nhân viên của Google.


73
2018-05-26 09:21





"Các Tập hợp Pygame cho Android là một cổng của một tập con của chức năng Pygame cho nền tảng Android. Mục tiêu của dự án là cho phép tạo ra các trò chơi dành riêng cho Android và dễ dàng chuyển các trò chơi từ các nền tảng giống như máy tính sang Android. "

Các ví dụ bao gồm một trò chơi hoàn chỉnh được đóng gói trong một APK, khá thú vị.


71
2018-01-28 12:18



Một số khía cạnh đã bị hỏng trên Droid X của tôi (nút, hoặc màn hình cảm ứng, không thể nhớ), vì vậy tôi đã không nhận được rất xa với tuyến đường này. - gdw2


Tôi đã đăng các hướng dẫn và một bản vá cho việc biên dịch chéo Python 2.7.2 cho Android, bạn có thể tải nó tại blog của tôi ở đây: http://mdqinc.com/blog/2011/09/cross-compiling-python-for-android/

EDIT: Tôi đã mở nguồn Ignifuga, Công cụ trò chơi 2D của tôi, nó dựa trên Python / SDL và nó biên dịch chéo cho Android. Ngay cả khi bạn không sử dụng nó cho các trò chơi, bạn có thể nhận được những ý tưởng hữu ích từ mã và tiện ích trình xây dựng (có tên là Schafer, sau Tim ... bạn biết ai).


63
2017-10-12 13:49



Ấn tượng. 1 cho điều này. Không được chấp nhận bởi vì bạn không thể viết bất cứ điều gì cho công chúng với điều này. - e-satis
Nếu bạn có nghĩa là bạn không thể làm các ứng dụng đồ họa với nó, bạn chắc chắn nhất có thể, tất nhiên, nhiều công việc là cần thiết. Tôi thực sự sử dụng cổng này kết hợp với SDL 1.3, nó không tầm thường để đi từ trình thông dịch python đến một ứng dụng tương tác, nhưng nó có thể được thực hiện. - gabomdq


Lớp tập lệnh cho Android

SL4A làm những gì bạn muốn. Bạn có thể dễ dàng cài đặt nó trực tiếp vào thiết bị của bạn từ trang web của họ, và không cần root.

Nó hỗ trợ một loạt các ngôn ngữ. Python là người trưởng thành nhất. Theo mặc định, nó sử dụng Python 2.6, nhưng có một 3.2 cổng bạn có thể sử dụng thay thế. Tôi đã sử dụng cổng đó cho tất cả mọi thứ trên Galaxy S2 và nó hoạt động tốt.

API

SL4A cung cấp một cổng của họ android thư viện cho từng ngôn ngữ được hỗ trợ. Thư viện cung cấp giao diện cho API Android cơ bản thông qua một Android vật.

from android import Android

droid = Android()
droid.ttsSpeak('hello world') # example using the text to speech facade

Mỗi ngôn ngữ có cùng một API. Thậm chí bạn có thể sử dụng API JavaScript bên trong các bản xem trước web.

let droid = new Android();
droid.ttsSpeak("hello from js");

Giao diện người dùng

Đối với giao diện người dùng, bạn có ba tùy chọn:

  • Bạn có thể dễ dàng sử dụng các hộp thoại và menu chung chung, thông qua API. Điều này là tốt cho các cuộc đối thoại xác nhận và các đầu vào cơ bản khác của người dùng.
  • Bạn cũng có thể mở một webview từ bên trong một kịch bản Python, sau đó sử dụng HTML5 cho giao diện người dùng. Khi bạn sử dụng webviews từ Python, bạn có thể vượt qua thông điệp qua lại giữa trình duyệt web và quá trình Python sinh ra nó. Giao diện người dùng sẽ không có nguồn gốc, nhưng nó vẫn là một lựa chọn tốt để có.
  • một số hỗ trợ cho giao diện người dùng Android bản địa, nhưng tôi không chắc chắn nó hoạt động ra sao; Tôi chưa bao giờ sử dụng nó.

Bạn có thể kết hợp các tùy chọn, vì vậy bạn có thể có một webview cho giao diện chính, và vẫn sử dụng các đối thoại bản địa.

QPython

Có một dự án của bên thứ ba có tên QPython. Nó xây dựng trên SL4A và ném vào một số nội dung hữu ích khác.

QPython cung cấp cho bạn giao diện người dùng đẹp hơn để quản lý cài đặt của bạn và bao gồm một trình soạn thảo mã màn hình cảm ứng nhỏ, một trình bao Python và một trình bao PIP để quản lý gói. Họ cũng có một cổng Python 3. Cả hai phiên bản đều có sẵn trên Cửa hàng Play, miễn phí. QPython cũng gộp các thư viện từ một nhóm Python trên các dự án Android, bao gồm Kivy, vì vậy nó không chỉ là SL4A.

Lưu ý rằng QPython vẫn phát triển ngã ba của SL4A (mặc dù, không nhiều để được trung thực). Bản thân dự án SL4A chính là khá nhiều người chết.

Liên kết hữu ích


57
2018-03-19 15:45



Bạn có thể sử dụng bất kỳ của những người để chạy kịch bản python từ thiết bị đầu cuối hoặc nhiệm vụ? Tôi không thể tìm thấy một cách :( - Pitto
Bạn có thể khởi chạy một tập lệnh SL4A từ Tasker. Có một số ví dụ về trang này có đoạn mã của Python được khởi chạy từ Tasker. Nó thực sự là một câu hỏi hoàn toàn khác nhau. - Carl Smith


Như một Python người yêu và lập trình Android, tôi buồn khi nói điều này không thực sự là một cách tốt để đi. Có hai vấn đề.

Một vấn đề là có nhiều thứ hơn là một ngôn ngữ lập trình cho các công cụ phát triển Android. Rất nhiều đồ họa Android liên quan đến các tệp XML để định cấu hình hiển thị, tương tự như HTML. Các đối tượng java dựng sẵn thực sự được tích hợp với bố cục XML này, và nó dễ dàng hơn nhiều so với việc viết mã riêng của bạn để chuyển từ logic sang bitmap.

Vấn đề khác là G1 (và có lẽ các thiết bị Android khác trong tương lai gần) thực sự không nhanh như vậy. Bộ vi xử lý 200 MHz và RAM rất hạn chế. Ngay cả trong Java, bạn phải làm một số tiền khá của viết lại-to-tránh-nhiều-đối tượng-sáng tạo nếu bạn muốn làm cho ứng dụng của bạn hoàn toàn trơn tru. Python sẽ là quá chậm trong một thời gian vẫn còn trên các thiết bị di động.


56
2017-11-01 20:29



Không có một từ java duy nhất trên điện thoại Android, nó được biên dịch thành mã byte trong quá trình đóng gói. Tốc độ không phải là vấn đề: Google có thể cung cấp các công cụ tạo mã byte phù hợp từ mã python (giống như cho Jython). BTW, Dalvik không phải là máy ảo Java vì vậy đây không phải là về Java VS Python. - e-satis
Hehe. 200 MHz ... 4 năm sau và giờ đây điện thoại có bộ xử lý lõi tứ ... LOL. - Touzen
JAVA bytecode vẫn cần phải được xử lý bởi một JVM, và ngôn ngữ Java đòi hỏi một bộ thu gom rác anyway. Tốc độ thực tế chỉ có thể đến từ C ++. - LtWorf
@Touzen 2 năm sau, chúng tôi đang chạy bộ vi xử lý Intel Atom hoặc bộ xử lý octa-core ngay bây giờ. ;) - Rohan Kandwal
Do sự khác biệt về sức mạnh mà họ có thể vẽ, điện thoại sẽ luôn có độ trễ thấp hơn so với máy tính để bàn. Tuy nhiên, đừng từ bỏ Python cho thiết bị di động, bởi vì thông thường chỉ một phần nhỏ của mã chịu trách nhiệm cho công việc xử lý chuyên sâu, và phần này có thể được tối ưu hóa bằng cách viết lại nó bằng ngôn ngữ khác. - Evgeni Sergeev


Không phải lúc này và bạn sẽ may mắn được Jython làm việc sớm. Nếu bạn đang có kế hoạch để bắt đầu phát triển của bạn bây giờ bạn sẽ được tốt hơn với chỉ cần gắn bó với Java cho bây giờ.


32
2017-09-19 13:26





Sử dụng SL4A (đã được tự đề cập trong các câu trả lời khác), bạn có thể chạy đầy đủ web2py ví dụ (khác python web frameworks cũng có khả năng là ứng cử viên). SL4A không cho phép bạn thực hiện các thành phần UI gốc (các nút, thanh cuộn và các loại tương tự), nhưng nó hỗ trợ WebViews. Một WebView về cơ bản không có gì khác hơn là một trình duyệt web sọc xuống chỉ vào một địa chỉ cố định. Tôi tin rằng ứng dụng Gmail gốc sử dụng WebView thay vì đi tuyến đường tiện ích thông thường.

Tuyến đường này sẽ có một số tính năng thú vị:

  • Trong trường hợp của hầu hết các khuôn khổ web python, bạn thực sự có thể phát triển và thử nghiệm mà không cần sử dụng thiết bị Android hoặc trình giả lập Android.
  • Bất kỳ mã Python nào mà bạn kết thúc bằng văn bản cho điện thoại cũng có thể được đặt trên một máy chủ web công cộng với rất ít (nếu có) sửa đổi.
  • Bạn có thể tận dụng tất cả các công cụ web điên rồ trên mạng: truy vấn, HTML5, CSS3, v.v.

29
2018-01-06 14:34



Cherrypy hoạt động tốt, với sự hỗ trợ websocket ws4py. Chai cũng tốt trên SL4A. - Carl Smith