PyJNIus 是一個神奇的 Python 第三方模塊。它能使用Java本地接口將Java類作為Python類訪問的Python模塊。
如果你需要在Python中使用Java 類,這個第三方模塊是你最好的選擇。
1.準(zhǔn)備
開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細(xì)Python安裝指南 進行安裝。
如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內(nèi)置了Python和pip.
此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點:Python 編程的最好搭檔—VSCode 詳細(xì)指南。
請選擇以下任一種方式輸入命令安裝依賴 :
- Windows 環(huán)境 打開 Cmd (開始-運行-CMD)。
- MacOS 環(huán)境 打開 Terminal (command+空格輸入Terminal)。
- 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install pyjnius
2.快速開始
使用Jnius導(dǎo)入Java類特別簡單,你只需要引入 autoclass 并引用你所需要的類即可:
>>> from jnius import autoclass
>>> autoclass('java.lang.System').out.println('Hello world')
Hello world
>>> Stack = autoclass('java.util.Stack')
>>> stack = Stack()
>>> stack.push('hello')
>>> stack.push('world')
>>> print(stack.pop())
world
>>> print(stack.pop())
hello
當(dāng)你引入類后,你只需要按 Java 的函數(shù)操作即可,如上述代碼中的 push 和 pop 函數(shù)。
最令人驚喜的是,你還能在安卓系統(tǒng)中利用這個模塊使用Python調(diào)用Java類:
from time import sleep
from jnius import autoclass
Hardware = autoclass('org.renpy.android.Hardware')
print('DPI is', Hardware.getDPI())
Hardware.accelerometerEnable(True)
for x in xrange(20):
print(Hardware.accelerometerReading())
sleep(.1)
輸出結(jié)果如下:
I/python ( 5983): Android kivy bootstrap done. __name__ is __main__
I/python ( 5983): Run user program, change dir and execute main.py
I/python ( 5983): DPI is 160
I/python ( 5983): [0.0, 0.0, 0.0]
I/python ( 5983): [-0.0095768067985773087, 9.3852710723876953, 2.2218191623687744]
I/python ( 5983): [-0.0095768067985773087, 9.3948478698730469, 2.2218191623687744]
I/python ( 5983): [-0.0095768067985773087, 9.3948478698730469, 2.2026655673980713]
I/python ( 5983): [-0.028730420395731926, 9.4044246673583984, 2.2122423648834229]
I/python ( 5983): [-0.019153613597154617, 9.3852710723876953, 2.2026655673980713]
I/python ( 5983): [-0.028730420395731926, 9.3852710723876953, 2.2122423648834229]
I/python ( 5983): [-0.0095768067985773087, 9.3852710723876953, 2.1835119724273682]
I/python ( 5983): [-0.0095768067985773087, 9.3756942749023438, 2.1835119724273682]
I/python ( 5983): [0.019153613597154617, 9.3948478698730469, 2.2122423648834229]
I/python ( 5983): [0.038307227194309235, 9.3852710723876953, 2.2218191623687744]
I/python ( 5983): [-0.028730420395731926, 9.3948478698730469, 2.2026655673980713]
I/python ( 5983): [-0.028730420395731926, 9.3852710723876953, 2.2122423648834229]
I/python ( 5983): [-0.038307227194309235, 9.3756942749023438, 2.2026655673980713]
I/python ( 5983): [0.3926490843296051, 9.3086557388305664, 1.3311761617660522]
I/python ( 5983): [-0.10534487664699554, 9.4331550598144531, 2.1068975925445557]
I/python ( 5983): [0.26815059781074524, 9.3469638824462891, 2.3463177680969238]
I/python ( 5983): [-0.1149216815829277, 9.3852710723876953, 2.31758713722229]
I/python ( 5983): [-0.038307227194309235, 9.41400146484375, 1.8674772977828979]
I/python ( 5983): [0.13407529890537262, 9.4235782623291016, 2.2026655673980713]
為了能實現(xiàn)上述效果,你需要使用: python-for-android .
這是Android上Python應(yīng)用程序的打包工具。您可以創(chuàng)建自己的Python發(fā)行版(包括所需的模塊和依賴項),并將其與自己的代碼捆綁在APK中。
詳細(xì)教程可以見GitHub:
https://github.com/kivy/python-for-android
3.進階使用
當(dāng)您使用 autoclass
時,它將發(fā)現(xiàn)指定Java類的所有方法和字段并對其進行解析。如果你只想聲明和使用所需的內(nèi)容。可以這么弄:
from time import sleep
from jnius import MetaJavaClass, JavaClass, JavaMethod, JavaStaticMethod
class Hardware(JavaClass):
__metaclass__ = MetaJavaClass
__javaclass__ = 'org/renpy/android/Hardware'
vibrate = JavaStaticMethod('(D)V')
accelerometerEnable = JavaStaticMethod('(Z)V')
accelerometerReading = JavaStaticMethod('()[F')
getDPI = JavaStaticMethod('()I')
# 使用這個新類
print('DPI is', Hardware.getDPI())
Hardware.accelerometerEnable()
for x in xrange(20):
print(Hardware.accelerometerReading())
sleep(.1)
這種形式支持你只引入你想要使用的類,不會造成資源浪費,代碼效率更高。
尤其是對于安卓系統(tǒng)有限的資源而言,推薦使用這種局部引入的方式。
當(dāng)然,如果你是桌面系統(tǒng)(windows, macOS),資源相對充足,使用autoclass引入的方式是可以接受的。
不過,在Windows上,確保 JAVA_HOME
指向你的Java安裝路徑,以便 PyJNIus 可以找到 jvm.dll.
我們的文章到此就結(jié)束啦,如果你喜歡今天的Python 實戰(zhàn)教程,請持續(xù)關(guān)注Python實用寶典。
-
接口
+關(guān)注
關(guān)注
33文章
8691瀏覽量
151919 -
JAVA
+關(guān)注
關(guān)注
19文章
2975瀏覽量
105147 -
python
+關(guān)注
關(guān)注
56文章
4807瀏覽量
85039
發(fā)布評論請先 登錄
相關(guān)推薦
評論