PyJNIus هي مكتبة Python للوصول إلى فئات Java باستخدام Java Native Interface (JNI).
تتم إدارة PyJNIus بواسطة فريق Kivy ويمكن استخدامه مع python-for-android.
ويمكن استخدامه أيضًا بشكل مستقل عن Kivy، على منصات سطح المكتب والأجهزة المحمولة.
تحذير
أصبح اسم حزمة PyPI الآن pyjnius بدلاً من 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
بعد ذلك، يمكنك القيام بهذا النوع من الأشياء:
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 )
يمكنك استخدام طريقة signatures
الخاصة بـ JavaMethod
و JavaMultipleMethod
لفحص التوقيعات المكتشفة لأسلوب كائن ما
> >> 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' )]
يحتوي كل زوج على قائمة بأنواع الوسائط المقبولة والنوع الذي تم إرجاعه.
تأكد من تثبيت Java Development Kit (JDK) على نظام التشغيل الخاص بك إذا كنت تريد استخدام PyJNIus على سطح المكتب. من المعروف أن OpenJDK يعمل، ويجب أن يعمل Oracle Java JDK أيضًا.
على نظام التشغيل Windows، تأكد من أن JAVA_HOME
يشير إلى تثبيت Java الخاص بك، حتى يتمكن PyJNIus من تحديد موقع ملف jvm.dll
مما يسمح له ببدء تشغيل Java. لا ينبغي أن يكون هذا ضروريًا على نظامي التشغيل macOS وLinux، ولكن في حالة فشل PyJNIus في العثور عليه، فمن المفترض أن يساعد إعداد JAVA_HOME
.
PyJNIus مرخص من معهد ماساتشوستس للتكنولوجيا (MIT)، وتم تطويره بشكل نشط من قبل مجتمع كبير ويدعمه العديد من المشاريع التي تديرها منظمة Kivy.
وثائق لهذا المستودع.
هل تواجه مشكلة في استخدام PyJNIus أو أي من المشاريع ذات الصلة في نظام Kivy البيئي؟ هل هناك خطأ لم تفهمه؟ هل تحاول معرفة كيفية استخدامه؟ لدينا متطوعين يمكنهم المساعدة!
تم إدراج أفضل القنوات للاتصال بنا للحصول على الدعم في أحدث مستند اتصل بنا.
يعد PyJNIus جزءًا من نظام Kivy البيئي - وهو عبارة عن مجموعة كبيرة من المنتجات التي يستخدمها عدة آلاف من المطورين مجانًا، ولكنه تم إنشاؤه بالكامل من خلال مساهمات المتطوعين. نحن نرحب (ونعتمد على) المستخدمين الذين يرغبون في رد الجميل للمجتمع من خلال المساهمة في المشروع.
يمكن أن تأتي المساهمات بأشكال عديدة. اطلع على أحدث إرشادات المساهمة لمعرفة كيف يمكنك مساعدتنا.
من أجل تعزيز مجتمع مفتوح ومرحب، نحن كمساهمين ومشرفين بحاجة إلى ضمان أن المشاركة في مشروعنا ومشاريعنا الشقيقة هي تجربة إيجابية وخالية من التحرش للجميع. ومن الأهمية بمكان أن تتم جميع التفاعلات بطريقة تعكس الاحترام والانفتاح والامتنان.
يرجى الرجوع إلى أحدث قواعد السلوك.
هذا المشروع موجود بفضل جميع الأشخاص الذين ساهموا فيه. [كن مساهما].
شكرا لجميع الداعمين لدينا! [كن داعمًا]
شكر خاص لجميع الرعاة، في الماضي والحاضر. ادعم هذا المشروع من خلال [أن تصبح راعياً].
فيما يلي أهم الرعاة الحاليين لدينا. الرجاء النقر لرؤية مواقعهم الإلكترونية ودعمهم كما يدعموننا.