PyJNIus adalah perpustakaan Python untuk mengakses kelas Java menggunakan Java Native Interface (JNI).
PyJNIus dikelola oleh Tim Kivy dan dapat digunakan dengan python-untuk-android.
Itu juga dapat digunakan secara independen dari Kivy, pada platform desktop dan seluler.
Peringatan
Nama paket PyPI sekarang menjadi pyjnius, bukan jnius
.
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
Kemudian, Anda dapat melakukan hal seperti ini:
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 )
Ini akan menampilkan sesuatu seperti:
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]
Saat Anda menggunakan autoclass
, ia akan menemukan semua metode dan bidang kelas dan menyelesaikannya. Anda mungkin ingin mendeklarasikan dan hanya menggunakan apa yang Anda perlukan. Contoh sebelumnya dapat dilakukan secara manual sebagai berikut:
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 )
Anda dapat menggunakan metode signatures
JavaMethod
dan JavaMultipleMethod
, untuk memeriksa tanda tangan yang ditemukan dari suatu metode suatu objek
> >> 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' )]
Setiap pasangan berisi daftar tipe argumen yang diterima, dan tipe yang dikembalikan.
Pastikan Java Development Kit (JDK) diinstal pada sistem operasi Anda jika Anda ingin menggunakan PyJNIus di desktop. OpenJDK diketahui berfungsi, dan Oracle Java JDK juga dapat berfungsi.
Di Windows, pastikan JAVA_HOME
menunjuk ke instalasi Java Anda, sehingga PyJNIus dapat menemukan file jvm.dll
yang memungkinkannya memulai Java. Ini seharusnya tidak diperlukan di macOS dan Linux, tetapi jika PyJNIus gagal menemukannya, pengaturan JAVA_HOME
akan membantu.
PyJNIus berlisensi MIT, dikembangkan secara aktif oleh komunitas besar dan didukung oleh banyak proyek yang dikelola oleh Organisasi Kivy.
Dokumentasi untuk repositori ini.
Apakah Anda mengalami masalah saat menggunakan PyJNIus atau proyek terkait lainnya di ekosistem Kivy? Apakah ada kesalahan yang tidak Anda mengerti? Apakah Anda mencoba mencari cara untuk menggunakannya? Kami memiliki sukarelawan yang dapat membantu!
Saluran terbaik untuk menghubungi kami untuk mendapatkan dukungan tercantum dalam dokumen Hubungi Kami terbaru.
PyJNIus adalah bagian dari ekosistem Kivy - sekelompok besar produk yang digunakan oleh ribuan pengembang secara gratis, namun dibangun sepenuhnya oleh kontribusi sukarelawan. Kami menyambut (dan mengandalkan) pengguna yang ingin memberikan kontribusi kepada komunitas dengan berkontribusi pada proyek ini.
Kontribusi bisa datang dalam berbagai bentuk. Lihat Pedoman Kontribusi terbaru untuk mengetahui bagaimana Anda dapat membantu kami.
Demi membina komunitas yang terbuka dan ramah, kami sebagai kontributor dan pengelola perlu memastikan partisipasi dalam proyek kami dan proyek sejenis kami memberikan pengalaman yang bebas pelecehan dan positif bagi semua orang. Semua interaksi harus dilakukan dengan cara yang menunjukkan rasa hormat, keterbukaan pikiran, dan rasa terima kasih.
Silakan berkonsultasi dengan Kode Etik terbaru.
Proyek ini ada berkat semua orang yang berkontribusi. [Menjadi kontributor].
Terima kasih kepada semua pendukung kami! [Menjadi pendukung]
Terima kasih khusus kepada semua sponsor kami, dulu dan sekarang. Dukung proyek ini dengan [menjadi sponsor].
Berikut adalah sponsor utama kami saat ini. Silakan klik untuk melihat situs web mereka, dan dukung mereka sebagaimana mereka mendukung kami.