เริ่มต้นใช้งาน Java Native Interface (JNI)

Getting Started With Java Native Interface



Java Native Interface หรือชื่อย่อ JNI เป็นอินเทอร์เฟซการเขียนโปรแกรมที่ช่วยให้นักพัฒนา Java เรียกใช้โค้ดและตัวอย่างจากภาษาการเขียนโปรแกรมอื่นๆ ใน Java มันมาพร้อมกับ Java Software Development Kit หรือ SDK ที่จำเป็น (เราจะกล่าวถึงในบทช่วยสอนอื่น)

JNI ยังได้รับการยกย่องสำหรับคุณสมบัติในการเรียก API เพื่อแอบเข้าไปในเครื่องเสมือน Java ในแอปพลิเคชัน Java ซึ่งช่วยให้นักพัฒนาสามารถเรียกใช้โค้ดจาวาภายในโค้ดของแอปพลิเคชันดั้งเดิมได้







หากคุณเคยทำงานกับจาวามาบ้างแล้ว คุณอาจเคยเจอปัญหาด้านประสิทธิภาพมากมายที่ตามมาอย่างหลีกเลี่ยงไม่ได้ นี่ไม่ใช่ปัญหาเมื่อคุณเรียกใช้โค้ดเดียวกันในภาษาแม่ ซึ่งสามารถทำงานได้เร็วกว่าสิบแปดเท่าเมื่ออ่านในโมเดลที่คอมไพล์แล้ว นอกจากนั้น คุณยังสามารถใช้รูทีนฮาร์ดแวร์ที่ล้าสมัย/เข้ากันไม่ได้กับโค้ดเนทีฟในภาษาอื่นๆ



บทช่วยสอนนี้จะสาธิตวิธีการเรียกใช้โค้ด C/C++ ของเครื่องจากภายในแอปพลิเคชันจาวา



ข้อกำหนดเบื้องต้น

คุณจะต้องมีบางสิ่งในการปฏิบัติตามคู่มือนี้อย่างถูกต้อง ซึ่งรวมถึงคอมไพเลอร์ Java หรือ Javac.exe พร้อมกับ JVM เช่นเดียวกับตัวสร้างเมธอด C (javah.exe) ทั้งสามสิ่งนี้มีอยู่ในชุดพัฒนาซอฟต์แวร์ ดังนั้นคุณก็ดีถ้าคุณมีสิ่งนั้น นอกจากสามสิ่งนี้ คุณจะต้องใช้ไฟล์ที่กำหนด JNI รวมถึงไฟล์ส่วนหัวดั้งเดิมและไฟล์ไลบรารีที่สมบูรณ์





และแน่นอน ในบทช่วยสอนเกี่ยวกับการรันโค้ด C และ C++ เราจะใช้คอมไพเลอร์ C เพื่อสร้างไลบรารีที่ใช้ร่วมกันด้วย

ส่วนประกอบ JNI

JNI ส่วนใหญ่ขับเคลื่อนโดยสององค์ประกอบคือ h และ javah H เป็นองค์ประกอบไฟล์ส่วนหัวที่แทนที่โค้ดเนทีฟด้วยโค้ดจาวา ในขณะที่ Javah สร้างขึ้นเพื่อให้สามารถโหลดไฟล์นี้ไปยังไฟล์ส่วนหัวของแอปได้ด้วยตัวเอง



เรียกใช้ C/C++ จากโค้ด Java

ขั้นตอนที่ 1: เขียนโค้ดใน Java

โค้ดนี้เขียนด้วย java ก่อนและเป็นไปตามเงื่อนไขสามข้อ ประการแรก มันถูกเขียนด้วยวิธีการดั้งเดิมที่จะเรียกใช้ในภายหลัง ประการที่สอง ต้องโหลดไลบรารีที่ใช้ร่วมกันซึ่งมีโค้ดเนทีฟอยู่ และสุดท้ายต้องเรียกใช้เมธอดดั้งเดิม

ลองใช้รหัสนี้เพื่ออธิบายเพิ่มเติม:

ประกาศบรรทัดที่ 3 และ 6; เหล่านี้เป็นบรรทัดที่รวมวิธีการดั้งเดิม รหัสที่โหลดไลบรารีที่ใช้ร่วมกันจะอยู่ในบรรทัดที่ 10 ซึ่งนำไปสู่การเรียกใช้เมธอดระหว่างบรรทัดที่ 12 ถึง 15

ขั้นตอนที่ 2: รวบรวมโค้ดจาวาเป็น bytecode

ขั้นตอนที่สองเกี่ยวข้องกับการรวบรวมโค้ดจาวา คอมไพเลอร์ javac สามารถทำงานได้ที่นี่สำหรับเรา เพียงออกคำสั่งด้านล่าง:

$javac ตัวอย่าง 1.จาวา

ขั้นตอนที่ 3: สร้างไฟล์ส่วนหัว C/C++

ถัดไป ต้องสร้างไฟล์ส่วนหัวของภาษาท้องถิ่น ไฟล์ส่วนหัวนี้ให้อำนาจแก่ลายเซ็นของโค้ดเนทีฟ

ไฟล์ส่วนหัวเหล่านี้สามารถสร้างได้ด้วยเครื่องมือเนทีฟ javah ซึ่งเป็นตัวสร้าง C stub ที่มาพร้อมกับ SDK โดยใช้คำสั่งต่อไปนี้:

javah Example1

ผลลัพธ์ต่อไปนี้ควรส่งคืน:

ขั้นตอนที่ 4: การเขียนโค้ดเนทีฟ

นี่คือที่ที่เราจะเขียนโค้ด C/C++ คุณควรสังเกตลายเซ็นทั้งหมดที่ต้องคล้ายกับการประกาศที่เราทำในขั้นตอนที่ 1

ต่อไปนี้เป็นการใช้งานที่เขียนด้วยภาษา C:

ขั้นตอนที่ 5: สร้างไลบรารีที่ใช้ร่วมกัน

ไลบรารีที่ใช้ร่วมกันสามารถสร้างได้ด้วยคอมไพเลอร์ใดก็ได้ เนื่องจากไลบรารีที่ใช้ร่วมกันมีโค้ดเนทีฟ เราจึงต้องสร้างขึ้นมา

ขั้นตอนที่ 6: เปิดโปรแกรมของคุณ

ขั้นตอนนี้เกี่ยวข้องกับการประเมินรหัสและระบุปัญหาใดๆ กับโปรแกรม สิ่งนี้จะเกี่ยวข้องกับสภาพแวดล้อมรันไทม์ของ Java เนื่องจากโค้ดจะดำเนินการใน JVM เป็นหลัก

ออกคำสั่งต่อไปนี้:

java Example1

ควรส่งคืน:

นั่นคือคู่มือเริ่มต้นสั้น ๆ ของเราเกี่ยวกับการใช้ Java Native Interface เราหวังว่าคุณจะพบว่ามีประโยชน์

การเรียนรู้วิธีทำงานกับ JNI เป็นสิ่งจำเป็นสำหรับทุกคนที่ต้องการพัฒนาแอปพลิเคชัน Java โดยเฉพาะแอปพลิเคชัน Android สำหรับสมาร์ทโฟน