跳转到主要内容

一个Python模块,用于通过JNI将Java类作为Python类访问。

项目描述

PyJNIus

一个Python模块,使用Java Native Interface (JNI) 将Java类作为Python类访问。警告:pypi名称现在是pyjnius,而不是jnius

Tests Tests (x86) Builds PyPI Backers on Open Collective Sponsors on Open Collective

安装

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

与python-for-android一起使用

然后,您可以这样做

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)

它将输出类似的内容

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]

高级示例

当您使用autoclass时,它将发现类的所有方法和字段,并解析它们。您可能只想声明和使用您需要的部分。上一个示例可以手动执行如下

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)

您可以使用JavaMethodJavaMultipleMethodsignatures方法来检查对象的某个方法发现的签名

>>> 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')]

每一对包含接受参数类型的列表和返回类型。

故障排除

如果您想在桌面使用PyJNIus,请确保您的操作系统上安装了Java开发工具包(JDK)。已知OpenJDK可以正常工作,Oracle Java JDK也应该可以正常工作。

在Windows上,请确保JAVA_HOME指向您的Java安装,这样PyJNIus可以定位到jvm.dll文件,使其能够启动Java。在OSX和Linux上通常不需要这样做,但万一PyJNIus找不到它,设置JAVA_HOME可能会有所帮助。

支持

如果您需要帮助,可以在我们的邮件列表上寻求帮助

我们还拥有一个Discord服务器

https://chat.kivy.org/

贡献

我们喜欢pull请求和讨论新想法。查看我们的贡献指南,并自由地改进PyJNIus。

以下邮件列表和IRC频道仅用于讨论开发Kivy框架及其相关项目

许可证

PyJNIus是在MIT许可证的条款下发布的。请参阅LICENSE文件以获取更多信息。

赞助商

感谢所有我们的赞助者!🙏 [成为赞助者]

赞助商

通过成为赞助者来支持此项目。您的标志将显示在这里,并带有链接到您的网站。[成为赞助者]

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

pyjnius-1.6.1.tar.gz (63.4 kB 查看哈希值)

构建分布

pyjnius-1.6.1-pp310-pypy310_pp73-win_amd64.whl (206.1 kB 查看哈希值)

上传于 PyPy Windows x86-64

pyjnius-1.6.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (252.4 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ x86-64

pyjnius-1.6.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (240.6 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ ARM64

pyjnius-1.6.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl (220.4 kB 查看哈希值)

上传于 PyPy macOS 10.9+ x86-64

pyjnius-1.6.1-pp39-pypy39_pp73-win_amd64.whl (205.7 kB 查看哈希值)

上传于 PyPy Windows x86-64

pyjnius-1.6.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (252.9 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ x86-64

pyjnius-1.6.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (240.0 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ ARM64

pyjnius-1.6.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (220.4 kB 查看哈希值)

上传于 PyPy macOS 10.9+ x86-64

pyjnius-1.6.1-pp38-pypy38_pp73-win_amd64.whl (206.7 kB 查看哈希值)

上传于 PyPy Windows x86-64

pyjnius-1.6.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (259.4 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ x86-64

pyjnius-1.6.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (246.9 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ ARM64

pyjnius-1.6.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (224.0 kB 查看哈希)

上传于 PyPy macOS 10.9+ x86-64

pyjnius-1.6.1-pp37-pypy37_pp73-win_amd64.whl (206.6 kB 查看哈希)

上传于 PyPy Windows x86-64

pyjnius-1.6.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (259.4 kB 查看哈希)

上传于 PyPy manylinux: glibc 2.17+ x86-64

pyjnius-1.6.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (246.9 kB 查看哈希)

上传于 PyPy manylinux: glibc 2.17+ ARM64

pyjnius-1.6.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (223.7 kB 查看哈希)

上传于 PyPy macOS 10.9+ x86-64

pyjnius-1.6.1-cp312-cp312-win_amd64.whl (223.8 kB 查看哈希)

上传于 CPython 3.12 Windows x86-64

pyjnius-1.6.1-cp312-cp312-win32.whl (194.9 kB 查看哈希)

上传于 CPython 3.12 Windows x86

pyjnius-1.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB 查看哈希)

上传于 CPython 3.12 manylinux: glibc 2.17+ x86-64

pyjnius-1.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.6 MB 查看哈希)

上传于 CPython 3.12 manylinux: glibc 2.17+ ARM64

pyjnius-1.6.1-cp312-cp312-macosx_10_9_x86_64.whl (277.9 kB 查看哈希)

上传于 CPython 3.12 macOS 10.9+ x86-64

pyjnius-1.6.1-cp312-cp312-macosx_10_9_universal2.whl (517.4 kB 查看哈希)

上传于 CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64)

pyjnius-1.6.1-cp311-cp311-win_amd64.whl (224.3 kB 查看哈希值)

上传于 CPython 3.11 Windows x86-64

pyjnius-1.6.1-cp311-cp311-win32.whl (191.9 kB 查看哈希值)

上传于 CPython 3.11 Windows x86

pyjnius-1.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64

pyjnius-1.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.6 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ ARM64

pyjnius-1.6.1-cp311-cp311-macosx_10_9_x86_64.whl (278.2 kB 查看哈希值)

上传于 CPython 3.11 macOS 10.9+ x86-64

pyjnius-1.6.1-cp311-cp311-macosx_10_9_universal2.whl (514.7 kB 查看哈希值)

上传于 CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

pyjnius-1.6.1-cp310-cp310-win_amd64.whl (222.6 kB 查看哈希值)

上传于 CPython 3.10 Windows x86-64

pyjnius-1.6.1-cp310-cp310-win32.whl (192.5 kB 查看哈希值)

上传于 CPython 3.10 Windows x86

pyjnius-1.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ x86-64

pyjnius-1.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ ARM64

pyjnius-1.6.1-cp310-cp310-macosx_10_9_x86_64.whl (277.2 kB 查看哈希值)

上传时间: CPython 3.10 macOS 10.9+ x86-64

pyjnius-1.6.1-cp310-cp310-macosx_10_9_universal2.whl (512.7 kB 查看哈希值)

上传时间: CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

pyjnius-1.6.1-cp39-cp39-win_amd64.whl (222.8 kB 查看哈希值)

上传时间: CPython 3.9 Windows x86-64

pyjnius-1.6.1-cp39-cp39-win32.whl (192.6 kB 查看哈希值)

上传时间: CPython 3.9 Windows x86

pyjnius-1.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB 查看哈希值)

上传时间: CPython 3.9 manylinux: glibc 2.17+ x86-64

pyjnius-1.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB 查看哈希值)

上传时间: CPython 3.9 manylinux: glibc 2.17+ ARM64

pyjnius-1.6.1-cp39-cp39-macosx_10_9_x86_64.whl (277.7 kB 查看哈希值)

上传时间: CPython 3.9 macOS 10.9+ x86-64

pyjnius-1.6.1-cp39-cp39-macosx_10_9_universal2.whl (513.6 kB 查看哈希值)

上传时间: CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

pyjnius-1.6.1-cp38-cp38-win_amd64.whl (222.8 kB 查看哈希值)

上传时间: CPython 3.8 Windows x86-64

pyjnius-1.6.1-cp38-cp38-win32.whl (192.5 kB 查看哈希值)

上传时间: CPython 3.8 Windows x86

pyjnius-1.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB 查看哈希值)

上传时间: CPython 3.8 manylinux: glibc 2.17+ x86-64

pyjnius-1.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB 查看哈希值)

上传时间: CPython 3.8 manylinux: glibc 2.17+ ARM64

pyjnius-1.6.1-cp38-cp38-macosx_10_9_x86_64.whl (275.4 kB 查看哈希值)

上传时间: CPython 3.8 macOS 10.9+ x86-64

pyjnius-1.6.1-cp38-cp38-macosx_10_9_universal2.whl (509.3 kB 查看哈希值)

上传时间: CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)

pyjnius-1.6.1-cp37-cp37m-win_amd64.whl (217.7 kB 查看哈希值)

上传时间: CPython 3.7m Windows x86-64

pyjnius-1.6.1-cp37-cp37m-win32.whl (189.6 kB 查看哈希值)

上传时间: CPython 3.7m Windows x86

pyjnius-1.6.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB 查看哈希值)

上传时间: CPython 3.7m manylinux: glibc 2.17+ x86-64

pyjnius-1.6.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB 查看哈希值)

上传时间: CPython 3.7m manylinux: glibc 2.17+ ARM64

pyjnius-1.6.1-cp37-cp37m-macosx_10_9_x86_64.whl (270.9 kB 查看哈希值)

上传时间: CPython 3.7m macOS 10.9+ x86-64

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面