使用Python进行Android编程的QPython或Kivy - 生成可安装apk

25

我读了几篇SO上的问答,发现有两种选择,即QPython和Kivy来进行Android编程,然而,显然两者采用不同的方法。我正在尝试验证我的理解,并查看是否遗漏了一些重要信息。

  • QPython允许使用Kivy库开发图形应用程序
  • QPython和Kivy都使用SL4A,但是QPython通过添加一些NFC和类似功能扩展了标准SL4A(或其Python绑定)
  • QPython用于创建可以使用各种模块、库的Python脚本,但需要在目标设备上安装QPython才能执行。没有将脚本打包成apk的方法。
  • Kivy允许开发人员编写应用程序,使用他们的基于云的构建系统编译为apk(另外,可以在Ubuntu Linux上设置本地构建系统)[然而,我注意到大多数使用Kivy的示例apk都相当大,约为40MB。我有遗漏什么吗?]
  • QPython apk有两个版本,即Python-2.7和Python-3.x。对于Kivy,我不确定它是哪个版本。
  • 最新的QPython-3.x从市场上获取,在Android Kitkat(4.4.2)系统上,QPython示例脚本(HelloWorld.py)似乎表现不如预期。我得到输入文本的对话框,但是我希望弹出一个Toast,但是没有任何反应。
  • 我觉得QPython和Kivy都是由单个开发人员开发的(或者只有一个人目前活跃),并且尚没有大型社区。[这是我最担心的]我注意到SO上有3-4个带有“qpython”标签的问题,而有超过一千个带有“kivy”标签的问题!
  • 同时,我觉得Kivy的开发目前比QPython更加活跃(也许相当活跃),但是对于QPython,我没有清晰的了解。
  • 与QPython相比,Kivy似乎正在试图扩展可能使用它编写的应用程序的性质。有像plyerpyjnius这样的API可以帮助扩展可能性。与QPython相比,可能相当显著。
  • QPython和Kivy似乎都在积极开发中。两组工具都报告了程序/脚本崩溃/失败。

总的来说,由于以上原因,人们的意见似乎更倾向于Kivy。我的理解正确吗?我有漏掉任何重要的点吗?这不是一个修辞问题,我只寻求事实答案。

2个回答

16
QPython允许使用Kivy库开发图形应用程序。
是的,qpython是一个解释器加相关工具,并具有一些不错的kivy集成。但你不能仅使用qpython + android编译kivy代码为独立的apk文件。
QPython和Kivy都使用SL4A,但QPython通过添加一些NFC和类似功能来扩展标准的SL4A(或其Python绑定)。
Kivy不使用SL4A。我们主要通过pyjnius实现android api集成,这是一个用于自动包装Java类与Python的库,它使您能够直接调用Java API。此外,我们还将某些标准事物抽象为面向Python的接口plyer。
QPython用于创建可以使用各种模块、库的Python脚本,但需要在目标设备上安装QPython才能执行它们。没有将脚本打包成apk的方法。
我不常使用qpython,但我认为这是正确的,尽管在某些情况下可能有一些工具可以将脚本转换为apk文件(例如,如果您有一个与kivy界面相关的项目,则可以使用kivy的构建工具,或者sl4a可能有类似功能)。
相比之下,Kivy允许开发人员编写可以编译为apk文件的应用程序,使用他们基于云的构建系统(另外,也可以在Ubuntu Linux上设置本地构建系统)。然而,我注意到大多数使用Kivy的样例apk都非常大,约为40MB。我错过了什么吗?
我们有基本的云构建系统,但目前没有其他类似的工具,几乎所有人都使用我们的Android构建工具在自己的机器上构建apk。这些工具在Linux或OSX上运行,并且如果必要,可以很容易地在虚拟机中运行。最小的应用程序由于需要捆绑Python解释器和许多模块,因此具有约7MB的APK大小。

QPython apk有两个版本,一个是用于Python-2.7的,另一个是用于Python-3.x的。至于Kivy,我不确定它是哪个版本。

Kivy本身支持Python3,但我们的Android构建工具目前仅支持Python2.7。

我对QPython和Kivy的印象是它们各自由一个开发者开发(或只有一个人现在处于活跃状态),并且还没有很大的社区。[这是我的最大关注点] 我注意到SO上有3-4个带有“qpython”标签的问题,而有超过一千个带有“kivy”标签的问题!

Kivy的开发非常活跃,有几位定期贡献者以及更多零散的贡献者。例如您可以看到最近的提交活动on github。它绝对不仅仅只有一个开发者!

与QPython相比,Kivy似乎试图扩展可能使用它编写的应用程序的性质。有像plyer和pyjnius这样的API可以帮助扩展可能性。与QPython相比,这可能相当显著。

我认为QPython包括pyjnius。关于plyer我不确定。

我不确定您正在关注什么,但是任何非平凡项目都会有崩溃/失败/错误报告。我不认为kivy特别本质上不稳定。

总的来说,由于以上观点,意见似乎更倾向于Kivy一些。

我会说qpython和kivy是两种非常不同的东西。Qpython允许您编写和运行脚本,而kivy则是一个图形框架及其相关工具,用于创建独立应用程序。它们之间有一些重叠任务可以使用,但也有很多不适合它们两个的任务-例如,我认为qpython可能更方便制作没有GUI(例如简单自动化)的快速脚本,而我认为kivy是创建带有非平凡GUI的独立应用程序的更好选择。当然,您可以在qpython中编写kivy代码(如上所述),但对于任何非平凡的内容,这并不是很好的用户体验,而且您需要台式机/笔记本电脑来制作独立apk。


1
虚拟机镜像应该可以正常工作,尽管它目前有点过时,我们很可能会很快更新它。 - inclement
@icarus74,对于提高生产力的Android应用程序,将Python 3.4与JavaScript Cordova结合在一个APK中,对于非GUI部分是否有意义?GUI只需要看起来/感觉像本地应用程序并具有触摸功能,理想情况下,APK应该在安装后打包运行,而不需要用户下载一系列依赖项。我没有计划使用iOS进行跨平台开发。Windows 8+ / Linux Ubuntu 14.04是我可能尝试针对的跨平台环境。 - codeReview
1
@codeReview,这听起来可能是一个很好的方法,但我不太确定是否有明显的方法来桥接Kivy/Qpython本地部分和Cordova,除非有人编写(或已经编写)插件。这在许多业务逻辑可以编写/已经存在 - 用Python编写,并且用户交互仅偶尔发生时特别有用。无论如何,值得探索。 - bdutta74
我关注的是模块:numpy、scipy和matplotlib。它们只支持numpy。所以我无法继续我的工作。 - Slim_user71169
Matplotlib在Android上运行可能相当容易,我们刚刚完成了一个gsoc项目。因此,其中一些工作已经完成。我认为scipy的支持不太可能。 - inclement
显示剩余8条评论

3

至少有两种(尽管据我所知只是理论上的)方法可以在Android上运行Python代码:

  • 使用并将Java字节码转换为Dalvik,如其他地方所述。不幸的是,并非所有的CPython库,例如numpy,都适用于jython,如果您使用Java库,请记住Android没有提供与桌面JRE相同的库
  • 使用,它从您的Python代码生成C++代码。然后使用

1
感谢回答,Tobias。阅读链接的SO问答,似乎jython只是一个理论上的可能性,后来被证明是一种几乎不切实际的方法。当然,除非我错过了什么。总的来说,感谢关于Nuitka的提示。我从未知道它的存在,对于性能至关重要的情况非常有趣。 - bdutta74
1
我不会称jython为不切实际的方法,只是一个未经测试的方法(因此可能很繁琐),我计划在不久的将来改变这种情况... 关于性能优化,您还应该检查numpy(或PyPy、Cython和可能的Shedskin)。 - Tobias Kienzler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接