在 jython 中编写 Android 应用程序

Posted

技术标签:

【中文标题】在 jython 中编写 Android 应用程序【英文标题】:Programming Android apps in jython 【发布时间】:2012-06-22 14:57:51 【问题描述】:

前几天我遇到了一个名为 Jython 的 Python 实现。 使用 Jython,您可以使用 Python 编写 Java 应用程序并将它们编译为纯 Java。

我想知道:android 编程是用 Java 完成的。 那么,是否可以使用 Jython 制作 Android 应用程序?

【问题讨论】:

Python 与 java 的互操作性并不出色。如果你想要原生和漂亮的 ui,你不得不使用 java/scala。如果你对非原生 ui 没问题,你可以使用 qt for android + python wrapper + 在 python 中编写代码。 @tabbykitten,Python 和 Java 之间的互操作正是 Jython 所做的 所提供的。 你能创建扩展 android.app.Activity 的 Jython 类吗? @tabbykitten 为了清楚起见,最好这样问:Jython 是否允许您编写 Java 类(或特定 Java 类)的 Python 子类?是的。 Yes, it does。 “编写 Jython 类”有点模棱两可,因为 Jython 只是一个 Python 实现(不是 OP 所说的方言),所以它可能意味着一个构成 jython 本身 一部分的类(这很简单可以继承 Java 类,因为 Jython 是用 Java 编写的)。 真正的问题,至少对于当前的 Jython,在整个线程中完全被忽略了,包括公认的答案:Jython 也生成和加载字节码在运行时。天生的。即使它可以将其作为 dexed 字节码或以某种方式在运行时对其进行 dex 处理,Android 也不允许在运行时加载新字节码 (AFAIK)。不幸的是,如果没有重大的重新设计,Android 上的 Jython 目前是不可行的。见sourceforge.net/p/jython/mailman/message/36752389 【参考方案1】:

是的,你可以。

在您的计算机上测试您的 python 代码,如果没问题,复制到您的 Android 设备。

从 Google Play 商店安装 Pydroid 并在应用程序中再次编译您的代码,您的应用程序将准备就绪并运行。

在 Pydroid 中使用 pip 安装任何依赖项。

PS:您需要配置您的 Android 设备以安装来自 Play 商店之外的 APK。

【讨论】:

【参考方案2】:

我特别喜欢Kivy

Scripting Layer for Android (SL4A) 允许您直接在 Android 设备上编辑和执行脚本和交互式解释器,从而将脚本语言引入 Android。

【讨论】:

把这个打包成*.apk很容易吗?【参考方案3】:

遗憾的是没有。

手机只有 Java ME(微型版),而 Jython 需要 Java SE(标准版)。我没有 Jython 端口,也没有足够的兴趣让它值得努力。

【讨论】:

这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post。 @A.J.问题是“是否可以在 Android 中运行 Jython”。所以,这是一个答案。用绝对不正确的解释,是的,但它是一个答案。 @Gangnus,老实说,这个近距离投票很笼统,我之所以这么说是因为没有证据或推理,它可以很容易地封装在评论中,而 OP 无法做出,因此票数接近。 Android 使用 Java ME。【参考方案4】:

是和不是。使用 jython,您可以使用 java 类为 JVM 进行编译。但是Android使用的是DVM(Dalvik Virtual Machine),编译出来的代码就不同了。您必须使用工具将 JVM 代码转换为 DVM。

【讨论】:

【参考方案5】:

这是不可能的。您不能将 jython 与 android 一起使用,因为 DVM 不理解它。 DVM 不是 JVM。

【讨论】:

谢谢@Burhan Khalid,在我未来的 *** 帖子中,我会小心这些小而重要的事情。 我已经承认了我的英语写作错误,但现在仍然有人反对我。 :( 犯错是人之常情,重要的是从错误中吸取教训。 那些应用程序正在使用“jythonroid”,即适用于 Android 的 Jython... 怎么会?有人突然冒出来,对你一无所知的事情投了反对票……呵呵:-p。 兄弟你真的需要努力研究你的发现。第一个 no where is written there that the app is using jython... 第二个 They are using python... 你可以像我告诉你的那样在 android 中运行 python/jython 但你需要对 android 应用一些不同的处理,最后一个 There is a hug difference between python and jython【参考方案6】:

Jython 不会编译为“纯 java”,它会编译为 java 字节码 - 即*.class 文件。为了为 Android 开发,进一步将 java 字节码编译为 Dalvik 字节码。这意味着,是的,Jython 可以让您使用 Python 开发 Android,前提是您可以让它与 Android SDK 配合使用(我没有亲自尝试过,所以我不知道这实际上有多难)- 你确实需要确保你不依赖任何 Android 不提供的 Java API,并且可能需要有一些当您运行 jython 时,Android API .class 文件周围。除了这些琐事之外,您的核心想法应该可行 - 事实上,Jython 确实可以用 Python 编写与运行在 JVM 上的任何其他东西交互的代码。

【讨论】:

根据wiki.python.org/jython/JythonFaq/…,jython 需要 JME 而不是 JSE,并且还没有到前者的端口。那么这个答案是纯理论还是真的有人做过? @TobiasKienzler 答案在很大程度上是理论上的——我确实在答案中说我没有尝试过这个,让 Jython 和 Android 工具一起工作可能是一个问题。也就是说,我认为 JME/JSE 的区别在这里并不重要,因为 Python->Java 字节码步骤将在在开发机器上完成,而不是在 Android 设备上。 Java SE 可在 Android SDK 和更新的 Android Studio 支持的每个平台上使用。 感谢您的回复 - 顺便说一下,我希望使用 jython 进行原生 android 开发... Android 和 Java 微版不一样。 JME 用于“前智能手机”,就像 2000 年代初期的普通诺基亚一样。 Android 是完全不同的东西,Jython 页面上的常见问题解答项目在这个问题上具有误导性。【参考方案7】:

只要它编译为纯 java(有一些限制,因为某些 API 不可用),但我怀疑 python 在开发特定于 android 的东西(如活动和 UI 操作代码)中会有多大用处。

您还必须注意应用程序的大小 - 这是移动开发的严重限制。

【讨论】:

考虑到 jython 代码的基于 javac 的输出不包括 python 运行时,而只有 jvm 代码,那怎么办?谈谈应用程序的大小。

以上是关于在 jython 中编写 Android 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

在我编写的java代码中,需要用到python语言编写的文件,需要怎样使用。

CPython、IronPython、Jython 脚本是不是相互兼容?

jtyhon 介绍

在 Jython 的 Pig UDF 中导入外部库时出现错误 1121

使用 Jython 将我的 Python 脚本作为 JAR 文件分发?

wsadmin jython 脚本退出代码到调用脚本