2012-08-14 01:42:43 +00:00
PyJNIus
=======
2014-03-07 12:57:30 +00:00
A Python module to access Java classes as Python classes using JNI.
2017-03-24 00:46:02 +00:00
Warning: the pypi name is now `pyjnius` instead of `jnius` .
2012-08-14 13:36:26 +00:00
2015-11-03 13:56:50 +00:00
[![Build Status ](https://travis-ci.org/kivy/pyjnius.svg?branch=master )](https://travis-ci.org/kivy/pyjnius)
2017-03-24 00:46:02 +00:00
[![PyPI ](https://img.shields.io/pypi/v/pyjnius.svg )]()
2019-02-02 23:33:08 +00:00
[![Backers on Open Collective ](https://opencollective.com/kivy/backers/badge.svg )](#backers)
[![Sponsors on Open Collective ](https://opencollective.com/kivy/sponsors/badge.svg )](#sponsors)
2017-03-24 00:46:02 +00:00
Installation
------------
2017-03-24 01:06:41 +00:00
Requirements: Cython
2017-03-24 00:46:02 +00:00
```
2017-03-24 01:06:41 +00:00
pip install Cython
2017-03-24 00:46:02 +00:00
pip install pyjnius
```
2015-11-03 13:56:50 +00:00
2012-08-14 16:34:40 +00:00
Quick overview
2012-08-14 13:36:26 +00:00
--------------
2012-08-14 16:34:40 +00:00
```python
2012-08-20 17:42:59 +00:00
>>> from jnius import autoclass
2012-08-14 16:34:40 +00:00
>>> 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
```
2012-08-14 21:28:26 +00:00
Usage on desktop
----------------
2019-09-17 13:08:24 +00:00
You need a Java Development Kit (JDK) installed (OpenJDK will do), `Cython` and
`make` to build it. Please ensure that your `JDK_HOME` or `JAVA_HOME`
environment variable points to the installed JDK root directory, and that the
JVM library (`jvm.so` or `jvm.dll` ) is available from your `PATH` environment
variable. **Failure to do so may result in a failed install, or a successful
install but inability to use the PyJNIus library.**
2012-08-14 21:28:26 +00:00
2019-09-17 13:08:24 +00:00
```
make
```
2012-08-14 21:28:26 +00:00
2019-09-17 13:08:24 +00:00
That's it! You can ensure everything is running correctly using::
2012-08-14 21:28:26 +00:00
2019-09-17 13:08:24 +00:00
```
make tests
```
2012-08-14 21:28:26 +00:00
2012-08-14 16:34:40 +00:00
Usage with python-for-android
-----------------------------
2019-09-17 13:08:24 +00:00
* Get [http://github.com/kivy/python-for-android]()
* Compile a distribution with kivy (PyJNIus will be automatically added)
Then, you can do this kind of things:
2012-08-14 16:34:40 +00:00
```python
from time import sleep
from jnius import autoclass
Hardware = autoclass('org.renpy.android.Hardware')
print 'DPI is', Hardware.getDPI()
2013-07-02 07:20:35 +00:00
Hardware.accelerometerEnable(True)
2012-08-14 16:34:40 +00:00
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]
2012-08-14 16:38:30 +00:00
```
Advanced example
----------------
2019-09-17 13:08:24 +00:00
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
2014-03-07 12:57:30 +00:00
need. The previous example can be done manually as follows:
2012-08-14 16:38:30 +00:00
```python
from time import sleep
2018-04-30 11:54:43 +00:00
from jnius import MetaJavaClass, JavaClass, JavaMethod, JavaStaticMethod
2012-08-14 16:38:30 +00:00
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)
2012-08-14 21:28:26 +00:00
```
2012-09-06 12:16:13 +00:00
2015-11-03 13:56:50 +00:00
Support
-------
If you need assistance, you can ask for help on our mailing list:
* User Group : https://groups.google.com/group/kivy-users
* Email : kivy-users@googlegroups.com
2019-09-17 13:08:24 +00:00
We also have a Discord server:
2015-11-03 13:56:50 +00:00
2019-09-17 13:08:24 +00:00
[https://chat.kivy.org/ ](https://chat.kivy.org/ )
2015-11-03 13:56:50 +00:00
Contributing
------------
We love pull requests and discussing novel ideas. Check out our
[contribution guide ](http://kivy.org/docs/contribute.html ) 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:
* Dev Group : https://groups.google.com/group/kivy-dev
* Email : kivy-dev@googlegroups.com
License
-------
2012-09-06 12:16:13 +00:00
2015-11-03 13:56:50 +00:00
PyJNIus is released under the terms of the MIT License. Please refer to the
2019-09-17 13:08:24 +00:00
LICENSE file for more information.
2019-02-02 23:33:08 +00:00
## Backers
Thank you to all our backers! 🙏 [[Become a backer ](https://opencollective.com/kivy#backer )]
< a href = "https://opencollective.com/kivy#backers" target = "_blank" > < img src = "https://opencollective.com/kivy/backers.svg?width=890" > < / a >
## Sponsors
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor ](https://opencollective.com/kivy#sponsor )]
< a href = "https://opencollective.com/kivy/sponsor/0/website" target = "_blank" > < img src = "https://opencollective.com/kivy/sponsor/0/avatar.svg" > < / a >
< a href = "https://opencollective.com/kivy/sponsor/1/website" target = "_blank" > < img src = "https://opencollective.com/kivy/sponsor/1/avatar.svg" > < / a >
< a href = "https://opencollective.com/kivy/sponsor/2/website" target = "_blank" > < img src = "https://opencollective.com/kivy/sponsor/2/avatar.svg" > < / a >
< a href = "https://opencollective.com/kivy/sponsor/3/website" target = "_blank" > < img src = "https://opencollective.com/kivy/sponsor/3/avatar.svg" > < / a >
< a href = "https://opencollective.com/kivy/sponsor/4/website" target = "_blank" > < img src = "https://opencollective.com/kivy/sponsor/4/avatar.svg" > < / a >
< a href = "https://opencollective.com/kivy/sponsor/5/website" target = "_blank" > < img src = "https://opencollective.com/kivy/sponsor/5/avatar.svg" > < / a >
< a href = "https://opencollective.com/kivy/sponsor/6/website" target = "_blank" > < img src = "https://opencollective.com/kivy/sponsor/6/avatar.svg" > < / a >
< a href = "https://opencollective.com/kivy/sponsor/7/website" target = "_blank" > < img src = "https://opencollective.com/kivy/sponsor/7/avatar.svg" > < / a >
< a href = "https://opencollective.com/kivy/sponsor/8/website" target = "_blank" > < img src = "https://opencollective.com/kivy/sponsor/8/avatar.svg" > < / a >
< a href = "https://opencollective.com/kivy/sponsor/9/website" target = "_blank" > < img src = "https://opencollective.com/kivy/sponsor/9/avatar.svg" > < / a >