PyJNIus est une bibliothèque Python permettant d'accéder aux classes Java à l'aide de Java Native Interface (JNI).
PyJNIus est géré par l'équipe Kivy et peut être utilisé avec python-for-android.
Il peut également être utilisé indépendamment de Kivy, sur les plateformes de bureau et mobiles.
Avertissement
Le nom du package PyPI est désormais pyjnius au lieu de 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
Ensuite, vous pouvez faire ce genre de chose :
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 )
Cela produira quelque chose comme :
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]
Lorsque vous utilisez autoclass
, il découvrira toutes les méthodes et champs de la classe et les résoudra. Vous souhaiterez peut-être déclarer et utiliser uniquement ce dont vous avez besoin. L'exemple précédent peut être réalisé manuellement comme suit :
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 )
Vous pouvez utiliser la méthode signatures
de JavaMethod
et JavaMultipleMethod
pour inspecter les signatures découvertes d'une méthode d'un objet.
> >> 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' )]
Chaque paire contient la liste des types d'arguments acceptés et le type renvoyé.
Assurez-vous qu'un kit de développement Java (JDK) est installé sur votre système d'exploitation si vous souhaitez utiliser PyJNIus sur le bureau. OpenJDK est connu pour fonctionner, et le JDK Oracle Java devrait également fonctionner.
Sous Windows, assurez-vous que JAVA_HOME
pointe vers votre installation Java, afin que PyJNIus puisse localiser le fichier jvm.dll
lui permettant de démarrer Java. Cela ne devrait pas être nécessaire sur macOS et Linux, mais au cas où PyJNIus ne parviendrait pas à le trouver, la configuration de JAVA_HOME
devrait aider.
PyJNIus est sous licence MIT, activement développé par une grande communauté et est soutenu par de nombreux projets gérés par l'organisation Kivy.
Documentation pour ce référentiel.
Rencontrez-vous des difficultés à utiliser PyJNIus ou l'un de ses projets associés dans l'écosystème Kivy ? Y a-t-il une erreur que vous ne comprenez pas ? Essayez-vous de comprendre comment l'utiliser ? Nous avons des bénévoles qui peuvent vous aider !
Les meilleurs canaux pour nous contacter pour obtenir de l'aide sont répertoriés dans le dernier document Contactez-nous.
PyJNIus fait partie de l'écosystème Kivy - un grand groupe de produits utilisés gratuitement par des milliers de développeurs, mais il est entièrement construit grâce aux contributions de bénévoles. Nous accueillons (et comptons sur) les utilisateurs qui souhaitent redonner à la communauté en contribuant au projet.
Les contributions peuvent prendre de nombreuses formes. Consultez les dernières directives de contribution pour savoir comment vous pouvez nous aider.
Dans l'intérêt de favoriser une communauté ouverte et accueillante, nous, en tant que contributeurs et responsables, devons garantir que la participation à notre projet et à nos projets frères est une expérience positive et sans harcèlement pour tout le monde. Il est essentiel que toutes les interactions se déroulent d’une manière exprimant respect, ouverture d’esprit et gratitude.
Veuillez consulter le dernier Code de conduite.
Ce projet existe grâce à toutes les personnes qui y contribuent. [Devenez contributeur].
Merci à tous nos contributeurs ! [Devenez contributeur]
Un merci spécial à tous nos sponsors, passés et présents. Soutenez ce projet en [devenant sponsor].
Voici nos principaux sponsors actuels. Veuillez cliquer pour voir leurs sites Web et les soutenir comme ils nous soutiennent.