PyJNIus は、Java Native Interface (JNI) を使用して Java クラスにアクセスするための Python ライブラリです。
PyJNIus は Kivy チームによって管理されており、python-for-android で使用できます。
Kivy から独立して、デスクトップおよびモバイル プラットフォーム上で使用することもできます。
警告
PyPI パッケージ名はjnius
ではなく pyjnius になりました。
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
次に、次のようなことができます。
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 range ( 20 ):
print ( Hardware . accelerometerReading ())
sleep ( 0.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 range ( 20 ):
print ( Hardware . accelerometerReading ())
sleep ( 0.1 )
JavaMethod
およびJavaMultipleMethod
のsignatures
メソッドを使用して、オブジェクトのメソッドの検出された署名を検査できます。
> >> 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 Development Kit (JDK) がオペレーティング システムにインストールされていることを確認してください。 OpenJDK は動作することがわかっており、Oracle Java JDK も同様に動作するはずです。
Windows では、 JAVA_HOME
Java インストールを指していることを確認してください。これにより、PyJNIus がjvm.dll
ファイルを見つけて Java を起動できるようになります。 macOS と Linux ではこれは必要ありませんが、PyJNIus が見つからない場合に備えて、 JAVA_HOME
設定すると役立つはずです。
PyJNIus は MIT ライセンスを取得しており、優れたコミュニティによって積極的に開発されており、Kivy Organization によって管理される多くのプロジェクトによってサポートされています。
このリポジトリのドキュメント。
Kivy エコシステム内の PyJNIus またはその関連プロジェクトの使用に問題がありますか?理解できないエラーはありますか?それをどのように使用するかを考えようとしていますか?手伝ってくれるボランティアがいます!
サポートについてお問い合わせいただくのに最適なチャネルは、最新のお問い合わせドキュメントに記載されています。
PyJNIus は、Kivy エコシステムの一部です。Kivy エコシステムは、何千人もの開発者が無料で使用する大規模な製品グループですが、完全にボランティアの貢献によって構築されています。私たちは、プロジェクトに貢献することでコミュニティに貢献したいと考えているユーザーを歓迎します (そして信頼します)。
貢献にはさまざまな形があります。私たちへのご協力方法については、最新の貢献ガイドラインをご覧ください。
オープンで歓迎的なコミュニティを育成するという観点から、私たちはコントリビューターおよびメンテナーとして、私たちのプロジェクトおよび姉妹プロジェクトへの参加がハラスメントのない前向きな経験となるようにする必要があります。すべてのやり取りは、敬意、寛大さ、感謝の気持ちを伝える方法で行われることが重要です。
最新の行動規範をご確認ください。
このプロジェクトは、貢献してくださったすべての人々のおかげで存在します。 [寄稿者になる]。
後援者の皆様、ありがとうございました! 【後援者になる】
過去も現在もスポンサーの皆様に心より感謝申し上げます。 [スポンサーになる]ことでこのプロジェクトを支援してください。
現在のトップスポンサーは次のとおりです。クリックして彼らのウェブサイトを参照し、彼らが私たちをサポートするのと同じように彼らをサポートしてください。