PyJNIus é uma biblioteca Python para acessar classes Java usando Java Native Interface (JNI).
PyJNIus é gerenciado pela equipe Kivy e pode ser usado com python para Android.
Também pode ser usado independentemente do Kivy, em plataformas desktop e móveis.
Aviso
O nome do pacote PyPI agora é pyjnius em vez 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
Então, você pode fazer esse tipo de coisa:
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 )
Irá gerar algo como:
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]
Quando você usa autoclass
, ele descobrirá todos os métodos e campos da classe e os resolverá. Você pode declarar e usar apenas o que precisa. O exemplo anterior pode ser feito manualmente da seguinte forma:
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 )
Você pode usar o método signatures
de JavaMethod
e JavaMultipleMethod
para inspecionar as assinaturas descobertas de um método de um objeto
> >> 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' )]
Cada par contém a lista de tipos de argumentos aceitos e o tipo retornado.
Certifique-se de que um Java Development Kit (JDK) esteja instalado em seu sistema operacional se desejar usar PyJNIus no desktop. Sabe-se que o OpenJDK funciona, e o Oracle Java JDK também deve funcionar.
No Windows, certifique-se de que JAVA_HOME
aponte para a instalação do Java, para que o PyJNIus possa localizar o arquivo jvm.dll
permitindo iniciar o Java. Isso não deveria ser necessário no macOS e Linux, mas caso o PyJNIus não consiga encontrá-lo, configurar JAVA_HOME
deve ajudar.
PyJNIus é licenciado pelo MIT, desenvolvido ativamente por uma grande comunidade e é apoiado por muitos projetos gerenciados pela Organização Kivy.
Documentação para este repositório.
Você está tendo problemas para usar o PyJNIus ou qualquer um de seus projetos relacionados no ecossistema Kivy? Existe algum erro que você não entende? Você está tentando descobrir como usá-lo? Temos voluntários que podem ajudar!
Os melhores canais para entrar em contato conosco para obter suporte estão listados no documento Fale Conosco mais recente.
PyJNIus faz parte do ecossistema Kivy - um grande grupo de produtos usados por milhares de desenvolvedores gratuitamente, mas é construído inteiramente pelas contribuições de voluntários. Damos as boas-vindas (e contamos com) usuários que desejam retribuir à comunidade contribuindo para o projeto.
As contribuições podem vir de várias formas. Consulte as diretrizes de contribuição mais recentes para saber como você pode nos ajudar.
No interesse de promover uma comunidade aberta e acolhedora, nós, como contribuidores e mantenedores, precisamos garantir que a participação em nosso projeto e em nossos projetos irmãos seja uma experiência positiva e livre de assédio para todos. É vital que toda interação seja conduzida de maneira a transmitir respeito, mente aberta e gratidão.
Por favor consulte o mais recente Código de Conduta.
Este projeto existe graças a todas as pessoas que contribuem. [Torne-se um contribuidor].
Obrigado a todos os nossos apoiadores! [Torne-se um apoiador]
Agradecimentos especiais a todos os nossos patrocinadores, passados e presentes. Apoie este projeto [tornando-se um patrocinador].
Aqui estão nossos principais patrocinadores atuais. Por favor, clique para ver seus sites e apoie-os assim como eles nos apoiam.