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

我们正在开发S60版本,该平台具有不错的 Python API。

但是,关于 Android 上的 Python 尚无任何官方资料,但是由于Jython存在,有没有办法让蛇和机器人一起工作?

答案

一种方法是使用Kivy

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

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

Kivy Showcase 应用程序

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

注意:不再处于 “主动开发” 之下,但是可能有一些分支。

是! : 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)

还有 Google 员工大量编写的SL4A

适用于 Android 的 Pygame 子集

Pygame是适用于 Python(在桌面上)的 2D 游戏引擎,在新程序员中很流行。 AndroidPygame 子集将自己描述为...

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

示例包括打包为 APK 的完整游戏,这很有趣。

交叉编译和 Ignifuga

我的博客提供用于 Android 的 Python 2.7.2 交叉编译的说明和补丁

我还开源了我的 2D 游戏引擎Ignifuga 。它基于 Python / SDL,并且可以为 Android 交叉编译。即使您不将其用于游戏,您也可能会从代码或构建器实用程序(以 Tim 命名的Schafer …… 知道谁)中得到有用的想法。

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 脚本中打开 Web 视图,然后将 HTML5 用作用户界面。当您使用 Python 中的 Web 视图时,可以在 Web 视图和生成它的 Python 进程之间来回传递消息。用户界面不会是本机的,但仍然是一个不错的选择。
  • 一些对 Android 本机用户界面的支持,但是我不确定它的运行情况如何;我只是从未使用过它。

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

QPython 的

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

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

请注意,QPython 仍在开发 SL4A 的分支(尽管,说实话,没有太多)。 SL4A 的主要项目本身已经死了。

有用的链接

作为一个Python 的爱好者和 Android 程序员,我很伤心地说,这是不要去,因为有两个问题的好办法;

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

另一个问题是 G1(以及不久的将来可能还有其他 Android 设备)的运行速度并不快。 200 MHz 处理器和 RAM 非常有限。即使是在 Java 中,如果要使应用程序完全流畅,也必须进行大量重写以避免创建更多对象。在移动设备上运行一段时间后,Python 将变得太慢。

基维

我想补充一下 @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,但是在其设备上运行之前(AFAIK,Xcode 中的 iOS Simulator 当前不适用于 x86 体系结构构建) 。为了成功构建,还必须手动在 Xcode 中解决一些依赖项问题,并加以解决,但这并不会太难解决,并且Kivy Google Group 的人员也非常有帮助。

综上所述,具有良好 Python 知识的用户应该不会很快就掌握基础知识。

如果将 Kivy 用于更严重的项目,则可能会发现现有模块不令人满意。虽然有一些可行的解决方案。通过适用于 Android 的pyjniuspyobjus ,用户现在可以访问 Java / Objective-C 类来控制某些本机 API。

目前还没有,您很幸运能让 Jython 很快上班。如果您打算现在开始开发,那么最好还是坚持使用 Java。