PyJNIus เป็นไลบรารี Python สำหรับการเข้าถึงคลาส Java โดยใช้ Java Native Interface (JNI)
PyJNIus ได้รับการจัดการโดยทีม Kivy และสามารถใช้ได้กับ python-for-android
นอกจากนี้ยังสามารถใช้งานได้อย่างเป็นอิสระจาก Kivy บนแพลตฟอร์มเดสก์ท็อปและมือถือ
คำเตือน
ชื่อแพ็คเกจ PyPI ตอนนี้คือ pyjnius แทนที่จะเป็น jnius
pip install pyjnius
> >> 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
จากนั้น คุณสามารถทำสิ่งนี้ได้:
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 range ( 20 ):
print ( Hardware . accelerometerReading ())
sleep ( 0.1 )
มันจะแสดงผลดังนี้:
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]
เมื่อคุณใช้ autoclass
มันจะค้นพบวิธีการและฟิลด์ทั้งหมดของคลาสและแก้ไขมัน คุณอาจต้องการประกาศและใช้เฉพาะสิ่งที่คุณต้องการเท่านั้น ตัวอย่างก่อนหน้านี้สามารถทำได้ด้วยตนเองดังนี้:
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' )
# use that new class!
print ( 'DPI is' , Hardware . getDPI ())
Hardware . accelerometerEnable ()
for x in range ( 20 ):
print ( Hardware . accelerometerReading ())
sleep ( 0.1 )
คุณสามารถใช้วิธี signatures
ของ JavaMethod
และ JavaMultipleMethod
เพื่อตรวจสอบลายเซ็นที่ค้นพบของวิธีการของวัตถุ
> >> String = autoclass ( 'java.lang.String' )
> >> dir ( String )
[ 'CASE_INSENSITIVE_ORDER' , '__class__' , '_JavaClass__cls_storage' , '__delattr__' , '__dict__' , '__dir__' , '__doc__' , '__eq__' , '__format__' , '__ge__' , '__getattribute__' , '__gt__' , '__hash__' , '__init__' , '__init_subclass__' , '__javaclass__' , '__javaconstructor__' , '__le__' , '__lt__' , '__module__' , '__ne__' , '__new__' , '__pyx_vtable__' , '__reduce__' , '__reduce_ex__' , '__repr__' , '__setattr__' , '__setstate__' , '__sizeof__' , '__str__' , '__subclasshook__' , '__weakref__' , 'charAt' , 'checkBounds' , 'clone' , 'codePointAt' , 'codePointBefore' , 'codePointCount' , 'compareTo' , 'compareToIgnoreCase' , 'concat' , 'contains' , 'contentEquals' , 'copyValueOf' , 'empty' , 'endsWith' , 'equals' , 'equalsIgnoreCase' , 'finalize' , 'format' , 'getBytes' , 'getChars' , 'getClass' , 'hashCode' , 'indexOf' , 'indexOfSupplementary' , 'intern' , 'isEmpty' , 'join' , 'lastIndexOf' , 'lastIndexOfSupplementary' , 'length' , 'matches' , 'nonSyncContentEquals' , 'notify' , 'notifyAll' , 'offsetByCodePoints' , 'regionMatches' , 'registerNatives' , 'replace' , 'replaceAll' , 'replaceFirst' , 'split' , 'startsWith' , 'subSequence' , 'substring' , 'toCharArray' , 'toLowerCase' , 'toString' , 'toUpperCase' , 'trim' , 'valueOf' , 'wait' ]
> >> String . format . signatures ()
[([ 'java/util/Locale' , 'java/lang/String' , 'java/lang/Object...' ], 'java/lang/String' ), ([ 'java/lang/String' , 'java/lang/Object...' ], 'java/lang/String' )]
แต่ละคู่ประกอบด้วยรายการประเภทอาร์กิวเมนต์ที่ยอมรับและประเภทที่ส่งคืน
ตรวจสอบให้แน่ใจว่าได้ติดตั้ง Java Development Kit (JDK) บนระบบปฏิบัติการของคุณแล้ว หากคุณต้องการใช้ PyJNIus บนเดสก์ท็อป เป็นที่รู้กันว่า OpenJDK ใช้งานได้ และ Oracle Java JDK ก็ควรใช้งานได้เช่นกัน
บน Windows ตรวจสอบให้แน่ใจว่า JAVA_HOME
ชี้ไปที่การติดตั้ง Java ของคุณ เพื่อให้ PyJNIus สามารถค้นหาไฟล์ jvm.dll
ที่อนุญาตให้เริ่ม Java ได้ สิ่งนี้ไม่จำเป็นบน macOS และ Linux แต่ในกรณีที่ PyJNIus ค้นหาไม่พบ การตั้งค่า JAVA_HOME
น่าจะช่วยได้
PyJNIus ได้รับใบอนุญาตจาก MIT ซึ่งได้รับการพัฒนาอย่างแข็งขันโดยชุมชนที่ยอดเยี่ยม และได้รับการสนับสนุนจากหลายโครงการที่จัดการโดย Kivy Organisation
เอกสารประกอบสำหรับพื้นที่เก็บข้อมูลนี้
คุณประสบปัญหาในการใช้ PyJNIus หรือโครงการใดๆ ที่เกี่ยวข้องในระบบนิเวศ Kivy หรือไม่? มีข้อผิดพลาดที่คุณไม่เข้าใจหรือไม่? คุณกำลังพยายามหาวิธีใช้งานหรือไม่? เรามีอาสาสมัครที่สามารถช่วยได้!
ช่องทางที่ดีที่สุดในการติดต่อขอรับการสนับสนุนจะแสดงอยู่ในเอกสารติดต่อเราฉบับล่าสุด
PyJNIus เป็นส่วนหนึ่งของระบบนิเวศ Kivy ซึ่งเป็นกลุ่มผลิตภัณฑ์ขนาดใหญ่ที่นักพัฒนาหลายพันคนใช้งานฟรี แต่ถูกสร้างขึ้นทั้งหมดโดยการมีส่วนร่วมของอาสาสมัคร เรายินดีต้อนรับ (และพึ่งพา) ผู้ใช้ที่ต้องการตอบแทนชุมชนด้วยการมีส่วนร่วมในโครงการ
การบริจาคสามารถมีได้หลายรูปแบบ ดูหลักเกณฑ์การบริจาคล่าสุดสำหรับวิธีที่คุณสามารถช่วยเราได้
เพื่อประโยชน์ในการส่งเสริมชุมชนที่เปิดกว้างและเป็นมิตร เราในฐานะผู้ร่วมให้ข้อมูลและผู้ดูแลจำเป็นต้องให้แน่ใจว่าการมีส่วนร่วมในโครงการของเราและโครงการในเครือของเรานั้นเป็นประสบการณ์เชิงบวกที่ปราศจากการคุกคามและเป็นบวกสำหรับทุกคน จำเป็นอย่างยิ่งที่ปฏิสัมพันธ์ทั้งหมดจะต้องกระทำในลักษณะที่สื่อถึงความเคารพ การเปิดใจกว้าง และความกตัญญู
โปรดศึกษาหลักจรรยาบรรณล่าสุด
โครงการนี้เกิดขึ้นได้ต้องขอบคุณทุกคนที่มีส่วนร่วม [ร่วมเป็นผู้สนับสนุน].
ขอขอบคุณผู้สนับสนุนของเราทุกคน! [มาเป็นผู้สนับสนุน]
ขอขอบคุณผู้สนับสนุนทุกท่านทั้งในอดีตและปัจจุบัน สนับสนุนโครงการนี้โดย [เป็นผู้สนับสนุน]
นี่คือผู้สนับสนุนชั้นนำของเราในปัจจุบัน โปรดคลิกผ่านเพื่อดูเว็บไซต์ของพวกเขา และสนับสนุนพวกเขาในขณะที่พวกเขาสนับสนุนเรา