Skip to main content

A Python module to access Java classes as Python classes using JNI.

Project description

PyJNIus

A Python module to access Java classes as Python classes using the Java Native Interface (JNI). Warning: the pypi name is now pyjnius instead of jnius.

Tests Builds PyPI Backers on Open Collective Sponsors on Open Collective

Installation

pip install pyjnius

Quick overview

>>> 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

Usage with python-for-android

Then, you can do this kind of things:

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 xrange(20):
    print Hardware.accelerometerReading()
    sleep(.1)

It will output something like:

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]

Advanced example

When you use autoclass, it will discover all the methods and fields of the class and resolve them. You may want to declare and use only what you need. The previous example can be done manually as follows:

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 xrange(20):
    print Hardware.accelerometerReading()
    sleep(.1)

Troubleshooting

Make sure a Java Development Kit (JDK) is installed on your operating system if you want to use PyJNIus on desktop. OpenJDK is known to work, and the Oracle Java JDK should work as well.

On windows, make sure JAVA_HOME points to your java installation, so PyJNIus can locate the jvm.dll file allowing it to start java. This shouldn't be necessary on OSX and Linux, but in case PyJNIus fails to find it, setting JAVA_HOME should help.

Support

If you need assistance, you can ask for help on our mailing list:

We also have a Discord server:

https://chat.kivy.org/

Contributing

We love pull requests and discussing novel ideas. Check out our contribution guide and feel free to improve PyJNIus.

The following mailing list and IRC channel are used exclusively for discussions about developing the Kivy framework and its sister projects:

License

PyJNIus is released under the terms of the MIT License. Please refer to the LICENSE file for more information.

Backers

Thank you to all our backers! 🙏 [Become a backer]

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for pyjnius, version 1.2.1
Filename, size File type Python version Upload date Hashes
Filename, size pyjnius-1.2.1-cp27-cp27m-macosx_10_13_x86_64.whl (258.2 kB) File type Wheel Python version cp27 Upload date Hashes View hashes
Filename, size pyjnius-1.2.1-cp27-cp27m-manylinux1_x86_64.whl (915.3 kB) File type Wheel Python version cp27 Upload date Hashes View hashes
Filename, size pyjnius-1.2.1-cp27-cp27m-manylinux2010_x86_64.whl (915.3 kB) File type Wheel Python version cp27 Upload date Hashes View hashes
Filename, size pyjnius-1.2.1-cp27-cp27mu-manylinux1_x86_64.whl (915.3 kB) File type Wheel Python version cp27 Upload date Hashes View hashes
Filename, size pyjnius-1.2.1-cp27-cp27mu-manylinux2010_x86_64.whl (915.3 kB) File type Wheel Python version cp27 Upload date Hashes View hashes
Filename, size pyjnius-1.2.1-cp34-cp34m-manylinux1_x86_64.whl (1.1 MB) File type Wheel Python version cp34 Upload date Hashes View hashes
Filename, size pyjnius-1.2.1-cp34-cp34m-manylinux2010_x86_64.whl (1.1 MB) File type Wheel Python version cp34 Upload date Hashes View hashes
Filename, size pyjnius-1.2.1-cp35-cp35m-manylinux1_x86_64.whl (1.0 MB) File type Wheel Python version cp35 Upload date Hashes View hashes
Filename, size pyjnius-1.2.1-cp35-cp35m-manylinux2010_x86_64.whl (1.0 MB) File type Wheel Python version cp35 Upload date Hashes View hashes
Filename, size pyjnius-1.2.1-cp36-cp36m-macosx_10_13_x86_64.whl (273.9 kB) File type Wheel Python version cp36 Upload date Hashes View hashes
Filename, size pyjnius-1.2.1-cp36-cp36m-manylinux1_x86_64.whl (1.1 MB) File type Wheel Python version cp36 Upload date Hashes View hashes
Filename, size pyjnius-1.2.1-cp36-cp36m-manylinux2010_x86_64.whl (1.1 MB) File type Wheel Python version cp36 Upload date Hashes View hashes
Filename, size pyjnius-1.2.1-cp36-cp36m-win_amd64.whl (207.0 kB) File type Wheel Python version cp36 Upload date Hashes View hashes
Filename, size pyjnius-1.2.1-cp37-cp37m-macosx_10_13_x86_64.whl (259.2 kB) File type Wheel Python version cp37 Upload date Hashes View hashes
Filename, size pyjnius-1.2.1-cp37-cp37m-manylinux1_x86_64.whl (1.1 MB) File type Wheel Python version cp37 Upload date Hashes View hashes
Filename, size pyjnius-1.2.1-cp37-cp37m-manylinux2010_x86_64.whl (1.1 MB) File type Wheel Python version cp37 Upload date Hashes View hashes
Filename, size pyjnius-1.2.1-cp37-cp37m-win_amd64.whl (202.5 kB) File type Wheel Python version cp37 Upload date Hashes View hashes
Filename, size pyjnius-1.2.1-cp38-cp38-macosx_10_13_x86_64.whl (264.0 kB) File type Wheel Python version cp38 Upload date Hashes View hashes
Filename, size pyjnius-1.2.1-cp38-cp38-manylinux1_x86_64.whl (1.3 MB) File type Wheel Python version cp38 Upload date Hashes View hashes
Filename, size pyjnius-1.2.1-cp38-cp38-manylinux2010_x86_64.whl (1.3 MB) File type Wheel Python version cp38 Upload date Hashes View hashes
Filename, size pyjnius-1.2.1-cp38-cp38-win_amd64.whl (207.8 kB) File type Wheel Python version cp38 Upload date Hashes View hashes
Filename, size pyjnius-1.2.1.tar.gz (41.0 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page