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)]()
|
|
|
|
|
|
|
|
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
|
|
|
|
----------------
|
|
|
|
|
2014-03-07 12:57:30 +00:00
|
|
|
You need a java JDK installed (OpenJDK will do), Cython and make to build it.
|
2016-02-09 21:33:21 +00:00
|
|
|
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
|
|
|
|
|
|
|
make
|
|
|
|
|
2014-03-07 12:57:30 +00:00
|
|
|
That's it! You can run the tests using
|
2012-08-14 21:28:26 +00:00
|
|
|
|
|
|
|
make tests
|
|
|
|
|
2014-03-07 12:57:30 +00:00
|
|
|
to ensure everything is running correctly.
|
2012-08-14 21:28:26 +00:00
|
|
|
|
2012-08-14 16:34:40 +00:00
|
|
|
Usage with python-for-android
|
|
|
|
-----------------------------
|
|
|
|
|
2012-08-14 16:35:17 +00:00
|
|
|
* Get http://github.com/kivy/python-for-android
|
2016-04-18 18:38:31 +00:00
|
|
|
* Compile a distribution with kivy (pyjnius will be automatically added)
|
2014-03-07 12:57:30 +00:00
|
|
|
* Then, you can do this kind of thing:
|
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
|
|
|
|
----------------
|
|
|
|
|
2014-03-07 12:57:30 +00:00
|
|
|
When you use autoclass, it will discover all the methods and fields of the
|
|
|
|
object and resolve them. For now, it is better to declare and use only what you
|
|
|
|
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
|
|
|
|
|
|
|
|
We also have an IRC channel:
|
|
|
|
|
|
|
|
* Server : irc.freenode.net
|
|
|
|
* Port : 6667, 6697 (SSL only)
|
|
|
|
* Channel : #kivy
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
IRC channel:
|
|
|
|
|
|
|
|
* Server : irc.freenode.net
|
|
|
|
* Port : 6667, 6697 (SSL only)
|
|
|
|
* Channel : #kivy-dev
|
|
|
|
|
|
|
|
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
|
|
|
|
LICENSE file.
|