PyJNIus ist eine Python-Bibliothek für den Zugriff auf Java-Klassen über das Java Native Interface (JNI).
PyJNIus wird vom Kivy-Team verwaltet und kann mit Python-für-Android verwendet werden.
Es kann auch unabhängig von Kivy auf Desktop- und mobilen Plattformen verwendet werden.
Warnung
Der PyPI-Paketname lautet jetzt pyjnius statt 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
Dann können Sie Folgendes tun:
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 )
Es wird etwa Folgendes ausgegeben:
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]
Wenn Sie autoclass
verwenden, werden alle Methoden und Felder der Klasse erkannt und aufgelöst. Möglicherweise möchten Sie nur das deklarieren und verwenden, was Sie benötigen. Das vorherige Beispiel kann wie folgt manuell durchgeführt werden:
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 )
Sie können die signatures
Methode von JavaMethod
und JavaMultipleMethod
verwenden, um die erkannten Signaturen einer Methode eines Objekts zu überprüfen
> >> 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' )]
Jedes Paar enthält die Liste der akzeptierten Argumenttypen und den zurückgegebenen Typ.
Stellen Sie sicher, dass ein Java Development Kit (JDK) auf Ihrem Betriebssystem installiert ist, wenn Sie PyJNIus auf dem Desktop verwenden möchten. Es ist bekannt, dass OpenJDK funktioniert, und das Oracle Java JDK sollte ebenfalls funktionieren.
Stellen Sie unter Windows sicher, dass JAVA_HOME
auf Ihre Java-Installation verweist, damit PyJNIus die Datei jvm.dll
finden und Java starten kann. Dies sollte unter macOS und Linux nicht notwendig sein, aber falls PyJNIus es nicht findet, sollte das Festlegen JAVA_HOME
helfen.
PyJNIus ist MIT-lizenziert, wird von einer großartigen Community aktiv entwickelt und wird von vielen Projekten unterstützt, die von der Kivy Organization verwaltet werden.
Dokumentation für dieses Repository.
Haben Sie Probleme bei der Verwendung von PyJNIus oder einem seiner verwandten Projekte im Kivy-Ökosystem? Gibt es einen Fehler, den Sie nicht verstehen? Versuchen Sie herauszufinden, wie man es benutzt? Wir haben Freiwillige, die helfen können!
Die besten Kanäle, um uns für Support zu kontaktieren, sind im neuesten Kontaktdokument aufgeführt.
PyJNIus ist Teil des Kivy-Ökosystems – einer großen Gruppe von Produkten, die von vielen Tausend Entwicklern kostenlos genutzt werden, aber vollständig durch die Beiträge von Freiwilligen aufgebaut werden. Wir begrüßen (und verlassen uns auf) Benutzer, die der Community etwas zurückgeben möchten, indem sie zum Projekt beitragen.
Beiträge können in vielen Formen erfolgen. Sehen Sie sich die neuesten Beitragsrichtlinien an, um zu erfahren, wie Sie uns helfen können.
Im Interesse der Förderung einer offenen und einladenden Community müssen wir als Mitwirkende und Betreuer sicherstellen, dass die Teilnahme an unserem Projekt und unseren Schwesterprojekten für alle eine belästigungsfreie und positive Erfahrung ist. Es ist wichtig, dass alle Interaktionen in einer Weise ablaufen, die Respekt, Aufgeschlossenheit und Dankbarkeit vermittelt.
Bitte konsultieren Sie den aktuellen Verhaltenskodex.
Dieses Projekt existiert dank aller Menschen, die dazu beitragen. [Werden Sie Mitwirkender].
Vielen Dank an alle unsere Unterstützer! [Unterstützer werden]
Besonderer Dank geht an alle unsere Sponsoren, früher und heute. Unterstützen Sie dieses Projekt, indem Sie [Sponsor werden].
Hier sind unsere aktuellen Top-Sponsoren. Bitte klicken Sie sich durch, um ihre Websites zu sehen, und unterstützen Sie sie, während sie uns unterstützen.