All Projects → kivy → Pyjnius

kivy / Pyjnius

Licence: mit
Access Java classes from Python

Programming Languages

python
139335 projects - #7 most used programming language
java
68154 projects - #9 most used programming language
python27
39 projects
python36
32 projects

Labels

Projects that are alternatives of or similar to Pyjnius

Keepalive
Fighting against force-stop kill process on Android with binder ioctl / Android高级保活
Stars: ✭ 376 (-65.35%)
Mutual labels:  jni
Fake Jni
An implementation of the JNI and JVMTI with support for direct interaction between natively registered classes and JVM objects.
Stars: ✭ 20 (-98.16%)
Mutual labels:  jni
Jnativehook
Global keyboard and mouse listeners for Java.
Stars: ✭ 1,015 (-6.45%)
Mutual labels:  jni
Jni Rs
Rust bindings to the Java Native Interface — JNI
Stars: ✭ 456 (-57.97%)
Mutual labels:  jni
Jpype
JPype is cross language bridge to allow python programs full access to java class libraries.
Stars: ✭ 685 (-36.87%)
Mutual labels:  jni
Javassembly
💾 Calling Assembly from Java: simple example using the JNI and NASM.
Stars: ✭ 28 (-97.42%)
Mutual labels:  jni
Aparapi
The New Official Aparapi: a framework for executing native Java and Scala code on the GPU.
Stars: ✭ 352 (-67.56%)
Mutual labels:  jni
Hellomello
Experiments with writing Android apps in Nim
Stars: ✭ 47 (-95.67%)
Mutual labels:  jni
Jep
Embed Python in Java
Stars: ✭ 759 (-30.05%)
Mutual labels:  jni
Rust Universal Template
Template for creating Rust libraries with bindings to iOS, Android, WebAssembly and more
Stars: ✭ 41 (-96.22%)
Mutual labels:  jni
Flapigen Rs
Tool for connecting programs or libraries written in Rust with other languages
Stars: ✭ 473 (-56.41%)
Mutual labels:  jni
Dart native
Write iOS&Android Code using Dart. This package liberates you from redundant glue code and low performance of Flutter Channel.
Stars: ✭ 564 (-48.02%)
Mutual labels:  jni
Anyndk
🔥 Android native library, make your development faster and easier. Android各种native库,让你的开发更快更简单
Stars: ✭ 35 (-96.77%)
Mutual labels:  jni
Fmj
FMJ (FFMpeg for Java)。通过Java调用FFMpeg命令的方式来对音视频进行处理(获取信息、截图等等)。
Stars: ✭ 379 (-65.07%)
Mutual labels:  jni
Learn
📚 codes written while learning them.
Stars: ✭ 44 (-95.94%)
Mutual labels:  jni
Android Api Securekeys
Store data in a simple and secure way
Stars: ✭ 372 (-65.71%)
Mutual labels:  jni
Kiss Fft
A compact FFT library in C with an Android JNI wrapper
Stars: ✭ 27 (-97.51%)
Mutual labels:  jni
Jenny
JNI glue code generator
Stars: ✭ 53 (-95.12%)
Mutual labels:  jni
Trime
同文安卓輸入法平臺3.x/Android-rime/Rime Input Method Engine for Android
Stars: ✭ 1,032 (-4.88%)
Mutual labels:  jni
Rucaja
Calling the JVM from Rust via JNI
Stars: ✭ 35 (-96.77%)
Mutual labels:  jni

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 Tests (x86) 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

  • Get python-for-android
  • Compile a distribution with kivy (PyJNIus will be automatically added)

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)

You can use the signatures method of JavaMethod and JavaMultipleMethod, to inspect the discovered signatures of a method of an object

>>> String = autoclass('java.lang.String')
>>> dir(String)
['CASE_INSENSITIVE_ORDER', '__class__', '__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')]

Each pair contains the list of accepted arguments types, and the returned type.

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]

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].