使用Jython编程Android应用程序

66

前些日子我发现了一个名为Jython的Python实现。
使用Jython,您可以用Python编写Java应用程序并将它们编译成纯Java代码。

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


1
Python与Java之间的互操作性不是很好。如果你想要本地化和漂亮的用户界面,你就必须使用Java/Scala。如果你可以接受非本地化的用户界面,你可以在Android上使用Qt + Python包装器 + 用Python编写代码。 - logcat
9
@tabbykitten,Python和Java之间的互操作性正是Jython所提供的。 - lvc
1
你能创建一个扩展android.app.Activity的Jython类吗? - logcat
2
实际问题,至少在当前的Jython中完全被忽略了,在整个线程中包括被接受的答案:Jython也会在运行时生成和加载字节码。本质上。即使它可以将其作为dexed字节码或以某种方式在运行时进行dex,Android也不允许在运行时加载新的字节码(据我所知)。不幸的是,如果没有重大重新设计,Jython在Android上目前是不可行的。请参见https://sourceforge.net/p/jython/mailman/message/36752389/。 - stewori
显示剩余4条评论
7个回答

45
Jython并不会编译成“纯Java”,它编译成Java字节码,也就是*.class文件。要为Android开发,还需要将Java字节码编译为Dalvik字节码。这意味着,是的,Jython可以让你使用Python来开发Android应用,前提是你需要确保它能与Android SDK很好地配合使用(我个人没有尝试过,所以不知道实际上有多难)——你需要确保不依赖于Android没有提供的任何Java API,并且在运行jython时可能需要一些Android API的.class文件。除了这些小问题外,你的核心想法应该是可行的——Jython确实可以让你编写Python代码与任何在JVM上运行的东西进行交互。

2
根据https://wiki.python.org/jython/JythonFaq/GeneralInfo#Can_I_use_Jython_to_make_apps_for_mobile_phones.3F,Jython需要JME而不是JSE,目前还没有将其移植到前者。那么这个答案是纯理论还是已经有人实现了呢? - Tobias Kienzler
3
@TobiasKienzler 这个答案在很大程度上是理论性的 - 我在答案中说过我没有尝试过这个,而且让Jython和Android 工具协同工作可能是一个问题。尽管如此,我认为JME/JSE的差异在这里并不重要,因为Python到Java字节码的转换步骤将在开发机器上完成,而不是在Android设备上完成。Java SE可用于Android SDK支持的每个平台以及新版本的Android Studio。 - lvc
谢谢您的回复 - 顺便说一下,我确实希望能够使用Jython进行本地Android开发... - Tobias Kienzler
1
Android与Java Micro Edition不同。JME用于“智能手机之前的手机”,例如2000年代早期的诺基亚手机。Android是完全不同的东西,Jython页面上的FAQ条目在这个问题上是误导性的。 - sentiao

5

我特别喜欢Kivy

Android脚本层(SL4A)通过允许您在Android设备上直接编辑和执行脚本和交互式解释器,将脚本语言带到Android。


将此打包成 *.apk 容易吗? - Jonathan

5
只要它能编译成纯Java(有一些限制,因为某些API不可用),但我怀疑Python在开发Android特定的活动和UI操作代码等方面并没有太大用处。您还需要注意应用程序大小-这是移动开发的严重限制。

考虑到jython代码的javac基于输出不包含Python运行时环境,而仅包含JVM代码,那这是如何实现的呢?就应用程序大小而言。 - jheld

3

是和不是。使用jython可以使用Java类编译JVM。但是Android使用DVM(Dalvik虚拟机),编译后的代码是不同的。您需要使用工具将JVM代码转换为DVM。


1

是的,你可以。

在你的计算机上测试你的Python代码,当它OK后,将其复制到你的Android设备上。

从Google Play商店安装Pydroid,并在应用程序中重新编译你的代码,你会得到你的应用程序已经准备好并运行的结果。

使用Pydroid内部的pip安装任何依赖项。

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


-3
不可能的。你不能在Android上使用Jython,因为DVM无法理解它。DVM和JVM不同。

感谢@Burhan Khalid,我将在未来的StackOverFlow帖子中注意这些小但重要的事情。 - The VOYOU
我已经承认了我的英文写作错误,但仍然有人在现在对我进行投票。 :( 犯错乃人之常情,重要的是要从错误中学习。 - The VOYOU
这些应用程序正在使用“jythonroid”,即Android的Jython... 怎么会有人突然冒出来,对他一无所知的事情进行投票... 哈哈哈 :-p。 - The VOYOU
兄弟,你真的需要在你的研究上下更多功夫。首先,“没有任何地方写明该应用程序正在使用jython”...其次,“他们正在使用python”...而且,正如我告诉过你的那样,你可以在Android上运行python/jython,但是你需要对Android进行一些不同的处理,最后,“Python和Jython之间存在巨大的差异”。 - The VOYOU

-5

很遗憾,不行。

移动电话只有Java ME(Micro Edition),但Jython需要Java SE(Standard Edition)。没有针对ME的Jython端口,并且没有足够的兴趣使其值得努力。


1
这并没有提供问题的答案。如果要批评或请求作者澄清,请在他们的帖子下留言 - 您始终可以在自己的帖子上发表评论,并且一旦您拥有足够的声望,您将能够评论任何帖子 - A.J. Uppal
1
@A.J. 这个问题是“在Android上是否可以运行Jython”。所以,这确实是一个答案。虽然解释完全不正确,但它仍然是一个答案。 - Gangnus
@Gangnus,说实话,那个关闭投票很笼统。我之所以这么说是因为没有证据或理由,它可以很容易地包含在评论中,而原始发帖人无法发表评论,因此才会有关闭投票。 - A.J. Uppal
Android 不是 使用 Java ME。 - jiwopene

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