PyJNIus es una biblioteca de Python para acceder a clases de Java utilizando la interfaz nativa de Java (JNI).
PyJNIus es administrado por Kivy Team y se puede usar con Python para Android.
También se puede utilizar independientemente de Kivy, en plataformas móviles y de escritorio.
Advertencia
El nombre del paquete PyPI ahora es pyjnius en lugar 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
Entonces, puedes hacer este tipo de cosas:
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 )
Saldrá 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]
Cuando usa autoclass
, descubrirá todos los métodos y campos de la clase y los resolverá. Es posible que desee declarar y utilizar sólo lo que necesita. El ejemplo anterior se puede hacer manualmente de la siguiente manera:
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 )
Puede utilizar el método signatures
de JavaMethod
y JavaMultipleMethod
para inspeccionar las firmas descubiertas de un método de un 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 contiene la lista de tipos de argumentos aceptados y el tipo devuelto.
Asegúrese de que haya un kit de desarrollo de Java (JDK) instalado en su sistema operativo si desea utilizar PyJNIus en el escritorio. Se sabe que OpenJDK funciona y Oracle Java JDK también debería funcionar.
En Windows, asegúrese de que JAVA_HOME
apunte a su instalación de Java, para que PyJNIus pueda localizar el archivo jvm.dll
que le permita iniciar Java. Esto no debería ser necesario en macOS y Linux, pero en caso de que PyJNIus no lo encuentre, configurar JAVA_HOME
debería ayudar.
PyJNIus tiene licencia del MIT, está desarrollado activamente por una gran comunidad y cuenta con el respaldo de muchos proyectos administrados por la Organización Kivy.
Documentación para este repositorio.
¿Tiene problemas para utilizar PyJNIus o cualquiera de sus proyectos relacionados en el ecosistema Kivy? ¿Hay algún error que no entiendes? ¿Estás tratando de descubrir cómo usarlo? ¡Tenemos voluntarios que pueden ayudar!
Los mejores canales para contactarnos para obtener asistencia se enumeran en el último documento Contáctenos.
PyJNIus es parte del ecosistema Kivy: un gran grupo de productos utilizados por miles de desarrolladores de forma gratuita, pero está construido íntegramente con las contribuciones de voluntarios. Damos la bienvenida (y confiamos en) los usuarios que quieran contribuir a la comunidad contribuyendo al proyecto.
Las contribuciones pueden venir de muchas formas. Consulte las Pautas de contribución más recientes para saber cómo puede ayudarnos.
Con el fin de fomentar una comunidad abierta y acogedora, nosotros, como contribuyentes y mantenedores, debemos garantizar que la participación en nuestro proyecto y nuestros proyectos hermanos sea una experiencia positiva y libre de acoso para todos. Es vital que toda interacción se lleve a cabo de una manera que transmita respeto, mentalidad abierta y gratitud.
Consulte el Código de conducta más reciente.
Este proyecto existe gracias a todas las personas que contribuyen. [Conviértete en colaborador].
¡Gracias a todos nuestros patrocinadores! [Conviértete en patrocinador]
Un agradecimiento especial a todos nuestros patrocinadores, pasados y presentes. Apoye este proyecto [convirtiéndose en patrocinador].
Aquí están nuestros principales patrocinadores actuales. Haga clic para ver sus sitios web y apóyelos como ellos nos apoyan a nosotros.