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

Is there a way to run Python on Android?

提问人:Bite code 提问时间:9/19/2008 最后编辑:Ümañg ßürmånBite code 更新时间:9/4/2023 访问量:756977

问:

这个问题的答案是社区的努力。编辑现有答案以改进此帖子。它目前不接受新的答案或交互。

我们正在开发 S60 版本,这个平台有一个很好的 Python API。

然而,Android 上的 Python 没有任何官方消息,但既然 Jython 存在,有没有办法让蛇和机器人一起工作?

android python jython ase android脚本

评论


答:

41赞 Ilya Kochetov 9/19/2008 #1

在过去的几年里,使用 Python 制作 Android 应用程序已经取得了长足的进步。

一种新方法是使用 Python 的 FireMonkey (FMX) 框架。FMX 是一个 GUI 框架,用于为许多平台开发应用程序,Android 就是其中之一。

完成编程后,您可以使用 PythonFMXBuilder 构建您的 Android 应用程序。

91赞 lacker 11/2/2008 #2

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

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

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

评论

50赞 Bite code 11/3/2008
Android 手机上没有一个 java 单词,它在打包过程中被编译为字节码。速度不是问题:谷歌可以提供工具,从python代码中生成正确的字节码(如Jython)。顺便说一句,Dalvik 不是 Java VM,所以这与 Java VS Python 无关。
10赞 LtWorf 4/29/2014
JAVA 字节码仍然需要由 JVM 处理,而 Java 语言无论如何都需要垃圾回收器。实际速度只能来自 C++。
21赞 Rohan Kandwal 4/10/2015
@Touzen 2 年后,我们现在运行的是英特尔凌动处理器或八核处理器。;)
3赞 Evgeni Sergeev 12/5/2015
由于它们能够汲取的功率不同,手机总是比台式机慢一个数量级。但是,不要放弃移动设备的 Python,因为通常只有一小部分代码负责处理器密集型工作,而这部分代码可以通过用另一种语言重写来优化。
4赞 Alex 7/11/2018
顺便说一句,谷歌现在在推广 Kotlin——对大多数用户来说,这是一种非常未知的语言——很明显,除了 Java 之外,还可以支持其他语言(我是 Java 开发人员和 Python 粉丝)。所以我认为答案是政治性的,而不是实际的。
231赞 unmounted 6/10/2009 #3

是的!: Android 脚本环境

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)

评论

47赞 gcb 10/23/2010
s/YES/meh。或/。。。这是非常有限的。任何图形或多点触控?一个很大的不。
4赞 gdw2 3/17/2012
@gcb你不能使用普通的Android小部件集,但你可以使用“webviews”(例如,这是原生Gmail应用程序使用的内容)。
30赞 Alex L 12/28/2012
打高尔夫球: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']))
15赞 Veselin Romić 7/22/2014
@gdw2,当然,原生Gmail应用程序只使用WebView来解析电子邮件,而不是实际的UI。这使得这种比较有点荒谬。
366赞 Heat Miser 6/10/2009 #4

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

注意:不再处于“积极开发”状态,但可能会有一些分叉。

评论

71赞 Stuart Axon 11/27/2010
没错,但他们必须安装 ASE,这不是一个让您在未安装任何东西的情况下用 python 编写 Android 应用程序的解决方案(普通用户将全是“wtf 这是 ASE 的东西吗?
22赞 Sridhar Ratnakumar 1/24/2011
此外,ASE 是一个受限制的环境;即使预安装了 ASE,也无法编写成熟的 Android 应用。查看 stackoverflow.com/questions/2076381
11赞 Vanuan 12/5/2012
我认为它已重命名为 SL4A。
10赞 Carl Smith 3/10/2013
如果您愿意,您可以编写应用程序、打包它们,甚至可以在 Play 商店中出售它们,现在使用 SL4A。自从上面的评论发布以来,它进展顺利。如果你想在 Android 上使用 Python,那么在 SL4A 上运行的 PY4A 可能是最好的选择。
94赞 muriloq 1/28/2011 #5

适用于 Android 的 Pygame Subset

Pygame 是一个用于 Python(桌面)的 2D 游戏引擎,深受新程序员的欢迎。适用于 Android 的 Pygame 子集将自己描述为......

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

这些示例包括一个打包为 APK 的完整游戏,这非常有趣。

评论

5赞 gdw2 10/6/2011
我的 Droid X 有几个方面被破坏了(按钮或触摸屏,不记得了),所以我在这条路线上并没有走得很远。
82赞 gabomdq 10/12/2011 #6

交叉编译和 Ignifuga

我的博客有交叉编译 Python 2.7.2 for Android 的说明和补丁

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

评论

5赞 Bite code 10/13/2011
令人 印象 深刻。+1 为此。不被接受,因为你不可能用这个为公众写任何东西。
2赞 gabomdq 10/14/2011
如果你的意思是你不能用它做图形应用程序,你绝对可以,当然,还需要更多的工作。我实际上将此移植与 SDL 1.3 结合使用,从 python 解释器到交互式应用程序并非易事,但可以做到。
1183赞 JohnMudd 11/19/2011 #7

一种方法是使用 Kivy

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

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

Kivy Showcase 应用程序

评论

78赞 gdw2 1/9/2012
如果您使用 Kivy,这里有一个工具可以帮助您将项目打包到 APK 中: github.com/kivy/python-for-android
21赞 Trey Stout 1/31/2012
在过去的一周里,我一直在和 Kivy 一起玩,试图写一个游戏。他们的主要开发人员非常迅速地回答了有关 IRC 的问题,但是,如果您在 Kivy 之前编写了 GUI,那么 WTF 会让您说很多。一些对我来说很奇怪的未记录的事情的例子:所有小部件都会获取每个on_touch_down事件,即使该事件发生在其区域之外,没有小部件有 draw() 方法,几乎所有事情都通过自定义观察者模式发生在他们组成的自定义属性上(请注意,这些与 Python 的属性共享名称,但并不相同)
9赞 Tadeck 3/24/2012
@Trey:与GUI无关的东西呢?Python 模块的使用是否有任何限制?如何访问 Android 特定功能,例如阅读消息、添加通知、在后台工作、拍照、阅读联系人列表、确定 GPS 位置等功能?
8赞 rubik 6/30/2012
现在也有iOS支持!
3赞 inclement 8/12/2015
为了回答@Tadeck的老问题:Kivy 可以通过 pyjnius 和(对于更 pythonic 的包装器)plyer 直接访问 Android 特定的功能。如果你编写(或已经存在)python-for-android 配方,你也可以使用几乎任何纯 python 模块,或者带有编译组件的模块——我们已经有许多流行模块的配方,比如 numpy、sqlalchemy 甚至 django。
40赞 gdw2 1/6/2012 #8

使用 SL4A(在其他答案中已经提到过),您可以运行一个成熟的 web2py 实例(其他 python Web 框架也可能是候选者)。SL4A 不允许你做原生的 UI 组件(按钮、滚动条等),但它确实支持 WebView。WebView 基本上只不过是指向固定地址的条带化 Web 浏览器。我相信原生 Gmail 应用程序使用 WebView,而不是走常规的小部件路线。

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

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

评论

3赞 Carl Smith 2/13/2013
Cherrypy 运行良好,支持 ws4py websocket。瓶子在SL4A上也很好。
29赞 gdw2 1/9/2012 #9

Python for android 站点中:

Python for android 是一个项目,用于创建您自己的 Python 发行版(包括您想要的模块),并创建一个包含 python、libs 和您的应用程序的 apk。

评论

1赞 gdw2 1/10/2012
@e-satis:感谢您的评论。我看不出我在复制哪个答案。我只能猜测你认为PFA和Kivy是一样的。虽然它托管在 Kivy 项目下,但您甚至不必使用 Kivy 即可使用 PFA。
0赞 Bite code 1/10/2012
检查@tito在底部指向 PFA 的已删除答案。另外,在没有 kivy 的情况下运行 PFA 几乎没有兴趣,因为它是您获得的唯一工具包。
0赞 tito 3/16/2012
这并不是因为 kivy 是目前唯一可用的工具包(有些人正在努力嵌入其他人),而是因为它是重复的。请考虑其他选项,而不是将所有选项合并到一个帖子中:|
82赞 Carl Smith 3/19/2012 #10

适用于 Android 的脚本层

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

它支持多种语言。Python 是最成熟的。默认情况下,它使用 Python 2.6,但您可以使用一个 3.2 端口来代替。我已经在Galaxy S2上将该端口用于各种操作,并且工作正常。

应用程序接口

SL4A 为每种支持的语言提供其库的端口。该库通过单个对象提供底层 Android API 的接口。androidAndroid

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");

用户界面

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

  • 您可以通过 应用程序接口。这对于确认对话框和其他基本用户输入非常有用。
  • 您还可以从 Python 脚本中打开 Web 视图,然后使用 HTML5 用于用户界面。当您使用 Python 中的 Web 视图时,您可以传递 消息在 webview 和 Python 进程之间来回传递 催生了它。UI 不会是原生的,但它仍然是一个不错的选择 有。
  • 对原生 Android 用户界面有一些支持,但我不是 确定它的效果如何;我只是从来没有用过它。

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

QPython的

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

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

请注意,QPython 仍在开发他们的 SL4A 分支(尽管老实说,并不多)。主要的SL4A项目本身几乎已经死了。

相关链接

评论

2赞 Pitto 8/26/2015
您可以使用其中任何一个从终端或任务器运行 python 脚本吗?我找不到办法:(
2赞 Carl Smith 9/2/2015
您可以从 Tasker 启动 SL4A 脚本。此页面上有一些示例,其中包含从 Tasker 启动的 Python 片段。不过,这确实是一个完全不同的问题。
22赞 Bite code 5/9/2012 #11

又一次尝试:https://code.google.com/p/android-python27/

这个直接将 Python 解释器嵌入到您的应用程序 apk 中。

17赞 Hitul 3/11/2013 #12

您可以使用 sl4a 运行 Python 代码。sl4a 支持 Python、PerlJRubyLua、BeanShell、JavaScript、Tcl 和 shell 脚本。

您可以学习 sl4a Python 示例

39赞 kyle k 6/13/2013 #13

QPython的

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

评论

3赞 swdev 10/7/2013
现在 qpython 添加了 Django 支持!这就是我所需要的!了不起!
12赞 radix07 10/6/2014 #14

没有在这里看到这个帖子,但是你可以用Pyside和Qt来做到这一点,因为Qt可以在Android上运行,这要归功于Necessitas。

目前这似乎是一个笨拙的问题,但最终可能是一条可行的路线......

http://qt-project.org/wiki/PySide_for_Android_guide

59赞 Anzel 1/13/2015 #15

基维

我想补充一下@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,然后才能在他们的设备上运行(Xcode 中的 iOS 模拟器 AFAIK 目前不适用于 x86 架构构建)。还有一些依赖性问题必须在 Xcode 中手动编译和摆弄才能成功构建,但它们不会太难解决,Kivy Google Group 中的人们也非常有帮助。

综上所述,具有良好 Python 知识的用户应该可以快速掌握基础知识。

如果您将 Kivy 用于更严肃的项目,您可能会发现现有模块不令人满意。不过,也有一些可行的解决方案。借助(正在进行中的)pyjnius for Android 和 pyobjus,用户现在可以访问 Java/Objective-C 类来控制一些原生 API。

14赞 Brian S 2/25/2015 #16

如果您正在寻找 3.4.2 或更高版本(在撰写本文时为 3.9.6),另一个选择是 GitHub 上的这个存档。

Python3-Android 3.4.2 或 Python3-Android 3.9.6

我相信原始存档支持 Python 3.4.2,最新的 GRRedwings 分支支持 3.9.6 和 NDK 的 22b 版本。较旧的分支支持其他版本,但使用 docker 编译起来并不容易。

旧版本,您只需克隆存档,运行make,即可获得.so或.a

较新的版本遵循自述文件,但它使用 docker 进行一致的构建。

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

9赞 Andrzej Pronobis 5/18/2015 #17

另一个选项似乎是pyqtdeploy,它引用文档是:

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

根据通过 pyqtdeploy 和 Qt5 将 PyQt5 应用程序部署到 Android,它正在积极开发中,尽管很难找到有效的 Android 应用程序示例或有关如何将所有必需的库交叉编译到 Android 的教程。不过,这是一个值得记住的有趣项目!

15赞 ode2k 9/16/2016 #18

您可以使用 QPython

它有一个 Python 控制台、编辑器以及包管理/安装程序

http://qpython.com/

这是一个具有 Python 2 和 Python 3 实现的开源项目。您可以直接从 github 下载源代码和 Android .apk 文件。

QPython 2:https://github.com/qpython-android/qpython/releases

QPython 3:https://github.com/qpython-android/qpython3/releases

67赞 Adrian Stanculescu 1/20/2017 #19

特穆克斯

你可以使用 Termux 应用 F-Droid 链接来安装 Python,该链接为 Android 提供了 POSIX 环境。

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

38赞 pz64_ 4/15/2017 #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.


您还可以查看 PySide for Android,它实际上是 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.


试用 Chaquopy 适用于 Android 的 Python SDK


和。。。蜜蜂

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赞 M.Hefny 7/16/2017
使用 Termux,您也可以安装 python 2 $ apt install python2
14赞 DrawT 1/13/2018 #21

看看BeeWare。它已经显着增长。它获得了 PSF(Python 软件基金会)教育补助金。

Beeware 的目标是能够使用 Python 为所有支持的操作系统(包括 Android)创建本机应用程序。

官方网站: Beeware

Github 存储库:https://github.com/beeware

评论

0赞 Carsten Thielepape 2/17/2020
toi Kivy有什么不一样?它基于 python Gui 稳定可移植
5赞 frmdstryr 1/17/2018 #22

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

它允许用户使用原生 Android 小部件构建应用程序,并提供 API 以使用 python 中的 android 和 java 库。

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

29赞 mhsmith 2/17/2018 #23

查阔皮

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

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

  • 它可以自动下载 PyPI 包并将它们构建到应用程序中,包括选定的原生包,例如 NumPy。

  • 它支持从 Python 完全访问所有 Android API,包括原生用户界面工具包(示例纯 Python 活动)。

这曾经是一个商业产品,但现在它是免费和开源的。

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

评论

1赞 JAnton 7/9/2021
只想补充一点,这个选项给我留下了深刻的印象。它真的很好用。定价并不可怕(开源应用程序免费,闭源应用程序一次性付款 50 美元)。我决定不在 Android 上运行 python,因为它会使应用程序大小膨胀很多,但如果这不是一个问题,我真的推荐这个选项