如何使用Python访问Java类

很高兴给大家介绍一个 Pyjnius 项目。这是一个可以使用在桌面或Android上,用来访问Java类的Python库。

源代码:github.com/kivy/pyjnius

文档:pyjnius.readthedocs.org

也有其他一些的库,如 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,因此消耗性能是最小的。

相关推荐