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

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

然而,在Android上没有什么官方的Python,但是由于Jython的存在,有没有办法让蛇和机器人一起工作呢?

一种方法是使用Kivy :

开源的Python库,可以快速开发使用创新用户界面(如多点触控应用程序)的应用程序。

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

Kivy展示应用程序

还有新的Android脚本环境 (ASE / SL4A)项目。 它看起来很棒,它与原生的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) 

还有Google员工编写的SL4A 。

“ 用于Android的Pygame子集是Android平台上Pygamefunction的一个子集,该项目的目标是允许创build特定于Android的游戏,并将游戏从PC类平台移植到Android “。

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

我已经发布了用于交叉编译Python 2.7.2 for Android的说明和补丁,可以在我的博客上find它: http : //mdqinc.com/blog/2011/09/cross-compiling-python-for-android /

编辑:我已经开源Ignifuga ,我的2D游戏引擎,它是基于Python / SDL,它交叉编译为Android。 即使你不使用游戏,你也可以从代码和builder工具中获得有用的想法(在Tim之后,你知道是谁)。

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

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

另一个问题是,G1(也可能是其他Android设备在不久的将来)真的不是那么快。 200 MHz的处理器,而且RAM非常有限。 即使在Java中,如果要使应用程序完美平滑,还必须进行大量的重写以避免更多的对象创build。 Python仍然会在移动设备上运行一段时间。

SL4A

Android的脚本层做你想要的。 您可以从他们的站点直接将其直接安装到您的设备上,而不需要root。

它支持一系列语言; Python是最成熟的。 默认情况下,它使用Python 2.6,但是可以使用3.2端口 。 我用这个端口在Galaxy S2上的各种东西,它工作得很好。

API

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

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

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

 var droid = new Android(); droid.ttsSpeak('hello from js'); 

用户界面

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

  • 您可以通过API轻松使用通用本机对话框和菜单。 这对于确认对话和其他基本的用户input是很好的。
  • 您也可以从Python脚本中打开一个webview,然后使用HTML5作为用户界面。 当您使用来自Python的webview时,您可以在webview和产生它的Python进程之间来回传递消息。 用户界面不会是原生的,但它仍然是一个很好的select。
  • 原生Android用户界面有一些支持,但我不确定它的工作效果如何; 我只是没有用过它。

你可以混合选项,所以你可以有一个主界面的网页视图,仍然使用本地对话。

QPython

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

QPython为您提供了一个更好的用户界面来pipe理您的安装,并且包含一个小小的触摸屏代码编辑器,一个Python shell和一个用于包pipe理的PIPshell。 他们也有一个Python 3端口。 这两个版本都可以从Play商店免费获得。 QPython还捆绑了包括Kivy在内的Android项目上的一大堆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

目前还不行,您很快就能获得Jython的支持。 如果你打算现在开始你的开发,那么现在只要坚持使用Java就会更好。

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

这条路线会有一些有趣的function:

  • 在大多数python web框架的情况下,你可以实际开发和testing,而不使用android设备或android模拟器。
  • 不pipe你写给手机的Python代码是什么,也可以放在一个公共的networking服务器上,只需很less的修改(如果有的话)。
  • 你可以利用所有疯狂的网页内容:查询,HTML5,CSS3等

Kivy


我想发布这个作为@JohnMudd已经回答了什么的扩展( 但是,由于英文不是我的第一语言,所以请 原谅

从那时起, Kivy已经发展到了v1.9-dev ,我认为Kivy的最大卖点就是它的跨平台兼容性,你可以在你的本地环境(Windows / * nix等)下进行编码和testing。) ,您还可以构build,debugging和打包您的应用程序以在Android / iOS / Mac / Windows设备上运行。

使用Kivy自己的KV语言,可以很容易地编写和构buildGUI界面(就像Java XML,而不是TextView等, KV有自己的ui.widgets用于类似的翻译),这在我看来很容易采用。

目前Buildozerpython-for-android是推荐的工具来构build/打包应用程序。 经过两次尝试,我可以坚信,他们使用Python构buildAndroid应用程序变得轻而易举。 在控制台/terminal/命令提示符下感觉舒适的用户应该没有使用它们的问题,而且他们的指南也有很好的文档logging。

此外, iOS是Kivy的另一大卖点,前提是您可以使用相同的代码库,只需在iOS设备上进行testing运行所需的小改动即可,通过kivy-ios Homebrew工具即可,但运行前需要Xcode他们的设备(Xcode中的AFAIK iOS模拟器目前不适用于x86架构版本)。 还有一些依赖问题需要在Xcode中手动编译和摆弄,才能成功构build,但不会太难以解决,而且Kivy Google Group中的人员也真的很有帮助。

所有人都说,具有良好的Python知识的用户应该没有问题在几周(如果不是几天)拿起基础来构build一些简单的应用程序。

另外值得一提的是,您可以将Python模块与构build绑定(构build配方) ,以便用户可以真正使用Python为我们带来的许多现有库,例如通过Kivy的扩展支持的 Requests & PIL等。

有时候,您的应用程序需要的function超出了Kivy所能提供的范围。 在这种情况下,有必要诉诸外部软件库。 鉴于Python生态系统的丰富性,已经有大量的软件库可以直接导入和使用。

最后但并非最不重要的是,如果您打算使用Kivy进行更严肃的商业项目,您可能会发现现有的模块不能满足预期的要求。 还有一些可行的解决scheme,用于Andoird的pyjnius和pyobjus的“正在进行中”,用户现在可以通过这些模块访问Java / Objective-C类来控制一些本地API。

我在Kivy的经验是,它会find最适合季节性Python程序员和一些想要快速开发或简单的代码库维护的严肃的程序员。 它在多个平台上运行良好,尽pipe不在本地感受的水平。

我希望更多的Python / app程序员发现我的小信息有用,并开始看看Kivy,如果社区有很大的兴趣,它只会变得更好(更多支持和库/模块被移植)。

PSI与Kivy没有任何关系,我只是一个程序员,他非常喜欢把Python编码带给移动/跨平台开发的乐趣。

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

从Android的网站Python :

对于android的Python是一个项目,以创build自己的Python发行版,包括你想要的模块,并创build一个apk包括python,libs和你的应用程序。

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

这个直接在您的应用程序apk中embeddedPython解释器。

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

您可以学习sl4a Python示例 。

也有可能运行mosync: google组的 python-on-a-chip

没有看到这张贴在这里,但你可以用Pyside和Qt做到这一点,现在Qt在Android上的工作得益于Necessitas。

现在看起来相当混乱,但最终可能是一条可行的路线…

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

如果你正在寻找3.4.2或3.5.1的另一个select是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。 通过对构build文件进行一些修改,你也可以制作x86和armeabi 64位

您可以使用Termux应用程序:

注意apt安装python安装python 3.对于python 2你应该调用apt来安装python2。

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

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

你可以使用QPython

它有一个Python控制台,编辑器以及软件包pipe理/安装程序

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

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

Playstore链接

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

 packages install python 

Playstore链接

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

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

根据通过pyqtdeploy和Qt5部署到Android的PyQt5应用程序,它是积极开发,虽然很难find工作的Android应用程序的例子或教程如何交叉编译所有需要的库到Android。 请记住这是一个有趣的项目!