如何使用 Python 訪問 Java 類
很高興給大家介紹一個 Pyjnius 項目。這是一個可以使用在桌面或Android上,用來訪問Java類的Python庫。
- 源代碼:github.com/kivy/pyjnius
- 文檔:pyjnius.readthedocs.org </ul>
也有其他一些的庫,如 JPype 或 Py4j ,它們在設計和可用性方面都不是很好。而使用 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 sleepMediaRecorder = 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()</pre>
好了,你可以從文檔中獲取更多的例子。
我們已經可以映射Java/Python的類型,原生數組,支持方法重載等等。我們在內部使用的是 Cython + JNI,因此消耗性能是最小的。
同時, Python for android庫已經完成,你可以從github中獲取。