Python 和 Dalvik 或 AAF 之间的原生桥梁

Posted

技术标签:

【中文标题】Python 和 Dalvik 或 AAF 之间的原生桥梁【英文标题】:Native bridge between Python and Dalvik or AAF 【发布时间】:2013-12-01 11:38:26 【问题描述】:

是否有任何项目可以在同一地址空间中桥接 Python 和 Dalvik?

也就是说,用一种语言创建的对象可以注册为另一种语言的侦听器,反之亦然?

--

Python 可以是 CPython 或 PyPy;

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

Bridge 可以用 Python/cffi、Python/jni、本机 C/C++ 代码甚至 java 编写。

据我所知,脚本环境不能满足我的要求。

如果完全没有 Python--Dalvik 桥接器,我将采用全功能基于 C/C++ 的 C/C++--Dalvik 桥接器作为最后的有效答案。然后需要一个在 C/C++ 领域实例化 on 对象的示例,该对象可以在运行时作为有效侦听器提交给某些 Android API,包括安全考虑。

【问题讨论】:

“我会像 JNI 一样采用全功能的基于 C/C++ 的 C/C++--Dalvik 桥接器”? :) 澄清,这是最后的手段。 你知道pyjnius吗?它被(例如)kivy python-for-android 项目用于与 java 类交互,包括管理诸如意图监听之类的东西。如果这在技术上不合适,我深表歉意,我对此领域了解不够。 @inclement 我去看看! @inclement 这真的很好!使用ctypes,因此只能与CPython一起使用,而不能与PyPy一起有效地工作,但它显然是朝着正确方向的预测!请转换成答案。 【参考方案1】:

(根据我原来的评论)

你知道pyjnius吗?它被(例如)kivy python-for-android 项目用于与 java 类交互,包括管理诸如意图监听之类的东西。如果这在技术上不合适,我深表歉意,我对这方面的了解不够。

作为次要参考,listener example 在 Python 中实现了一个意图监听器接口,并使用 pyjnius 将其注册到 Android 运行时。

超级简单的例子,调用java。

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

【讨论】:

仅限 CPython,但非常非常好。 github/实现代码非常紧凑,让我哭了:)【参考方案2】:

其实python中有一个叫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。这个项目究竟能做什么? reasonspace 2 年没有提交;另一方面,jpype 显然得到了维护。后者允许“实现”(原文如此。)java接口,但不支持dalvik。 我不想在两者之间传递消息。我想要直接调用和回调,实现 f 接口等。显然,通过 shim 调用。

以上是关于Python 和 Dalvik 或 AAF 之间的原生桥梁的主要内容,如果未能解决你的问题,请参考以下文章

参考 Dalvik 或 Java 虚拟机?

如何检测 Android 运行时(Dalvik 或 ART)?

Dalvik指令格式

安卓执行机制JNIDalvikART之间的比較 。android L 改动执行机制。

安卓art和dalvik的区别

ARTJITAOTDalvik之间有什么关系?