如何使用 Python 访问 Java 类

迷途d书童 发布于 2012/08/24 18:08
阅读 3K+
收藏 39
很高兴给大家介绍一个 Pyjnius 项目。这是一个可以使用在桌面或Android上,用来访问Java类的Python库。


也有其他一些的库,如 JPypePy4j ,它们在设计和可用性方面都不是很好。而使用 Jython也不为另一种选择,因为我们想使用 python开发Android项目。

现在就让我来告诉你,如何简单的使用Pyjnius:

>>> from jnius import autoclass
>>> Stack = autoclass('java.util.Stack')
>>> stack = Stack()
>>> stack.push('hello')
>>> stack.push('world')
>>> stack.pop()
'world'
>>> stack.pop()
'hello'

上面的代码中,我们使用 autoclass 函数,创建了一个类型代理,对应着Java中java.util.Stack类的所有方法和字段属性。

OK,也许你想要一个Android相关的例子,看这里:

from jnius import autoclass
from time import sleep
 
MediaRecorder = autoclass('android.media.MediaRecorder')
AudioSource = autoclass('android.media.MediaRecorder$AudioSource')
OutputFormat = autoclass('android.media.MediaRecorder$OutputFormat')
AudioEncoder = autoclass('android.media.MediaRecorder$AudioEncoder')
 
# Record the Microphone with a 3GP recorder
mRecorder = MediaRecorder()
mRecorder.setAudioSource(AudioSource.MIC)
mRecorder.setOutputFormat(OutputFormat.THREE_GPP)
mRecorder.setOutputFile('/sdcard/testrecorder.3gp')
mRecorder.setAudioEncoder(AudioEncoder.ARM_NB)
mRecorder.prepare()
 
# Record 5 seconds
mRecorder.start()
sleep(5)
mRecorder.stop()
mRecorder.release()

好了,你可以从文档中获取更多的例子。

我们已经可以映射Java/Python的类型,原生数组,支持方法重载等等。我们在内部使用的是 Cython + JNI,因此消耗性能是最小的。

同时, Python for android库已经完成,你可以从github中获取。

英文原文 , OSChina.NET翻译

加载中
0
mallon
mallon
我宁可开两个进程通信
0
铂金小鸟
铂金小鸟
意义何在?
0
renwofei423
renwofei423

引用来自“fants”的答案

意义何在?
因为我们想使用 python开发Android项目。
0
崔钢
崔钢
为啥要用python访问java?
0
chexEMet
chexEMet
你的意思是Android上能直接运行python脚本?
迷途d书童
迷途d书童
用python语言编写代码,并生成apk文件,在android系统上运行。
0
LastRitter
LastRitter

有什么优势呢?

0
疯人院主任
疯人院主任
为何就不能直接有Python类,要让Python去访问Java, 那我不是要先了解Java那些类。Oh my god。
0
简单代码
简单代码

引用来自“renwofei423”的答案

引用来自“fants”的答案

意义何在?
因为我们想使用 python开发Android项目。
需要额外安装插件吧?
0
chexEMet
chexEMet

JPype 我在用,挺好的,只是不支持 Android。

Pyjnius支持Android,是不是意味着,它可以加载一个dex文件,然后,访问其内部的方法?包括私有的?

chexEMet
chexEMet
结合 python-for-android 看了一下。 这样搞出来的源代码,不知道有什么优势,有空研究下。
返回顶部
顶部