提问



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


但是,在Android上没有关于Python的官方消息,但是由于Jython存在,有没有办法让蛇和机器人一起工作?[9]

最佳参考


一种方法是使用Kivy:[10]



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







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



Kivy展示应用[11]

其它参考1


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


注意:不再在积极开发下,但有些叉子可能会。

其它参考2


YES![13]


Matt Cutts通过SL4A的一个例子 - 这是用六行Python代码编写的条形码扫描器:[14]


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)

其它参考3


还有谷歌员工写的SL4A。[15]

其它参考4


Android的Pygame子集是Android平台的Pygame功能子集的一个端口。该项目的目标是允许创建特定于Android的游戏,并简化从类似PC的游戏移植Android平台。 [16]


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

其它参考5


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


编辑:我已经开源Ignifuga,我的2D游戏引擎,它基于Python/SDL,它可以交叉编译Android。即使你不将它用于游戏,你也可以从代码和构建器实用程序中获得有用的想法(在Tim之后命名为Schafer ......你知道是谁)。[18]

其它参考6


Android脚本层



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


它支持多种语言。 Python是最成熟的。默认情况下,它使用Python 2.6,但您可以使用3.2端口。我已经将这个端口用于Galaxy S2上的所有类型的东西,它运行良好。[20]


API



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


from android import Android

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


每种语言都有相同的API。您甚至可以在Web视图中使用JavaScript API。


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


用户界面



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



  • 您可以轻松地使用通用的本机对话框和菜单
    API。这适用于确认对话和其他基本用户输入。

  • 您还可以从Python脚本中打开webview,然后使用HTML5
    用户界面。当您使用Python的Web视图时,您可以通过
    在webview和Python进程之间来回传递消息
    催生了它。用户界面不是原生的,但它仍然是一个很好的选择
    有。

  • 本机Android用户界面有一些支持,但我不是
    确定它的工作原理;我还没有用过它。



您可以混合选项,这样您就可以拥有主界面的webview,并仍然使用本机对话。


QPython



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


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


其它参考7


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


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


另一个问题是G1(以及可能在不久的将来可能还有其他Android设备)真的不那么快。 200 MHz处理器和RAM非常有限。即使在Java中,如果你想让你的应用程序非常流畅,你也必须做大量的重写 - 避免更多的对象创建。 Python仍会在移动设备上停留太长时间。

其它参考8


不是现在,你很幸运能让Jython尽快上班。如果您现在计划开始开发,那么现在只需坚持使用Java就可以了。

其它参考9


Kivy






我想发布这个作为 @JohnMudd 已经回答的内容的延伸(但请跟我一起,因为英语不是我的第一语言)


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


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


目前,Buildozer和python-for-android是构建/打包应用程序的最佳推荐工具。我已经尝试过这两种方法,并且可以坚定地说,他们使用Python构建Android应用程序变得轻而易举。在控制台/终端/命令提示符下感到舒服的用户在使用它们时应该没有问题,并且他们的指南也有很好的文档记录。[27] [28]


此外,iOS是Kivy的另一大卖点,前提是您可以使用相同的代码库,只需通过kivy-ios Homebrew工具在iOS设备上进行测试运行所需的更改,尽管在运行之前需要Xcode进行构建他们的设备(Xcode中的iOS模拟器AFAIK目前不适用于x86体系结构)。还有一些依赖性问题必须在Xcode中手动编译和摆弄才能成功构建,但是他们不会太难解决,Kivy Google Group的人也非常有帮助。[29] [30]


总而言之,具有良好Python知识的用户应该在几周内(如果不是几天)获取基础知识来构建一些简单的应用程序。


另外值得一提的是,您可以使用构建捆绑(构建配方)您的Python模块,这样用户就可以真正利用Python带给我们的许多现有库,例如Requests& PIL等通过Kivy的扩展支持。[31] [32] [33]



  有时您的应用程序需要的功能超出了
  Kivy可以提供的范围。在那些情况下,有必要
  求助于外部软件库。鉴于丰富的
  Python生态系统,已经有很多软件
  您可以直接导入和使用的库。



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


我在Kivy的经验是,它会发现它最适合经验丰富的Python程序员和一些想要快速开发或简单代码库维护的认真程序员。它在多个平台上运行良好,虽然不是真正的原生感觉。


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


P.S。我与Kivy没有任何关系,我只是一个真正喜欢将Python编码带入移动/跨平台开发的想法的程序员。

其它参考10


使用SL4A(已经在其他答案中已经提到过),你可以运行一个成熟的web2py实例(其他python web框架也可能是候选者)。 SL4A不允许你做本机UI组件(按钮,滚动条等),但它确实支持WebViews .WebView基本上只是一个指向固定地址的条带化Web浏览器。我相信本机Gmail应用使用WebView而不是常规小部件路径。[36] [37] [38] [39]


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



  • 在大多数python web框架的情况下,你可以实际开发和测试,而无需使用Android设备或Android模拟器。

  • 无论您最终为手机编写什么Python代码,也可以将其放在公共网络服务器上,只需很少(如果有)修改。

  • 您可以利用所有疯狂的网页内容:查询,HTML5,CSS3等。


其它参考11


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

其它参考12


从Python for android网站:[41]



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


其它参考13


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


这个直接嵌入你的应用程序apk中的Python解释器。

其它参考14


您可以使用Termux应用程序:[43]


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


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


还有github页面:https://github.com/termux [45]

其它参考15


您可以使用sl4a运行Python代码。 sl4a支持Python,Perl,JRuby,Lua,BeanShell,JavaScript,Tcl和shell脚本。[46] [47] [48] [49] [50]


你可以学习sl4a Python的例子。[51]

其它参考16


还有可能正在运行mosync的python-on-a-chip:google group [52]

其它参考17


您可以使用 QPython :


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


http://qpython.com/[53]


它是一个包含Python 2和Python 3实现的开源项目。您可以直接从github下载源代码和Android .apk文件。


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


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

其它参考18


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


Playstore链接[56]


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


pkg install python


Playstore Link [57]

其它参考19


如果您正在寻找3.4.2或3.5.1的另一个选项是GitHub上的这个存档。


Python3-Android 3.4.2或Python3-Android 3.5.1 [58] [59]


它目前支持Python 3.4.2或3.5.1以及NDK的10d版本。它还可以支持3.3和9c,11c和12


这很好,因为你只需下载它,运行make然后你得到.so或.a


我目前使用它在Android设备上运行原始Python。通过对构建文件的一些修改,您还可以使x86和armeabi 64位

其它参考20


Chaquopy



Chaquopy是Android Studio基于Gradle的构建系统的插件。它专注于与标准Android开发工具的紧密集成。[60] [61]



  • 它提供了完整的API来从Python调用Java或从Java调用Python,允许开发人员使用最适合他们应用程序的每个组件的语言。[62] [63]

  • 它可以自动下载PyPI包并将它们构建到一个应用程序中,包括选定的本机包,如NumPy。[64]

  • 它支持从Python完全访问所有Android API,包括本机用户界面工具包(示例纯PythonActivity)。[65]



这是一种商业产品,但它对于开源使用是免费的,并且将始终保持这种状态。


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

其它参考21


没有看到这个发布在这里,但你现在可以用Pyside和Qt这样做,因为Qt可以在Android上运行,这要归功于Necessitas。


这似乎是目前相当不错的一部分,但最终可能是一条可行的路线......


http://qt-project.org/wiki/PySide_for_Android_guide[66]

其它参考22


另一个选项似乎是pyqtdeploy,它引用了文档:[67]



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



根据通过pyqtdeploy和Qt5将PyQt5应用程序部署到Android,它是积极开发的,虽然很难找到工作Android应用程序的示例或如何将所有必需的库交叉编译到Android的教程。尽管如此,这是一个有趣的项目!

其它参考23


看看BeeWare吧。在回答这个问题时,它仍处于早期发展阶段。它的目标是能够为所有支持的操作系统(包括Android)创建使用Python的本机应用程序。[69]

其它参考24


查看enaml-native,它采用react-native概念并将其应用于python。 [70]


它允许用户使用原生Android小部件构建应用程序,并提供API以使用python中的android和java库。


它还与android-studio集成,并分享了一些反应良好的开发功能,如代码重新加载和远程调试。