有没有办法在Android上运行Python?


2093

我们正在开发S60版本,该平台具有不错的Python API。

但是,关于Android上的Python尚无官方资料,但是由于Jython存在,有没有办法让蛇和机器人一起工作?

Answers:


1059

一种方法是使用Kivy

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

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

Kivy Showcase应用程序


63
如果您使用Kivy,则可以使用以下工具将您的项目打包为APK:github.com/kivy/python-for-android
gdw2 2012年

17
过去一周,我一直在与Kivy一起玩,尝试编写游戏。他们的主要开发人员很快就在IRC上回答了问题,但是,如果您在Kivy让您说出很多WTF之前就已经编写了GUI的话。一些对我来说很奇怪的未记录事物的示例:所有小部件都会获得每个on_touch_down事件,即使该事件发生在其区域之外,也没有小部件具有draw()方法,几乎​​所有事情都是通过它们组成的自定义属性上的自定义观察者模式发生的(请注意,这些名称与Python的属性具有相同的名称,但并不相同)
Trey Stout 2012年

7
@Trey:与GUI无关的东西呢?使用Python模块是否有任何限制?如何使用特定于Android的功能,例如阅读消息,添加通知,在后台工作,制作照片,阅读联系人列表,确定GPS位置等功能?
塔德克2012年

7
现在也有iOS支持!
rubik 2012年

16
现在,差不多整整一年之后,支持会更好吗?这里有什么显着的改进吗?
TankorSmash 2012年

346

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

注意:不再处于“主动开发”之下,但是可能有一些分支。


70
没错,但是必须安装ASE,这不是让您无需安装任何东西就可以用python编写Android应用的解决方案(普通用户都将是“ wtf是ASE的东西吗?”)
Stuart Axon 2010年

20
此外,ASE是一个受限制的环境。即使预先安装了ASE,也无法编写功能完善的Android应用。参见stackoverflow.com/questions/2076381
Sridhar Ratnakumar,2011年

10
我认为它已重命名为SL4A。
Vanuan 2012年

9
现在,您可以使用SL4A编写应用,打包应用,甚至在Play商店上出售它们。自从上面的评论发布以来,进展很好。如果要在Android上使用Python,则在SL4A上运行的PY4A可能是最佳选择。
卡尔·史密斯

2
我确认,SL4A现在允许编写准备使用的应用程序包,我尝试使用perl使其工作
ubugnu

216

是! :Android脚本环境

一个例子通过马特·卡茨通过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)

46
s /是/ meh。也许/ ...非常有限。任何图形或多点触控?一个大号
gcb 2010年

2
@gcb,您不能使用常规的android小部件集,但可以使用“ webviews”(例如,本地gmail应用程序使用的)。
gdw2 2012年

28
打高尔夫球: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']))
亚历克斯L

12
@ gdw2,当然,本机Gmail应用程序仅使用WebView来解析电子邮件,而不是实际的UI。这使得比较有点荒谬。
VeselinRomić2014年

88

适用于Android的Pygame子集

Pygame是适用于Python(在桌面上)的2D游戏引擎,在新程序员中很流行。AndroidPygame子集将自己描述为...

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

示例包括打包为APK的完整游戏,这很有趣。


4
我的Droid X打破了几个方面(按钮或触摸屏不记得了),所以我对这条路线的了解并不多。
gdw2 2011年

78

交叉编译和Ignifuga

我的博客上有说明和补丁用于Android的Python 2.7.2交叉编译的。

我还开源了我的2D游戏引擎Ignifuga。它基于Python / SDL,并且可以为Android交叉编译。即使您不将它用于游戏,您也可能会从代码或构建器实用程序(以Tim 命名的Schafer ……知道谁)中得到有用的想法。


4
令人印象深刻。为此+1。不被接受,因为您不能为此写任何东西给公众。
e-satis

1
如果您不能使用它来执行图形应用程序,那么当然可以肯定,您需要做更多的工作。我实际上将此端口与SDL 1.3结合使用,从python解释器转到交互式应用程序并不是一件容易的事,但是可以做到。
gabomdq 2011年

77

Android脚本层

SL4A做您想要的。您可以轻松地将其从其站点直接安装到设备上,而无需root用户。

它支持多种语言。Python是最成熟的。默认情况下,它使用Python 2.6,但是您可以使用3.2端口。我已经将该端口用于Galaxy S2上的所有东西,并且工作正常。

API

SL4A android为每种支持的语言提供了其库的端口。该库通过单个Android对象提供了与基础Android API的接口。

from android import Android

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

每种语言都有几乎相同的API。您甚至可以在webview中使用JavaScript API。

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

使用者介面

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

  • 您可以通过API轻松使用通用的本机对话和菜单。这对于确认对话和其他基本用户输入很有用。
  • 您还可以从Python脚本中打开Web视图,然后将HTML5用作用户界面。当您使用Python中的Web视图时,可以在Web视图和生成它的Python进程之间来回传递消息。用户界面不会是本机的,但仍然是一个不错的选择。
  • 一些对Android本机用户界面的支持,但是我不确定它的运行情况如何;我只是从未使用过它。

您可以混合使用选项,因此您可以在主界面上拥有一个Web视图,并且仍然使用本机对话。

QPython的

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

QPython为您提供了一个更好的UI来管理安装,并包括一个小的触摸屏代码编辑器,一个Python Shell和一个用于程序包管理的PIP Shell。它们还具有Python 3端口。两种版本均可从Play商店免费获得。QPython还在Android项目(包括Kivy)上捆绑了来自大量Python的库,因此它不仅仅是SL4A。

请注意,QPython仍在开发SL4A的分支(尽管,说实话,没有太多)。SL4A的主要项目本身已经死了。

有用的链接


1
您可以使用其中任何一个从终端或Tasker运行python脚本吗?我找不到方法:(
皮托

1
您可以从Tasker启动SL4A脚本。此页面上有一些示例,其中包含从Tasker启动的Python片段。但是,这确实是一个完全不同的问题。
卡尔·史密斯

77

作为一个Python的爱好者和Android程序员,我很伤心地说,这是不是一个很好的路要走。有两个问题:

一个问题是,Android开发工具不只是一种编程语言。许多Android图形涉及XML文件来配置显示,类似于HTML。内置的Java对象与此XML布局集成在一起,比编写代码从逻辑到位图要容易得多。

另一个问题是G1(以及不久的将来可能还有其他Android设备)的运行速度并不快。200 MHz处理器和RAM非常有限。即使是在Java中,如果要使应用程序完全流畅,也必须进行大量重写以避免创建更多对象。在移动设备上运行一段时间后,Python将变得太慢。


48
Android手机上没有一个Java单词,而是在打包过程中将其编译为字节码。速度不是问题:Google可以提供从python代码生成正确字节代码的工具(例如Jython)。顺便说一句,Dalvik不是Java VM,所以这与Java VS Python无关。
e-satis

6
JAVA字节码仍然需要由JVM处理,而Java语言仍然需要垃圾回收器。实际速度只能来自C ++。
LtWorf 2014年

19
@Touzen再过2年,我们现在正在运行Intel Atom处理器或八核处理器。;)
Rohan Kandwal 2015年

2
由于它们能够汲取的功率不同,因此电话总是比台式机慢一个数量级。但是,不要为移动设备而放弃Python,因为通常只有一小部分代码负责处理处理器密集型的工作,并且可以通过用另一种语言重写来优化这一部分。
Evgeni Sergeev

2
顺便说一下,谷歌最近推Kotlin的方式(对大多数用户来说这是一种鲜为人知的语言),很明显,可以支持Java以外的其他语言(我是Java开发人员和Python爱好者)。因此,我认为答案是政治的而不是实际的答案。
亚历克斯(Alex)

49

基维

我想补充一下@JohnMudd关于Kivy的文章。自从他描述这种情况以来已经有好几年了,而Kivy有了长足的发展。

我认为,Kivy的最大卖点是其跨平台兼容性。您可以使用任何桌面环境(Windows / * nix等)对所有内容进行编码和测试,然后将您的应用打包到一系列不同的平台上,包括Android,iOS,MacOS和Windows(尽管应用通常缺乏本机外观)。

使用Kivy自己的KV语言,您可以轻松编码和构建GUI界面(就像Java XML一样,但不是TextView等,KV拥有自己的ui.widgets的类似翻译功能),我认为这很容易采用。

当前,最推荐使用Buildozerpython-for-android工具来构建和打包应用程序。我对它们都进行了尝试,可以肯定地说,它们使使用Python构建Android应用程序变得轻而易举。他们的指南也有据可查。

iOS是Kivy的另一个大卖点。您可以使用相同的代码库,通过kivy-ios Homebrew工具进行少量更改,尽管构建需要Xcode,但在其设备上运行之前(AFAIK,Xcode中的iOS Simulator当前不适用于x86体系结构构建) 。为了成功构建,还必须手动在Xcode中解决一些依赖项问题,并加以解决,但这并不太容易解决,并且Kivy Google Group的人员也非常有帮助。

综上所述,具有良好Python知识的用户应该不会有任何问题,很快就能掌握基础知识。

如果将Kivy用于更重要的项目,则可能会发现现有模块不令人满意。虽然有一些可行的解决方案。通过适用于Android的pyjniuspyobjus,用户现在可以访问Java / Objective-C类来控制某些本机API。


我刚刚从其站点下载了Kivy。展示了对Python 3.4 32位和64位的支持,以及触摸输入工作示例。
codeReview

1
@codeReview,我仅在使用Python2的Kivy上使用,而对Python3则没有经验,一切运行是否顺利?
Anzel

希望很快我会通知您。但是我对CPython 3.4命令外壳.py文件之外的Python没有经验,无法快速解决计算或算法问题。这将是我的第一个带有GUI的应用程序。我需要阅读更多文档,以了解Kivy语言,并仔细执行安装步骤,因此我知道如何将Kivi安装到我选择的Python IDE上,以及如何打包APK以推送到Android。这是一个多步骤的过程,因此我可以说并不是很快。
codeReview

1
@codeReview,祝您旅途愉快。如果这是您的第一个应用程序,强烈建议使用.kv作为布局文件。就像Yaml或只是树文件来定义布局小部件。如果您的应用是多屏/布局,请使用,ScreenManager因为这样可以节省大量时间。还有一条建议是阅读他们的邮件列表,那里有很多博学的人愿意为您提供帮助。
Anzel

1
同样,@codeReview,而不是从Kivy的演示应用程序中学习,您可能会获得更多洞察力,以搜索一些现有的kivy应用程序,并了解人们在现实情况下如何管理“小部件”和回调。Kivy一点也不难学习,相对于Java + Android或Objective-C + iOS,我会说学习曲线要​​容易得多
Anzel 2015年

40

Termux

您可以使用Termux应用程序(该程序为Android提供POSIX环境)来安装Python。

请注意,这apt install python将在Termux上安装Python3。对于Python2,您需要使用apt install python2


5
+1为Termux。绝对出色的工作环境。回购中有不错的包装选择,便捷的音量按钮快捷键。这是我发现的最接近Debian的手机。
詹姆斯


39

使用SL4A(在其他答案中已经提到过),您可以运行成熟的web2py实例(其他python web框架也可能是候选对象)。SL4A不允许您执行本机UI组件(按钮,滚动条等),但它确实支持WebViews。WebView基本上只不过是指向固定地址的带状结构的Web浏览器。我相信本机Gmail应用程序使用WebView而非常规的窗口小部件路线。

这条路线将具有一些有趣的功能:

  • 对于大多数python网络框架,您实际上可以在不使用android设备或android模拟器的情况下进行开发和测试。
  • 无论您最终为手机编写的任何Python代码,也都可以进行很小的修改(如果有的话)放在公共Web服务器上。
  • 您可以利用那里所有疯狂的网络内容:查询,HTML5,CSS3等。

2
Cherrypy在ws4py websocket支持下运行良好。SL4A上的瓶子也很好。
卡尔·史密斯

33

QPython的

我使用QPython应用程序。它是免费的,包括代码编辑器,交互式解释器和程序包管理器,可让您直接在设备上创建和执行Python程序。


2
现在,qpython添加了Django支持!这就是我所需要的!惊人!
swdev

27

适用于AndroidPython站点:

适用于Android的Python是一个用于创建自己的Python发行版(包括所需模块)并创建包含python,lib和应用程序的apk的项目。


1
@ e-satis:感谢您的评论。我看不到我在重复哪个答案。我只能猜测您认为PFA与Kivy相同。尽管它是在Kivy项目下托管的,但您甚至不必使用Kivy即可使用PFA。
gdw2 2012年

检查@tito在PFA底部的已删除答案。另外,因为它是您唯一的工具包,所以没有兴趣地运行PFA几乎没有兴趣。
e-satis 2012年

这并不是因为kivy是当前唯一可用的工具包(有些人正在努力使其他人完整)而不是重复的工具包。请按原样考虑其他选项,而不是将所有选项合并到一个帖子中:|
tito 2012年

21

Chaquopy

Chaquopy是Android Studio基于Gradle的构建系统的插件。它着重于与标准Android开发工具的紧密集成

  • 它提供了完整的API,可以从Python调用Java从Java调用Python,从而允许开发人员使用最适合其应用程序每个组件的语言。

  • 它可以自动下载PyPI软件包并将其构建到应用程序中,包括选定的本机软件包,例如NumPy。

  • 它使您能够从Python完全访问所有Android API,包括本机用户界面工具包(纯Python活动示例)。

这是一种商业产品,但可免费用于开放源代码,并且将始终保持这种状态。

(我是这个产品的创造者。)



20

是python官方网站上列出的一些工具


Playstore中有一个名为QPython3的应用程序,可用于编辑和运行python脚本。

Playstore连结


另一个名为Termux的应用程序,您可以在其中使用命令安装python

pkg install python

Playstore连结


如果您想开发应用程序,则可以使用Python Android脚本层(SL4A

The Scripting Layer for Android, SL4A, is an open source application that allows programs written in a range of interpreted languages to run on Android. It also provides a high level API that allows these programs to interact with the Android device, making it easy to do stuff like accessing sensor data, sending an SMS, rendering user interfaces and so on.


您还可以检查适用于Android的PySide,它实际上是Qt 4的Python绑定。


有一个称为PyMob的平台,其中的应用程序可以完全用Python编写,并且编译器工具流(PyMob)可以将它们转换为适用于各种平台的本机源代码。


同时检查python-for-android

python-for-android is an open source build tool to let you package Python code into standalone android APKs. These can be passed around, installed, or uploaded to marketplaces such as the Play Store just like any other Android app. This tool was originally developed for the Kivy cross-platform graphical framework, but now supports multiple bootstraps and can be easily extended to package other types of Python apps for Android.


试用适用 于Android的Chaquopy A Python SDK


Anddd ... BeeWare

BeeWare allows you to write your app in Python and release it on multiple platforms. No need to rewrite the app in multiple programming languages. It means no issues with build tools, environments, compatibility, etc.


2
使用Termux可以安装python 2以及$ apt install python2
M.Hefny17年



12

如果您正在寻找3.4.2或3.5.1,则另一个选择是GitHub上的此存档。

Python3-Android 3.4.2 Python3-Android 3.5.1

目前,它支持Python 3.4.2或3.5.1以及NDK的10d版本。它还可以支持3.3和9c,11c和12

只需下载,运行make并获得.so或.a即可,这非常不错。

我目前使用它在Android设备上运行原始Python。通过对构建文件进行一些修改,您还可以将x86和armeabi制作为64位



9

pyqtdeploy似乎是一种选择,引用该文档是:

该工具与Qt随附的其他工具结合使用,可以部署用Python v2.7或Python v3.3或更高版本编写的PyQt4和PyQt5应用程序。它支持部署到桌面平台(Linux,Windows和OS X)以及移动平台(iOS和Android)。

根据通过pyqtdeploy和Qt5PyQt5应用程序部署到Android的说法,该应用程序是积极开发的,尽管很难找到有效的Android应用程序示例或关于如何将所有必需的库交叉编译到Android的教程。请记住,这是一个有趣的项目!


6

看一下BeeWare。在回答这个问题时,它仍处于早期开发中。目的是能够使用Python为所有受支持的操作系统(包括Android)创建本机应用程序。


toi Kivy和有什么不一样?它是基于稳定的便携式Python Gui的
Carsten Thielepape

5

看看enaml-native,它采用了react-native概念并将其应用于python。

它允许用户使用本机Android小部件来构建应用,并提供API以使用来自python的android和java库。

它还与android-studio集成,并共享了react的一些不错的开发功能,例如代码重载和远程调试。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.