有没有办法在 Android 上运行 Python?
- 2024-12-11 08:47:00
- admin 原创
- 152
问题描述:
我们正在开发S60版本,这个平台有一个很好的 Python API。
但是,Android 上没有关于 Python 的官方消息,但是既然存在Jython,有没有办法让蛇和机器人一起工作呢?
解决方案 1:
一种方法是使用Kivy:
开源 Python 库,用于快速开发利用创新用户界面的应用程序,例如多点触控应用程序。
Kivy 可在 Linux、Windows、OS X、Android 和 iOS 上运行。你可以在所有支持的平台上运行相同的 [python] 代码。
Kivy 展示应用程序
解决方案 2:
还有新的Android 脚本环境(ASE/SL4A) 项目。它看起来很棒,并且与原生 Android 组件有一些集成。
注意:不再处于“积极开发”状态,但可能存在一些分支。
解决方案 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)
解决方案 4:
适用于 Android 的 Pygame 子集
Pygame是一款适用于 Python 的 2D 游戏引擎(桌面版),深受新程序员的喜爱。Android版 Pygame Subset自称是……
...将 Pygame 功能子集移植到 Android 平台。该项目的目标是允许创建 Android 专用游戏,并简化从类似 PC 的平台向 Android 移植游戏的过程。
示例包括一个打包为 APK 的完整游戏,非常有趣。
解决方案 5:
作为一名Python爱好者和 Android 程序员,我很遗憾地说这不是一个好办法。有两个问题:
一个问题是,Android 开发工具不仅仅只有一种编程语言。许多 Android 图形都涉及 XML 文件来配置显示,类似于 HTML。内置的 Java 对象与此 XML 布局集成在一起,这比编写代码从逻辑到位图要容易得多。
另一个问题是 G1(以及不久的将来的其他 Android 设备)速度不够快。200 MHz 处理器和 RAM 非常有限。即使是 Java,如果你想让你的应用程序完美流畅,你也必须进行大量重写以避免创建更多对象。在移动设备上,Python 的速度在一段时间内仍然会太慢。
解决方案 6:
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 脚本中打开 webview,然后使用 HTML5 作为用户界面。当您从 Python 使用 webview 时,您可以在 webview 和生成它的 Python 进程之间来回传递消息。UI 不是原生的,但它仍然是一个不错的选择。
它对原生 Android 用户界面有一定的支持,但我不确定它运行得如何;我只是从来没有使用过它。
您可以混合使用选项,这样您就可以拥有一个作为主界面的 webview,同时仍然使用本机对话框。
qpython
有一个名为QPython的第三方项目。它基于 SL4A 构建,并添加了一些其他有用的东西。
QPython 为您提供了更美观的用户界面来管理您的安装,并包含一个小型触摸屏代码编辑器、一个 Python shell 和一个用于包管理的 PIP shell。它们还有一个 Python 3 端口。这两个版本都可以从 Play Store 免费获得。QPython 还捆绑了来自 Android 上大量 Python 项目的库,包括 Kivy,因此它不仅仅是 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(Tutorialspoint):https://www.tutorialspoint.com/sl4a/index.htm
解决方案 7:
交叉编译和 Ignifuga
我的博客有针对 Android 交叉编译 Python 2.7.2 的说明和补丁。
我还开源了我的 2D 游戏引擎Ignifuga。它基于 Python/SDL,并且可以为 Android 进行交叉编译。即使您不将其用于游戏,您也可能从代码或构建器实用程序(以 Tim 的名字命名为Schafer ... 你知道是谁)中获得有用的想法。
解决方案 8:
特尔姆克斯
您可以使用Termux应用程序F-Droid 链接(它为 Android 提供了 POSIX 环境)来安装 Python。
请注意,apt install python
将在 Termux 上安装 Python3。对于 Python2,您需要使用apt install python2
。
解决方案 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(据我所知,Xcode 中的 iOS 模拟器目前不适用于 x86 架构构建)。还有一些依赖性问题必须手动编译并在 Xcode 中摆弄才能成功构建,但这些问题不会太难解决,而且Kivy Google Group中的人也非常乐于助人。
综上所述,具有良好 Python 知识的用户应该可以毫无问题地快速掌握基础知识。
如果您使用 Kivy 进行更严肃的项目,您可能会发现现有模块不令人满意。不过,还是有一些可行的解决方案。借助(正在进行的) Android 版pyjnius和pyobjus,用户现在可以访问 Java/Objective-C 类来控制一些本机 API。
解决方案 10:
在过去的几年中,使用 Python 开发 Android 应用程序已经取得了长足的进步。
一种新方法是使用Python 的 FireMonkey (FMX) 框架。FMX 是一个用于为许多平台开发应用程序的 GUI 框架,Android 就是其中之一。
完成编程后,您可以使用PythonFMXBuilder来构建您的 Android 应用程序。
解决方案 11:
使用 SL4A (它本身已经在其他答案中提到过),您可以运行一个完整的web2py实例 (其他python web 框架也可能是候选者)。SL4A 不允许您执行本机 UI 组件 (按钮、滚动条等),但它支持WebViews。WebView基本上只不过是一个指向固定地址的简化 Web 浏览器。我相信本机 Gmail 应用程序使用 WebView,而不是采用常规的小部件路线。
这条路线有一些有趣的特点:
对于大多数 Python Web 框架来说,你实际上可以在不使用 Android 设备或 Android 模拟器的情况下进行开发和测试。
无论您最终为手机编写了什么 Python 代码,都可以经过很少(如果有的话)的修改放在公共网络服务器上。
您可以利用所有疯狂的网络资源:查询、HTML5、CSS3 等。
解决方案 12:
qpython
我使用QPython 应用程序。它是免费的,包含一个代码编辑器、一个交互式解释器和一个包管理器,允许您直接在设备上创建和执行 Python 程序。
解决方案 13:
以下是 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.
尝试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.
解决方案 14:
摘自Python for Android网站:
Python for android 是一个用于创建您自己的 Python 发行版(包括您想要的模块)并创建一个包括 python、libs 和您的应用程序的 apk 的项目。
解决方案 15:
查科皮
Chaquopy是 Android Studio 基于 Gradle 的构建系统的插件。它专注于与标准 Android 开发工具紧密集成。
它提供了完整的 API,可以从 Python 调用Java或从 Java 调用 Python,从而允许开发人员使用最适合其应用程序每个组件的语言。
它可以自动下载PyPI 包并将其构建到应用程序中,其中包括 NumPy 等选定的本机包。
它支持从 Python 完全访问所有 Android API,包括本机用户界面工具包(例如纯 Python 活动)。
这曾经是一个商业产品,但现在是免费和开源的。
(我是这个产品的创造者。)
解决方案 16:
又一次尝试: https: //code.google.com/p/android-python27/
这个直接将 Python 解释器嵌入到你的应用程序 apk 中。
解决方案 17:
您可以使用sl4a运行 Python 代码。sl4a 支持 Python、Perl、JRuby、Lua、BeanShell、JavaScript、Tcl和 shell 脚本。
您可以学习 sl4a Python 示例。
解决方案 18:
您可以使用QPython:
它有一个 Python 控制台、编辑器以及包管理/安装程序
它是一个开源项目,有 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:
看看BeeWare。它已经取得了长足的发展。它获得了 PSF(Python 软件基金会)教育资助。
Beeware 的目标是能够使用 Python 为所有受支持的操作系统(包括 Android)创建原生应用程序。
官方网站:Beeware
Github 仓库:https://github.com/beeware
解决方案 20:
如果您正在寻找 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 和 22b 版本的 NDK。较旧的分支支持其他版本,但使用 docker 编译起来不那么容易。
对于旧版本,您只需克隆存档,运行 make 即可获得 .so 或 .a
新版本遵循 ReadMe,但它使用 docker 进行一致的构建。
我目前使用它在 Android 设备上运行原始 Python。通过对构建文件进行一些修改,您还可以制作 x86 和 armeabi 64 位
解决方案 21:
没有看到这里发布的内容,但是现在您可以使用 Pyside 和 Qt 来完成此操作,因为 Qt 借助 Necessitas 可以在 Android 上运行。
目前看来这似乎是一个相当棘手的问题,但最终可能会成为一条可行的途径……
http://qt-project.org/wiki/PySide_for_Android_guide
解决方案 22:
还有一个选项似乎是pyqtdeploy,其引用文档如下:
该工具与 Qt 提供的其他工具配合使用,可以部署使用 Python v2.7 或 Python v3.3 或更高版本编写的 PyQt4 和 PyQt5 应用程序。它支持部署到桌面平台(Linux、Windows 和 OS X)和移动平台(iOS 和 Android)。
根据通过 pyqtdeploy 和 Qt5 将 PyQt5 应用程序部署到 Android,它正在积极开发,尽管很难找到可以运行的 Android 应用程序示例或有关如何将所有必需库交叉编译到 Android 的教程。不过,这是一个值得记住的有趣项目!
解决方案 23:
查看enaml-native,它采用了 react-native 概念并将其应用于 python。
它允许用户使用原生 Android 小部件构建应用程序,并提供使用来自 Python 的 Android 和 Java 库的 API。
它还与 android-studio 集成并共享一些 react 的优秀开发功能,如代码重新加载和远程调试。