有没有办法在 Android 上运行 Python?
Posted
技术标签:
【中文标题】有没有办法在 Android 上运行 Python?【英文标题】:Is there a way to run Python on Android? 【发布时间】:2017-02-02 23:31:27 【问题描述】:我们正在开发一个S60 版本,这个平台有一个不错的 Python API..
不过,官方并没有关于android上的Python,但是既然Jython存在,有没有办法让蛇和机器人协同工作??
【问题讨论】:
【参考方案1】:一种方法是使用Kivy:
用于快速开发应用程序的开源 Python 库 使用创新的用户界面,例如多点触控应用。
Kivy 可在 Linux、Windows、OS X、Android 和 ios 上运行。您可以在所有支持的平台上运行相同的 [python] 代码。
Kivy Showcase app
【讨论】:
如果您使用 Kivy,这里有一个工具可以帮助您将项目打包成 APK:github.com/kivy/python-for-android 上周我一直在和 Kivy 一起玩,试图写一个游戏。他们的主要开发人员非常迅速地回答了有关 IRC 的问题,但是如果您在 Kivy 之前编写了 GUI,那么您会说很多 WTF。一些对我来说很奇怪的未记录事物的示例:所有小部件都会获得每个 on_touch_down 事件,即使该事件发生在它们的区域之外,没有小部件具有 draw() 方法,几乎所有事情都是通过他们组成的自定义属性上的自定义观察者模式发生的(注意这些与 Python 的属性同名,但不一样) @Trey:非 GUI 相关的东西呢? Python 模块的使用有什么限制吗?如何访问特定于 Android 的功能,例如阅读消息、添加通知、在后台工作、拍照、阅读联系人列表、确定 GPS 位置等? 现在也支持iOS了! 现在,差不多一年过去了,支持是否更好?这里有什么显着的改进吗?【参考方案2】:还有新的Android Scripting Environment (ASE/SL4A) 项目。它看起来很棒,并且与原生 Android 组件有一些集成。
注意:不再处于“积极开发”状态,但可能会有一些分叉。
【讨论】:
没错,但他们必须安装 ASE,这不是一个让您在没有安装任何东西的情况下用 python 编写 Android 应用程序的解决方案(普通用户将全部“wtf 这是 ASE 的东西吗?) 此外,ASE 是一个受限环境;即使预先安装了 ASE,您也无法编写成熟的 Android 应用程序。见***.com/questions/2076381 我认为它已重命名为 SL4A。 现在您可以使用 SL4A 编写应用程序、打包它们,甚至可以在 Play 商店中出售它们。自从上面的 cmets 发布以来,情况一直很好。如果你想在 Android 上运行 Python,那么在 SL4A 上运行的 PY4A 可能是最好的选择。 我确认,SL4A 现在允许编写准备使用的应用程序包,我尝试使用 perl 它可以工作【参考方案3】:是的! :Android Scripting Environment
通过 SL4A 的 via Matt Cutts 示例——“这是一个用六行 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)
【讨论】:
s/是/meh。也许/ ...它非常有限。任何图形或多点触控?一个大号。 @gcb 您不能使用普通的 android 小部件集,但可以使用“webviews”(例如,本机 gmail 应用程序使用的)。 打高尔夫球: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']))
@gdw2,当然,本机 Gmail 应用程序只使用 WebViews 来解析电子邮件,而不是实际的 UI。这使得比较有点荒谬。
@unmounted,当我在 python 脚本中导入 android 时,它说没有名为 android 的模块。尝试安装时 - pip3 install android 我得到一个错误,说没有这样的模块。你是如何将 android 导入这个 python 脚本的?【参考方案4】:
Android 的 Pygame 子集
Pygame 是 Python 的 2D 游戏引擎(在桌面上),深受新程序员欢迎。 Pygame Subset for Android 将自己描述为...
...将 Pygame 功能子集移植到 Android 平台。该项目的目标是允许创建特定于 Android 的游戏,并简化游戏从类似 PC 的平台到 Android 的移植。
示例包括一个打包为 APK 的完整游戏,非常有趣。
【讨论】:
我的 Droid X 有几个方面坏了(按钮或触摸屏,不记得了),所以我在这条路线上没有走得太远。【参考方案5】:作为Python 的爱好者和Android 程序员,我很遗憾地说这不是一个好方法。有两个问题:
一个问题是,Android 开发工具不仅仅是一种编程语言。许多 Android 图形都涉及 XML 文件来配置显示,类似于 html。内置的 java 对象与这种 XML 布局集成在一起,这比编写代码从逻辑到位图要容易得多。
另一个问题是 G1(以及在不久的将来可能还会有其他 Android 设备)没有那么快。 200 MHz 处理器和 RAM 非常有限。即使在 Java 中,如果你想让你的应用程序完美流畅,你也必须进行大量的重写以避免更多的对象创建。 Python 在移动设备上的运行速度会持续一段时间。
【讨论】:
Android手机上没有一个java字,在打包的过程中编译成字节码。速度不是问题:Google 可以提供从 python 代码生成正确字节码的工具(比如 Jython)。顺便说一句,Dalvik 不是 Java VM,所以这与 Java VS Python 无关。 JAVA 字节码仍然需要 JVM 处理,而 Java 语言无论如何都需要垃圾收集器。实际速度只能来自 C++。 @Touzen 2 年后,我们现在正在运行 Intel Atom 处理器或八核处理器。 ;) 由于它们能够绘制的功率不同,手机总是比台式机慢一个数量级。但是,不要放弃用于移动设备的 Python,因为通常只有一小部分代码负责处理器密集型工作,而这部分代码可以通过用另一种语言重写来优化。 顺便说一句,谷歌这些天推动 Kotlin 的方式——对于大多数用户来说,这是一种相当陌生的语言——很明显,它可以支持除 Java 之外的其他语言(我是 Java 开发人员和 Python 粉丝)。所以我认为答案与其说是实际问题,不如说是政治问题。【参考方案6】:交叉编译 & Ignifuga
我的博客有 instructions and a patch 用于交叉编译适用于 Android 的 Python 2.7.2。
我还开源了我的 2D 游戏引擎 Ignifuga。它基于 Python/SDL,可针对 Android 进行交叉编译。即使您不将它用于游戏,您也可能会从代码或构建器实用程序(命名为 Schafer,以 Tim...你知道是谁)获得有用的想法。
【讨论】:
令人印象深刻。为此+1。不被接受,因为你不可能用这个为公众写任何东西。 如果你的意思是你不能用它做图形应用程序,你绝对可以,当然,还需要做更多的工作。我实际上是使用这个端口结合 SDL 1.3,从 python 解释器转到交互式应用程序并非易事,但可以做到。【参考方案7】:Android 脚本层
SL4A 做你想做的事。您可以从他们的网站轻松地将其直接安装到您的设备上,并且不需要 root。
它支持多种语言。 Python是最成熟的。默认情况下,它使用 Python 2.6,但您可以使用 3.2 port 代替。我已经将该端口用于 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。您甚至可以在 webviews 中使用 javascript API。
let droid = new Android();
droid.ttsSpeak("hello from js");
用户界面
对于用户界面,您有三个选项:
您可以通过 API。这对于确认对话和其他基本用户输入很有用。 您还可以从 Python 脚本中打开 web 视图,然后使用 HTML5 用于用户界面。当您使用 Python 中的 webviews 时,您可以通过 在 webview 和 Python 进程之间来回传递消息 催生了它。 UI 不会是原生的,但它仍然是一个不错的选择 有。 部分支持原生 Android 用户界面,但我不支持 确定效果如何;我只是没用过。您可以混合选项,这样您就可以拥有一个主界面的 web 视图,并且仍然使用原生对话。
QPython
有一个名为QPython 的第三方项目。它建立在 SL4A 之上,并添加了一些其他有用的东西。
QPython 为您提供更好的 UI 来管理您的安装,并包括一个小的触摸屏代码编辑器、一个 Python 外壳和一个用于包管理的 PIP 外壳。他们还有一个 Python 3 端口。这两个版本都可以从 Play 商店免费获得。 QPython 还在 Android 项目(包括 Kivy)上捆绑了来自一堆 Python 的库,因此它不仅仅是 SL4A。
请注意,QPython 仍在开发他们的 SL4A 分支(不过,说实话并不多)。主要的 SL4A 项目本身几乎已经死了。
有用的链接
SL4A 项目(现在在 GitHub 上):https://github.com/damonkohler/sl4a SL4A Python 3 端口:https://code.google.com/p/python-for-android/wiki/Python3 QPython 项目:http://qpython.com 学习 SL4A(教程点):https://www.tutorialspoint.com/sl4a/index.htm【讨论】:
你可以使用其中的任何一个从终端或任务器运行 python 脚本吗?我找不到方法:( 您可以从 Tasker 启动 SL4A 脚本。 this page 上有一些示例,其中包含从 Tasker 启动的 Python 的 sn-ps。不过,这确实是一个完全不同的问题。【参考方案8】:Termux
您可以使用为 Android 提供 POSIX 环境的 Termux 应用程序来安装 Python。
请注意,apt install python
将在 Termux 上安装 Python3。对于 Python2,您需要使用apt install python2
。
【讨论】:
+1 用于 Termux。绝对美妙的工作环境。回购中的出色软件包选择,方便的音量按钮快捷方式。这是我找到的手机上最接近 Debian 的东西。【参考方案9】:基维
我想补充一下@JohnMudd 写的关于 Kivy 的内容。自从他描述的情况已经过去好几年了,Kivy 已经有了很大的发展。
在我看来,Kivy 最大的卖点是它的跨平台兼容性。您可以使用任何桌面环境(Windows/*nix 等)对所有内容进行编码和测试,然后为一系列不同的平台打包您的应用程序,包括 Android、iOS、MacOS 和 Windows(尽管应用程序通常缺乏原生外观)。
使用 Kivy 自己的KV 语言,您可以轻松编写和构建 GUI 界面(它就像 Java XML,但不是 TextView 等,KV 有自己的ui.widgets
用于类似的翻译),它在我的意见很容易采纳。
目前Buildozer 和python-for-android 是最推荐的用于构建和打包应用程序的工具。我已经尝试过它们,并且可以肯定地说它们使使用 Python 构建 Android 应用程序变得轻而易举。他们的指南也有据可查。
iOS 是 Kivy 的另一大卖点。您可以使用相同的代码库,只需通过 kivy-ios Homebrew 工具进行少量更改,尽管构建需要 Xcode,然后在其设备上运行(AFAIK Xcode 中的 iOS 模拟器目前不适用于 x86 架构构建) .还有一些依赖问题必须在 Xcode 中手动编译和摆弄才能成功构建,但它们不会太难解决,Kivy Google Group 中的人也非常有帮助。
话虽如此,具有良好 Python 知识的用户应该可以快速掌握基础知识。
如果您将 Kivy 用于更严肃的项目,您可能会发现现有模块不能令人满意。虽然有一些可行的解决方案。借助(正在进行中的)pyjnius for Android 和pyobjus,用户现在可以访问 Java/Objective-C 类来控制一些本机 API。
【讨论】:
【参考方案10】:目前没有,如果您能尽快让 Jython 工作,您会很幸运。如果您打算现在就开始开发,那么现在最好还是坚持使用 Java。
【讨论】:
【参考方案11】:使用 SL4A(在其他答案中已经单独提及),您可以 run 一个成熟的 web2py 实例(其他 python web frameworks 也可能是候选对象)。 SL4A 不允许你做原生 UI 组件(按钮、滚动条等),但它确实支持WebViews。 WebView 基本上只不过是指向固定地址的条带化 Web 浏览器。我相信本机 Gmail 应用程序使用 WebView 而不是常规的小部件路线。
这条路线会有一些有趣的特点:
对于大多数 python web 框架,您实际上可以在不使用 android 设备或 android 模拟器的情况下进行开发和测试。 无论您最终为手机编写的任何 Python 代码都可以放在公共网络服务器上,只需很少(如果有的话)修改。 您可以利用所有疯狂的网络资源:查询、HTML5、CSS3 等。【讨论】:
Cherrypy 运行良好,支持 ws4py websocket。瓶子在 SL4A 上也很好。【参考方案12】:QPython
我使用the QPython app。它是免费的,包括代码编辑器、交互式解释器和包管理器,允许您直接在设备上创建和执行 Python 程序。
【讨论】:
现在 qpython 增加了对 Django 的支持!这就是我所需要的!太棒了!【参考方案13】:Here是python官网列出的一些工具
playstore中有一个叫QPython3的应用,可以用来编辑和运行python脚本。
Playstore link
另一个名为 Termux 的应用程序,您可以在其中使用命令安装 python
pkg install python
Playstore Link
如果你想开发应用,有Python Android Scripting Layer (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
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.
【讨论】:
使用 Termux 也可以安装 python 2 $ apt install python2【参考方案14】:来自Python for android 网站:
Python for android 是一个项目,用于创建您自己的 Python 发行版,包括您想要的模块,并创建一个包含 python、libs 和您的应用程序的 apk。
【讨论】:
@e-satis:感谢您的评论。我没有看到我在复制哪个答案。我只能猜测您认为 PFA 与 Kivy 相同。虽然它托管在 Kivy 项目下,但您甚至不必使用 Kivy 即可使用 PFA。 检查@tito 在 PFA 底部删除的答案。此外,没有 kivy 的情况下运行 PFA 几乎没有兴趣,因为它是您获得的唯一工具包。 这并不是因为 kivy 目前是唯一可用的工具包(有些人正在努力整合其他工具包),而是因为它是重复的。请按原样考虑其他选项,不要将所有选项合并到一篇文章中:|【参考方案15】:Chaquopy
>Chaquopy 是 Android Studio 的基于 Gradle 的构建系统的插件。它侧重于close integration 与标准的Android 开发工具。
它提供了完整的 API 来调用 Java from Python 或 Python from Java,允许开发者使用最适合其应用的每个组件的语言。
它可以自动下载PyPI packages并将它们构建到应用程序中,包括选定的NumPy等原生包。
它允许从 Python 完全访问所有 Android API,包括本机用户界面工具包 (example pure-Python activity)。
这是一个商业产品,但它可以免费用于开源使用,并且将永远保持这种状态。
(我是这个产品的创造者。)
【讨论】:
只想补充一点,我对这个选项印象深刻。它真的很好用。定价并不可怕(开源应用免费,封闭源应用一次性支付 50 美元)。我决定不在 Android 上运行 python,因为它会使应用程序大小膨胀很多,但如果这不是问题,我真的推荐这个选项【参考方案16】:又一次尝试:https://code.google.com/p/android-python27/
这个直接将 Python 解释器嵌入到您的应用 apk 中。
【讨论】:
【参考方案17】:您可以使用sl4a 运行您的 Python 代码。 sl4a 支持 Python、Perl、JRuby、Lua、BeanShell、JavaScript、Tcl 和 shell 脚本。
你可以学习sl4aPython Examples。
【讨论】:
【参考方案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
【讨论】:
【参考方案19】:如果您正在寻找 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 位
【讨论】:
【参考方案20】:这里没有看到这个帖子,但是由于 Necessitas,Qt 可以在 Android 上运行,因此您可以使用 Pyside 和 Qt 做到这一点。
目前这似乎是一个很复杂的路线,但最终可能是一条可行的路线......
http://qt-project.org/wiki/PySide_for_Android_guide
【讨论】:
【参考方案21】:看看BeeWare。它已经显着增长。它获得了 PSF(Python 软件基金会)教育资助。
Beeware 的目标是能够使用 Python 为所有受支持的操作系统(包括 Android)创建本机应用程序。
官网:Beeware
Github 回购:https://github.com/beeware
【讨论】:
Kivy 有什么区别?它是基于稳定的便携式 python Gui【参考方案22】:另一个选项似乎是pyqtdeploy,引用文档是:
一个工具,与 Qt 提供的其他工具一起,可以启用 部署用 Python 编写的 PyQt4 和 PyQt5 应用程序 v2.7 或 Python v3.3 或更高版本。它支持部署到桌面 平台(Linux、Windows 和 OS X)和移动平台(iOS 和 安卓)。
根据Deploying PyQt5 application to Android via pyqtdeploy and Qt5,它正在积极开发中,尽管很难找到工作 Android 应用程序的示例或有关如何将所有必需的库交叉编译到 Android 的教程。不过,这是一个有趣的项目!
【讨论】:
【参考方案23】:查看enaml-native,它采用了 react-native 概念并将其应用于 python。
它允许用户使用原生 Android 小部件构建应用程序,并提供 API 以使用来自 python 的 android 和 java 库。
它还与 android-studio 集成,并共享一些 react 不错的开发功能,例如代码重新加载和远程调试。
【讨论】:
以上是关于有没有办法在 Android 上运行 Python?的主要内容,如果未能解决你的问题,请参考以下文章
当按下 Flutter 中编程的按钮时,有没有办法可以运行 python 脚本?
带有presto的GCP dataproc - 有没有办法使用pyhive通过python远程运行查询?