题 有没有办法在Android上运行Python? [关闭]


我们正在努力 S60 版本和这个平台有一个很好的Python API。

但是,在Android上没有关于Python的官方消息,但从那以后 Jython的 存在,有没有办法让蛇和机器人一起工作?


1892
2017-09-19 13:21


起源


让我们测试一下Joel关于谷歌排名SO帖子更新可能性的理论。见下文或此: google-opensource.blogspot.com/2009/06/... - unmounted
我的意思是相反的。鉴于这篇文章的内容很少,如果排名很好,那一定是一个巨大的期望。我非常希望这个项目最好,我自己更像是一个pythonista而不是Java人,用这种语言编写Android代码将成为原型设计阶段。 - e-satis
哦,对......我不认为更新问题是有用的,但改变接受的答案肯定是。 - e-satis
@ e-satisf you right。我是python及其技术性的新手,我习惯于编译C / C ++语言。但是,虚拟机内的虚拟机仍然不是最快的,并且可能竞争成为执行代码的最慢的方式。肯定它有它的实用性。我不讨厌Python和Android,但...... - user457015
@ user457015我认为你应该真正了解现代JVM的实现方式,他们是 离很远 到现在为止“脚本”或“解释”。如果有的话,Java现在只比它慢10-25% 好/完美写 C / C ++代码。而且用Java搞砸写作的地方越来越少...... - TC1


答案:


一种方法是使用 Kivy

用于快速开发应用程序的开源Python库   利用创新的用户界面,如多点触控应用程序。

Kivy可以在Linux,Windows,OS X,Android和iOS上运行。您可以在所有支持的平台上运行相同的[python]代码。

Kivy Showcase应用程序 


820
2017-11-18 21:49



如果你使用Kivy,这里有一个工具来帮助你的项目打包到APK: github.com/kivy/python-for-android - gdw2
@ e-satisf做了 Kivy 为你工作?它有用吗?如果你能在我的Kivy中发表你的经历,我将非常感激 题 :) - juliomalegria
过去一周我一直在玩Kivy尝试写游戏。他们的主要开发人员非常快速地回答有关IRC的问题,但是如果你在Kivy之前编程了一个GUI会让你说WTF相当多。一些对我来说很奇怪的未记录事件的例子:即使事件发生在他们的区域之外,所有窗口小部件都会获取每个on_touch_down事件,没有窗口小部件有draw()方法,几乎​​所有事件都是通过自定义属性上的自定义观察者模式进行的(注意这些与Python的属性共享名称,但不一样) - Trey Stout
现在,差不多整整一年后,支持会更好吗?这里有任何显着的改进吗? - TankorSmash
另一年,该死的谷歌,他们似乎喜欢网站的所有蟒蛇,在Android中没有对python的热爱。 - Dexter


还有新的 Android脚本环境 (ASE / SL4A)项目。它看起来很棒,并且与原生Android组件有一些集成。

注意:不再在“积极开发”下,但有些叉子可能会。


303
2018-06-10 05:24



没错,但是他们必须安装ASE,这不是一个让你在没有安装任何东西的情况下在python中编写Android应用程序的解决方案(普通用户将是“wtf是这个ASE的东西吗?) - Stuart Axon
此外,ASE是一个受限制的环境;即使预先安装了ASE,也无法编写成熟的Android应用程序。看到 stackoverflow.com/questions/2076381 - Sridhar Ratnakumar
我认为它已更名为SL4A。 - Vanuan
您可以编写应用程序,将它们打包,甚至可以在Play商店出售,如果您愿意,现在可以使用SL4A。自上面的评论发布以来,情况一直很顺利。如果你想要Android上的Python,那么在SL4A上运行的PY4A可能是最好的选择。 - Carl Smith
我确认,SL4A现在允许编写可随时使用的应用程序包,我尝试用perl工作 - ubugnu


是!

一个例子 通过Matt Cutts 通过SL4A - “这是用六行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 / YES / MEH。也许/ ......它非常有限。什么图形或多点触摸?一个大的NO。 - gcb
@gcb你不能使用普通的android小部件集,但是你可以使用“webviews”(例如本机gmail应用程序使用的)。 - gdw2
golfed: 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,原生Gmail应用程序肯定只使用WebView来解析电子邮件,而不是实际的用户界面。这使得比较有点荒谬。 - Veselin Romić


还有 SL4A 由Google员工大量撰写。


73
2018-05-26 09:21





“该 适用于Android的Pygame Subset 是Android平台的Pygame功能子集的端口。该项目的目标是允许创建特定于Android的游戏,并简化从类似PC的平台到Android的游戏移植。“

这些例子包括一个包装在APK中的完整游戏,非常有趣。


71
2018-01-28 12:18



我的Droid X上有几个方面被打破(按钮或触摸屏,不记得了),所以我对这条路线走得不远。 - gdw2


我已经发布了针对Android交叉编译Python 2.7.2的说明和补丁,你可以在我的博客上找到它: http://mdqinc.com/blog/2011/09/cross-compiling-python-for-android/

编辑:我是开源的 Ignifuga,我的2D游戏引擎,基于Python / SDL,它可以跨Android编译。即使您不将它用于游戏,您也可以从代码和构建器实用程序中获得有用的想法(在Tim之后命名为Schafer ......你知道是谁)。


63
2017-10-12 13:49



令人印象深刻。 +1为此。不接受,因为你不可能为公众写任何东西。 - e-satis
如果你的意思是你不能用它做图形应用程序,当然,你肯定可以做更多的工作。我实际上将这个端口与SDL 1.3结合使用,从python解释器转到交互式应用程序并不是一件容易的事,但它可以完成。 - gabomdq


适用于Android的脚本层

SL4A 做你想要的。您可以从他们的站点直接将其直接安装到您的设备上,而不需要root。

它支持多种语言。 Python是最成熟的。默认情况下,它使用Python 2.6,但有一个 3.2端口 你可以改用。我已经在Galaxy S2上使用了那个端口来处理各种各样的事情并且工作正常。

API

SL4A提供了他们的端口 android 每种支持语言的库。该库通过单个提供了底层Android API的接口 Android 目的。

from android import Android

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

每种语言都有相同的API。您甚至可以在Web视图中使用JavaScript API。

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

用户界面

对于用户界面,您有三个选项:

  • 您可以轻松地使用通用的本机对话框和菜单 API。这适用于确认对话和其他基本用户输入。
  • 您还可以从Python脚本中打开Webview,然后使用HTML5 用户界面。当您使用Python的Web视图时,您可以通过 在webview和Python进程之间来回传递消息 催生了它。用户界面不是原生的,但它仍然是一个很好的选择 有。
  • 一些 支持原生Android用户界面,但我不是 确定它的工作原理;我只是没用过它。

您可以混合选项,这样您就可以拥有主界面的webview,并仍然使用本机对话。

QPython

有一个名为的第三方项目 QPython。它建立在SL4A之上,并引入了一些其他有用的东西。

QPython为您提供了更好的UI来管理您的安装,并包含一个小的触摸屏代码编辑器,一个Python shell和一个用于包管理的PIP shell。他们还有一个Python 3端口。这两个版本都可以从Play商店免费获得。 QPython还捆绑了Android项目中的一堆Python库,包括Kivy,所以它不仅仅是SL4A。

请注意,QPython仍在开发他们的SL4A分支(但实际上并不多)。主要的SL4A项目本身已经死了。

有用的链接


57
2018-03-19 15:45



你可以使用其中任何一个从终端或任务器运行python脚本吗?我找不到方法:( - Pitto
您可以从Tasker启动SL4A脚本。有一些例子 这一页 从Tasker启动Python的片段。但这确实是一个完全不同的问题。 - Carl Smith


作为一个 蟒蛇 爱人和Android程序员,我很遗憾地说这不是一个好方法。有两个问题。

一个问题是Android开发工具不仅仅是一种编程语言。很多Android图形都涉及配置显示的XML文件,类似于HTML。内置的java对象实际上与这个XML布局集成在一起,并且比编写自己的代码从逻辑到位图要容易得多。

另一个问题是G1(以及可能在不久的将来可能还有其他Android设备)真的不那么快。 200 MHz处理器和RAM非常有限。即使在Java中,如果你想让你的应用程序非常流畅,你也必须做大量的重写 - 避免更多的对象创建。 Python仍会在移动设备上停留太长时间。


56
2017-11-01 20:29



Android手机上没有一个java字,它在打包过程中被编译为字节码。速度不是问题:谷歌可以提供从python代码生成正确字节代码的工具(比如Jython)。 BTW,Dalvik不是Java VM,所以这不是Java VS Python。 - e-satis
呵呵。 200 MHz ... 4年后,现在手机有四核处理器......大声笑。 - Touzen
JAVA字节码仍然需要由JVM处理,而Java语言无论如何都需要垃圾收集器。实际速度只能来自C ++。 - LtWorf
@Touzen 2年后,我们现在正在运行Intel Atom处理器或八核处理器。 ;) - Rohan Kandwal
由于它们能够绘制的功率不同,手机总是比台式机慢一个数量级。但是,不要放弃Python用于移动设备,因为通常只有一小部分代码负责处理器密集型工作,而这部分可以通过用另一种语言重写来优化。 - Evgeni Sergeev


不是现在,你很幸运能让Jython尽快上班。如果您现在计划开始开发,那么现在只需坚持使用Java就可以了。


32
2017-09-19 13:26





使用SL4A(已经在其他答案中已经提到过),你可以  一个全面的 的web2py 实例(其他 python web框架 也可能是候选人)。 SL4A不允许您使用本机UI组件(按钮,滚动条等),但它确实支持 网页视图。 WebView基本上只是一个指向固定地址的条带化Web浏览器。我相信原生Gmail应用使用WebView而不是常规小部件路径。

这条路线会有一些有趣的特点:

  • 在大多数python Web框架的情况下,您可以实际开发和测试,而无需使用Android设备或Android模拟器。
  • 无论你最终为手机编写什么Python代码,也可以放在公共网络服务器上,只需很少(如果有的话)修改。
  • 你可以利用所有疯狂的网页内容:查询,HTML5,CSS3等。

29
2018-01-06 14:34



Cherrypy运行良好,支持ws4py websocket。 SL4A上的瓶子也没问题。 - Carl Smith