PyJNIus — это библиотека Python для доступа к классам Java с использованием собственного интерфейса Java (JNI).
PyJNIus управляется командой Kivy и может использоваться с Python для 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' )]
Каждая пара содержит список принимаемых типов аргументов и возвращаемый тип.
Если вы хотите использовать PyJNIus на рабочем столе, убедитесь, что в вашей операционной системе установлен Java Development Kit (JDK). Известно, что OpenJDK работает, и Oracle Java JDK тоже должен работать.
В Windows убедитесь, что JAVA_HOME
указывает на вашу установку Java, чтобы PyJNIus мог найти файл jvm.dll
позволяющий запустить Java. В macOS и Linux это не обязательно, но если PyJNIus не сможет его найти, установка JAVA_HOME
должна помочь.
PyJNIus имеет лицензию MIT, активно разрабатывается большим сообществом и поддерживается многими проектами, управляемыми Kivy Organization.
Документация для этого репозитория.
У вас возникли проблемы с использованием PyJNIus или любого из связанных с ним проектов в экосистеме Kivy? Есть ли ошибка, которую вы не понимаете? Вы пытаетесь понять, как его использовать? У нас есть волонтеры, которые могут помочь!
Лучшие каналы обращения к нам за поддержкой перечислены в последней версии документа «Свяжитесь с нами».
PyJNIus является частью экосистемы Kivy — большой группы продуктов, которые бесплатно используют многие тысячи разработчиков, но она полностью создана за счет вклада добровольцев. Мы приветствуем (и полагаемся на) пользователей, которые хотят принести пользу сообществу, внося свой вклад в проект.
Взносы могут осуществляться во многих формах. Чтобы узнать, как вы можете нам помочь, ознакомьтесь с последними Правилами внесения взносов.
В интересах развития открытого и гостеприимного сообщества мы, как участники и сопровождающие, должны обеспечить, чтобы участие в нашем проекте и наших дочерних проектах было свободным от притеснений и положительным опытом для всех. Крайне важно, чтобы все взаимодействие осуществлялось в духе уважения, открытости и благодарности.
Пожалуйста, ознакомьтесь с последней версией Кодекса поведения.
Этот проект существует благодаря всем людям, которые вносят свой вклад. [Стать участником].
Спасибо всем нашим сторонникам! [Стать спонсором]
Особая благодарность всем нашим спонсорам, бывшим и настоящим. Поддержите этот проект, [став спонсором].
Вот наши лучшие текущие спонсоры. Пожалуйста, перейдите по ссылке, чтобы увидеть их веб-сайты, и поддержите их, как они поддерживают нас.