有办法在Android上运行Python吗?

Is there a way to run Python on Android?

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

然而,Android上并没有关于Python的任何官方信息,但是既然Jython已经存在,有没有办法让snake和机器人一起工作呢?


一种方法是使用Kivy:

Open source Python library for rapid development of applications
that make use of innovative user interfaces, such as multi-touch apps.

Kivy runs on Linux, Windows, OS X, Android and iOS. You can run the same code on all supported platforms.

Kivy展示应用程序


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

注意:不在"active development"下,但是一些fork可能在。


是的!: Android脚本环境

Matt Cutts通过SL4A给出的一个例子——"这是一个用六行Python代码编写的条形码扫描器:

1
2
3
4
5
6
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)


谷歌的员工还用大号字体编写了SL4A。


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

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


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

编辑:我已经开源了我的2D游戏引擎《火枪》,它基于Python/SDL,并为Android交叉编译。即使您不将其用于游戏,您也可能从代码和构建器实用程序(名为Schafer,以Tim的名字命名……你知道是谁)。


脚本层Android

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

它支持多种语言。Python是最成熟的。默认情况下,它使用Python 2.6,但是您可以使用3.2端口。我在Galaxy S2上用过这个端口,它运行得很好。

<

API / hh2 >

SL4A为每种受支持的语言提供了它们的android库的端口。该库通过一个Android对象提供一个到底层Android API的接口。

1
2
3
4
from android import Android

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

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

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

<

用户界面/ hh2 >

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

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

您可以混合使用选项,这样就可以在主界面上使用webview,同时仍然使用本机对话。

QPython

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

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

请注意,QPython仍然在开发他们的SL4A分支(不过,说实话不是很多)。主要的SL4A项目本身已经死了。

的有用链接

SL4A项目(现在在GitHub上):https://github.com/damonkohler/sl4aSL4A Python3端口:https://code.google.com/p/python-for-android/wiki/Python3QPython项目:http://qpython.com


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

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

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


Kivy

我想把这篇文章作为@JohnMudd已经回答过的问题的延伸(但请原谅,因为英语不是我的第一语言)

从那时到现在已经有好几年了,Kivy已经发展到v1.9-dev。在我看来,Kivy最大的卖点是它的跨平台兼容性。您可以在本地环境(Windows/*nix等)下编写代码并进行测试,还可以构建、调试和打包应用程序,以便在Android/iOS/Mac/Windows设备上运行。

使用Kivy自己的KV语言,你可以很容易的编写和构建GUI界面(就像Java XML一样,但是不同于TextView等,KV有自己的ui.widgets来进行类似的翻译),我认为这是很容易采用的。

目前,build dozer和python-for-android是最推荐的构建/打包应用程序的工具。我已经尝试过这两种方法,可以肯定地说,它们让用Python构建Android应用程序变得轻而易举。在控制台/终端/命令提示符中感觉舒适的用户使用它们应该没有问题,而且他们的指南也有很好的文档。

此外,iOS是Kivy的另一大卖点,提供,您可以使用相同的代码基的小变化要求也是你的iOS设备上,通过kivy-ios自酿酒工具,尽管Xcode需要构建在他们的设备上运行(AFAIK iOS模拟器在Xcode中目前对x86架构构建不起作用)。还有一些依赖关系问题,必须手动编译并在Xcode中进行处理才能获得成功的构建,但是这些问题并不难解决,Kivy谷歌组的人员也非常有帮助。

综上所述,具有良好Python知识的用户应该可以在几周(如果不是几天)内掌握一些基本知识,从而构建一些简单的应用程序。

另外值得一提的是,您可以将Python模块(构建配方)与构建包在一起,这样用户就可以真正利用Python提供给我们的许多现有库,比如request &通过Kivy的扩展支持PIL等。

Sometimes your application requires functionality that is beyond the
scope of what Kivy can deliver. In those cases, it is necessary to
resort to external software libraries. Given the richness of the
Python ecosystem, there is already a lot of software
libraries that you can simply import and use right away.

最后但并非最不重要的是,如果您打算将Kivy用于更严肃/商业的项目,您可能会发现现有的模块并不令人满意。尽管有一些可行的解决方案,pyjnius针对Android和pyobjus的"工作正在进行中"。用户现在可以通过这些模块访问Java/Objective-C类来控制一些本地api。

我在Kivy的经验是,它最适合经验丰富的Python程序员和一些需要快速开发或简单代码库维护的严肃程序员。它在多个平台上都运行得很好,尽管不是真正的原生感觉。

我确实希望一些Python应用程序程序员发现这些信息有用,并开始研究Kivy。如果社区对此有很大的兴趣,它只会变得更好(随着更多的支持和库/模块的移植)。

附注:我与Kivy没有任何关系,我只是一个非常喜欢将Python编程的乐趣带到移动/跨平台开发中的程序员。


现在还没有,如果Jython能够很快投入使用,那就太幸运了。如果您现在打算开始开发,那么最好现在只使用Java。


使用SL4A(在其他答案中已经提到),您可以运行一个完整的web2py实例(其他python web框架也可能是候选的)。SL4A不允许您执行本机UI组件(按钮、滚动条等),但它支持webview。WebView基本上就是一个指向固定地址的条状web浏览器。我相信本机Gmail应用程序使用WebView而不是常规的小部件路由。

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

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


我使用QPython应用程序。它有一个编辑器、一个控制台,您可以用它运行Python程序。该应用程序是免费的,链接是http://qpython.com/。


来自Python for android站点:

Python for android is a project to create your own Python distribution including the modules you want, and create an apk including python, libs, and your application.


你可以使用Termux应用程序:

注意,apt install python安装python 3。对于python2,你应该调用apt安装python2。

这里有一些演示:https://www.youtube.com/watch?v=fqqsl72mASE

还有github页面:https://github.com/termux


还有一个尝试:https://code.google.com/p/android-python27/

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


Chaquopy

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

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

它可以自动下载PyPI包并将其构建到应用程序中,包括选择的本地包,如NumPy。

它支持从Python完全访问所有Android api,包括本地用户界面工具包(例如pure-Python活动)。

这是一个商业产品,但它是免费的开源使用,并将永远保持这种方式。

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


芯片上的python也可能运行mosync:谷歌组


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

您可以学习sl4a Python示例。


你可以使用QPython:

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

http://qpython.com/

它是一个同时具有python2和python3实现的开源项目。您可以直接从github下载源代码和Android .apk文件。

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

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


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

Playstore链接

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

1
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和Qt现在Qt工作在Android感谢必需品。

目前看来,这似乎是一个相当拼凑,但最终可能是一个可行的路线…

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


如果您正在寻找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位


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

a tool that, in conjunction with other tools provided with Qt, enables
the deployment of PyQt4 and PyQt5 applications written with Python
v2.7 or Python v3.3 or later. It supports deployment to desktop
platforms (Linux, Windows and OS X) and to mobile platforms (iOS and
Android).

通过pyqtdeploy和Qt5将PyQt5应用程序部署到Android上,目前正在积极开发中,虽然很难找到运行Android应用程序的例子,也很难找到如何将所有需要的库交叉编译到Android上的教程。这是一个值得记住的有趣的项目!


来看看蜂箱吧。在回答这个问题的时候,它还处于早期开发阶段。它的目标是能够用Python为所有支持的操作系统(包括Android)创建本机应用程序。


查看珐琅-native,它接受了反应式-本机的概念,并将其应用于python。

它允许用户使用本地Android小部件构建应用程序,并提供使用python中的Android和java库的api。

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