编辑:我已开源Ignifuga,我的2D游戏引擎,'s Python/SDL based and it cross compiles for Android. Even if you don' t用它来进行游戏,你可能会从代码和构建器实用程序中获得有用的想法(在Tim之后命名为Schafer ......你知道是谁) .
此外,iOS是Kivy的另一大卖点,前提是您可以使用相同的代码库,只需通过kivy-ios Homebrew工具在iOS设备上进行测试运行所需的更改,尽管在运行设备之前需要Xcode进行构建(Acode在Xcode中的iOS模拟器目前还不太难解决,Kivy Google Group中的人也非常有帮助 .
I do hope some Python app programmers find this information useful and start taking a look at Kivy. It can only get better (with more support and as libraries/modules get ported) if there is great interest from the community.
25 回答
来自Python for android网站:
您可以使用Termux应用程序:
注意apt安装python安装python 3.对于python 2,你应该调用apt install python2 .
这里有一些演示:https://www.youtube.com/watch?v=fqqsl72mASE
还有github页面:https://github.com/termux
“Pygame Subset for Android是Android平台的Pygame功能子集的一个端口 . 该项目的目标是允许创建特定于Android的游戏,并简化从类似PC的平台到Android的游戏移植 . ”
这些例子包括一个包装在APK中的完整游戏,非常有趣 .
playstore中有一个名为QPython3的应用程序,可用于编辑和运行python脚本 .
Playstore link
另一个名为Termux的应用程序,您可以使用命令安装python
Playstore Link
你可以使用 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
YES!
一个例子via Matt Cutts来自SL4A - “这是一个用六行Python代码编写的条形码扫描器:
还有可能运行mosync的python-on-a-chip:google group
另一个选项似乎是pyqtdeploy,引用文档是:
根据Deploying PyQt5 application to Android via pyqtdeploy and Qt5它正在积极开发,虽然很难找到工作Android应用程序的示例或如何将所有必需的库交叉编译到Android的教程 . 尽管如此,这是一个有趣的项目!
还有新的Android Scripting Environment(ASE / SL4A)项目 . 它看起来很棒,并且与原生Android组件有一些集成 .
注意:不再在“积极开发”下,但有些叉子可能会 .
又一次尝试:https://code.google.com/p/android-python27/
这个直接嵌入你的应用程序apk中的Python解释器 .
作为一个爱好者和Android程序员,我很遗憾地说这不是一个好方法 . 有两个问题 .
一个问题是Android开发工具不仅仅是一种编程语言 . 很多Android图形都涉及配置显示的XML文件,类似于HTML . 内置的java对象实际上与这个XML布局集成在一起,并且比编写自己的代码从逻辑到位图要容易得多 .
另一个问题是G1(以及可能在不久的将来可能还有其他Android设备)真的不那么快 . 200 MHz处理器和RAM非常有限 . 即使在Java中,如果你想让你的应用程序非常流畅,你也必须做大量的重写 - 避免更多的对象创建 . Python仍会在移动设备上停留太长时间 .
我使用QPython应用程序 . 它有一个编辑器,一个控制台,你可以用它运行你的Python程序 . 该应用程序是免费的,链接是http://qpython.com/ .
看看BeeWare . 在回答这个问题时,它仍处于早期发展阶段 . 它的目标是能够为所有支持的操作系统(包括Android)使用Python创建本机应用程序 .
一种方法是使用Kivy:
Kivy Showcase app
我已经发布了针对Android交叉编译Python 2.7.2的说明和补丁,你可以在我的博客上找到它:http://mdqinc.com/blog/2011/09/cross-compiling-python-for-android/
编辑:我已开源Ignifuga,我的2D游戏引擎,'s Python/SDL based and it cross compiles for Android. Even if you don' t用它来进行游戏,你可能会从代码和构建器实用程序中获得有用的想法(在Tim之后命名为Schafer ......你知道是谁) .
Kivy
我想发布这个作为 @JohnMudd 已经回答的内容的延伸(但请跟我一起,因为英语不是我的第一语言)
从那时起已经有好几年了,Kivy已经发展到v1.9-dev . 在我看来,Kivy的最大卖点是它的跨平台兼容性 . 您可以在本地环境(Windows / * nix等)下进行编码和测试构建,调试和打包您的应用程序,以便在Android / iOS / Mac / Windows设备上运行 .
使用Kivy自己的KV语言,您可以轻松编写和构建GUI界面(它就像Java XML,而不是TextView等,KV有类似翻译的
ui.widgets
),在我看来很容易采用 .目前,Buildozer和python-for-android是建议/打包应用程序的最佳工具 . 我已经尝试过这两种方法,并且可以坚定地说,他们使用Python构建Android应用程序变得轻而易举 . 在控制台/终端/命令提示符下感觉舒适的用户应该没有使用它们的问题,并且他们的指南也有详细记录 .
此外,iOS是Kivy的另一大卖点,前提是您可以使用相同的代码库,只需通过kivy-ios Homebrew工具在iOS设备上进行测试运行所需的更改,尽管在运行设备之前需要Xcode进行构建(Acode在Xcode中的iOS模拟器目前还不太难解决,Kivy Google Group中的人也非常有帮助 .
总而言之,具有良好Python知识的用户应该在几周内(如果不是几天)获取基础知识来构建一些简单的应用程序 .
另外值得一提的是,您可以使用构建捆绑(构建配方)您的Python模块,这样用户就可以真正利用Python带来的许多现有库,例如Requests&PIL等,通过Kivy's extension support .
最后但并非最不重要的是,如果您打算将Kivy用于更严肃/商业项目,您可能会发现现有模块并不令人满意 . 但是有一些可行的解决方案,"work in progress"为pyjnius for Android,和pyobjus . 用户现在可以通过这些模块访问Java / Objective-C类来控制一些本机API .
我在Kivy的经验是,它会发现它最适合经验丰富的Python程序员和一些想要快速开发或简单代码库维护的认真程序员 . 它在多个平台上运行良好,虽然不是真正的本土感觉 .
I do hope some Python app programmers find this information useful and start taking a look at Kivy. It can only get better (with more support and as libraries/modules get ported) if there is great interest from the community.
附:我与Kivy没有任何关系,我只是一个真正喜欢将Python编码带入移动/跨平台开发的想法的程序员 .
没有看到这个发布在这里,但你可以用Pyside和Qt做到现在Qt可以在Android上运行,感谢Necessitas .
这似乎是目前相当不错的一部分,但最终可能是一条可行的路线......
http://qt-project.org/wiki/PySide_for_Android_guide
您可以使用sl4a运行Python代码 . sl4a支持Python,Perl,JRuby,Lua,BeanShell,JavaScript,Tcl和shell脚本 .
你可以学习sl4a Python Examples .
查看enaml-native,它采用react-native概念并将其应用于python .
它允许用户使用原生Android小部件构建应用程序,并提供API以使用python中的android和java库 .
它还与android-studio集成,并分享一些反应良好的开发功能,如代码重新加载和远程调试 .
如果您正在寻找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位
Google员工也大量写了SL4A .
适用于Android的脚本层
SL4A做你想要的 . 您可以从他们的站点直接将其直接安装到您的设备上,而不需要root .
它支持多种语言 . Python是最成熟的 . 默认情况下,它使用Python 2.6,但您可以使用3.2 port . 我已经在Galaxy S2上使用了那个端口用于各种各样的东西,它工作得很好 .
API
SL4A为每种支持的语言提供了
android
库的端口 . 该库通过单个Android
对象提供底层Android API的接口 .每种语言都有相同的API . 您甚至可以在Web视图中使用JavaScript API .
用户界面
对于用户界面,您有三个选项:
您可以通过API轻松使用通用的本机对话框和菜单 . 这适用于确认对话和其他基本用户输入 .
您还可以从Python脚本中打开Web视图,然后使用HTML5作为用户界面 . 当您使用Python的Web视图时,您可以在webview和生成它的Python进程之间来回传递消息 . 该UI不是原生的,但它仍然是一个很好的选择 .
对原生Android用户界面有一些支持,但我不确定它有多好用;我只是没用过它 .
您可以混合选项,这样您就可以拥有主界面的webview,并仍然使用本机对话 .
QPython
有一个名为QPython的第三方项目 . 它 Build 在SL4A之上,并引入了一些其他有用的东西 .
QPython为您提供了更好的UI来管理您的安装,并包含一个小的触摸屏代码编辑器,一个Python shell和一个用于包管理的PIP shell . 他们还有一个Python 3端口 . 这两个版本都可以从Play商店免费获得 . 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(已经在其他答案中已经提到过),你可以run一个完整的web2py实例(其他python web frameworks也可能是候选者) . SL4A不允许您使用本机UI组件(按钮,滚动条等),但它确实支持WebViews . WebView基本上只是一个指向固定地址的条带化Web浏览器 . 我相信原生Gmail应用使用WebView而不是常规小部件路径 .
这条路线会有一些有趣的特点:
在大多数python web框架的情况下,你可以实际开发和测试,而无需使用Android设备或Android模拟器 .
无论您最终为手机编写的Python代码也可以放在公共网络服务器上,只需很少(如果有)修改 .
你可以利用所有疯狂的网络内容:查询,HTML5,CSS3等 .
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) .
这是一个商业产品,但它可以免费用于开源使用,并且将始终保持这种状态 .
(我是这个产品的创造者 . )
不是现在,你很幸运能让Jython尽快上班 . 如果您现在计划开始开发,那么现在只需坚持使用Java就可以了 .