مقدمة مفصلة لعملية تسجيل وظيفة Java JNI
عندما نسمي الكود الأصلي في Java ، يتم تنفيذها بشكل عام من خلال JNI. نحتاج فقط إلى تحميل ملف المكتبة المحلي في فئة Java ، ونعلن الطريقة الأصلية ، ثم نسميها حيث يجب استدعاؤها. بالنسبة للتنفيذ المحدد للطريقة الأصلية في Java ، يتم تسليمها إلى الطبقة الأصلية. ما هو الشرط المسبق بالنسبة لنا لاستدعاء الوظائف المقابلة بشكل صحيح في الكود المحلي في Java؟ الجواب هو إنشاء مراسلات فردية بين الأساليب الأصلية في Java والوظائف في الكود المحلي من خلال بعض الآليات. إذن ما هي هذه الآلية؟ إنها آلية التسجيل لوظائف JNI.
هناك طريقتان لتسجيل وظائف JNI ، والآخر هو طريقة التسجيل الثابت ، والآخر هو طريقة التسجيل الديناميكي. دعنا نقدم هاتين الطريقتين أدناه.
1. التسجيل الثابت.
1. مبدأ التنفيذ: إنشاء مراسلات فردية بين طريقة Java ودالة JNI بناءً على اسم الوظيفة.
2. عملية التنفيذ:
code code java ؛
② ترجمة رمز Java وإنشاء ملفات .class ؛
③ استخدم توجيه Javah لإنشاء ملف Jni .h باستخدام ملف .class الذي تم إنشاؤه ؛
④ يحتوي ملف رأس JNI الذي تم إنشاؤه على إعلان وظائف Java في طبقة JNI ؛
3. العيوب:
① الكتابة غير مريحة للغاية لأن أسماء وظائف طبقة JNI يجب أن تتبع تنسيقًا محددًا والأسماء طويلة بشكل خاص ؛
② سيؤدي ذلك إلى الكثير من العمل للمبرمجين ، لأنه يجب كتابة ملفات رأس JNI لجميع فئات Java التي تعلن الوظائف الأصلية ؛
③ يعمل البرنامج غير فعال ، لأنه عند استدعاء وظيفة أصلية لأول مرة ، تحتاج إلى البحث عن الوظيفة المحلية المقابلة في طبقة JNI وفقًا لاسم الوظيفة ، ثم إنشاء علاقة مقابلة. هذه العملية تستغرق وقتا طويلا.
2. التسجيل الديناميكي.
1. مبدأ التنفيذ: أخبر الوظيفة الأصلية مؤشرها مباشرة إلى الوظيفة المقابلة في JNI ؛
2. عملية التنفيذ:
① استخدم الهيكل JninativeMethod لحفظ المراسلات بين وظائف Java الأصلية ووظائف JNI ؛
② حفظ المراسلات بين جميع الوظائف الأصلية ووظائف JNI في صفيف jninativemethod ؛
③ بعد تحميل مكتبة JNI الديناميكية من خلال System.LoadLibrary في Java ، اتصل بوظيفة JNI_ONLOAD وابدأ التسجيل الديناميكي ؛
④ سيتم استدعاء وظيفة AndroidRuntime :: RecordNativeMethods في JNI_ONLOAD لتسجيل الوظائف ؛
⑤ الدعوة النهائية إلى JniregisterNativeMethods في AndroidRuntime :: registerNativeMethods التسجيل الكامل.
3. المزايا: التغلب على عيوب التسجيل الثابت.
شكرا لك على القراءة ، آمل أن تساعدك. شكرا لك على دعمك لهذا الموقع!