Python和Dalvik或AAF之间的本地桥接

8

是否有将Python和Dalvik桥接到同一地址空间的项目?

也就是说,一个语言中创建的对象可以在另一个语言中注册为监听器,反之亦然?

--

Python可以是CPython或PyPy;

Dalvik可以是完整的Android应用程序框架,也可以只是Dalvik虚拟机,或者在最坏的情况下,甚至可能是非Dalvik JVM;

桥接可以使用Python/cffi、Python/jni、本地C/C++代码,甚至Java编写。

据我所知,脚本环境无法满足我的要求。

如果完全缺乏Python-Dalvik桥接,我可以采用基于C/C++的全功能C/C++-Dalvik桥接作为最后的选择。然后需要提供一个示例,演示如何在C/C++环境中实例化一个对象,并将其作为有效监听器提交给某个Android API,在运行时考虑安全性。


我会采用具有完整功能的基于 C/C++ 的 C/C++ - Dalvik 桥接,类似于 JNI 吗? :) - JesusFreke
澄清一下,那是最后的手段。 - Dima Tisnek
1
你是否了解 pyjnius?它被 kivy python-for-android 项目等使用,用于与 Java 类交互,包括管理像意图监听之类的东西。如果这在技术上不合适,我很抱歉,因为我对这个领域了解不够。 - inclement
@inclement 我会看一下! - Dima Tisnek
@inclement 这实际上非常好!它使用 ctypes,因此仅适用于 CPython,并且在 PyPy 上的效率不高,但显然是一个朝着正确方向的项目!请转换为答案。 - Dima Tisnek
2个回答

4

(根据我的原始评论)

您是否了解 pyjnius ?它被用于(例如)kivy python-for-android项目与Java类交互,包括管理诸如意图监听等内容。如果这在技术上不合适,我很抱歉,我对这个领域了解不够。

作为一个小参考,使用 pyjnius 实现意图监听器接口的示例在Python中,并将其注册到Android运行时。

以下是超级简单的示例,调用Java。

>>> from jnius import autoclass
>>> autoclass('java.lang.System').out.println('Hello world')
Hello world

2
仅支持CPython,但非常非常好。Github/实现代码如此紧凑,让我感动流泪 :) - Dima Tisnek

2
事实上,Python 中有一个名为 android 的模块。它可以在 Android 系统上完成许多工作。您可以在此处下载它:https://pypi.python.org/pypi/python-android 还有一个 Python/Java 桥接器,也支持 Dalvik 处理。您可以在这里获取软件:https://bitbucket.org/reasonspace/reasonspace/src 这两个都应该提供了一个很好的方法来连接 Python 和 Android 系统。如果您愿意,您可能还可以让它们读写文件以发送消息或创建某种类似的通信方式,但上述项目是更好的实现方式。

python-android 的 GitHub 链接相当空旷。实际上有什么被实现了吗?只有在 ota.pyboot.py 两个文件中有代码。这个项目实际上能做什么? - Dima Tisnek
reasonspace已经有两年没有提交了;另一方面,jpype显然是被维护的。后者允许“实现”Java接口,但不支持Dalvik。 - Dima Tisnek
我不想在两者之间传递消息。我想要直接调用和回调,实现接口等。当然是通过 shim 进行调用。 - Dima Tisnek

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