Bắt đầu với Java Native Interface (JNI)

Getting Started With Java Native Interface



Java Native Interface, viết tắt là JNI, là một giao diện lập trình cho phép các nhà phát triển Java chạy mã và đoạn mã từ các ngôn ngữ lập trình khác trong Java. Nó đi kèm với Bộ phát triển phần mềm Java cần thiết hoặc SDK (chúng tôi sẽ đề cập đến vấn đề đó trong một hướng dẫn khác).

JNI cũng được tôn trọng vì tính năng gọi API để lẻn vào máy ảo Java trong các ứng dụng Java. Điều này cho phép các nhà phát triển gọi mã java trong mã của ứng dụng gốc.







Nếu bạn đã dành một thời gian làm việc với java, có thể bạn đã gặp phải nhiều vấn đề về hiệu suất chắc chắn xảy ra theo cách của bạn. Đây không phải là vấn đề khi bạn chạy cùng một mã bằng ngôn ngữ mẹ đẻ, mã này có thể hoạt động nhanh hơn mười tám lần khi đọc trong mô hình đã biên dịch. Ngoài ra, bạn cũng có thể sử dụng các quy trình phần cứng lỗi thời / không tương thích với mã gốc ở các ngôn ngữ khác.



Hướng dẫn này sẽ chứng minh cách mã C / C ++ của máy có thể được gọi từ bên trong ứng dụng java.



Điều kiện tiên quyết

Bạn sẽ cần một số điều để thực hiện đúng hướng dẫn này. Chúng bao gồm trình biên dịch Java, hoặc Javac.exe, cùng với JVM, cũng như trình tạo phương thức gốc C (javah.exe). Cả ba điều này đều được tích hợp sẵn trong bộ công cụ phát triển phần mềm, vì vậy bạn sẽ rất tốt nếu có. Bên cạnh ba tệp này, bạn cũng sẽ cần các tệp xác định JNI, bao gồm tệp tiêu đề Gốc và tệp thư viện hoàn chỉnh.





Và tất nhiên, trong hướng dẫn về cách chạy mã C và C ++, chúng tôi cũng sẽ sử dụng trình biên dịch C để tạo thư viện được chia sẻ.

Các thành phần JNI

JNI chủ yếu được điều khiển bởi hai thành phần, đó là h và javah. H là thành phần tệp tiêu đề thay thế mã gốc bằng mã java, trong khi Javah tạo ra nó để tệp này có thể được tải vào tệp tiêu đề ứng dụng.



Gọi C / C ++ từ mã Java

Bước 1: Viết mã bằng Java

Đầu tiên, mã này được viết bằng java và tuân thủ ba điều kiện. Đầu tiên, nó được viết bằng phương thức gốc sẽ được gọi sau này. Thứ hai, nó phải tải thư viện được chia sẻ mà mã gốc là một phần, và cuối cùng, nó phải gọi các phương thức gốc.

Hãy sử dụng mã này để minh họa thêm:

Chú ý dòng 3 và 6; đây là những dòng chứa các phương thức gốc. Mã tải các thư viện được chia sẻ nằm trên dòng 10, dẫn đến phương thức được gọi giữa các dòng 12 đến 15.

Bước 2: Biên dịch mã java thành bytecode

Bước thứ hai phải làm với việc biên dịch mã java. Trình biên dịch javac có thể thực hiện công việc ở đây cho chúng tôi; chỉ cần đưa ra lệnh dưới đây:

$ javac Ví dụ 1.java

Bước 3: Tạo tệp tiêu đề C / C ++

Tiếp theo, các tệp tiêu đề ngôn ngữ mẹ đẻ phải được tạo. Tệp tiêu đề này hỗ trợ chữ ký của các mã gốc.

Các tệp tiêu đề này có thể được tạo bằng công cụ gốc javah, một trình tạo sơ khai C đi kèm với SDK, bằng cách sử dụng lệnh sau:

javah Ví dụ1

Kết quả đầu ra sau đây sẽ trả về:

Bước 4: Viết mã gốc

Đây là nơi chúng tôi sẽ viết mã C / C ++. Bạn cần lưu ý tất cả các chữ ký phải giống với các khai báo mà chúng tôi đã thực hiện ở bước 1.

Sau đây là một triển khai được viết bằng ngôn ngữ C:

Bước 5: Tạo thư viện chia sẻ

Một thư viện chia sẻ có thể được tạo bằng bất kỳ trình biên dịch nào. Vì thư viện được chia sẻ chứa mã gốc nên chúng tôi sẽ phải tạo một thư viện.

Bước 6: Khởi chạy chương trình của bạn

Bước này liên quan đến việc đánh giá mã và xác định bất kỳ vấn đề nào với chương trình. Điều này sẽ liên quan đến môi trường thời gian chạy Java vì mã sẽ thực thi chủ yếu trong JVM.

Đưa ra lệnh sau:

java Ví dụ1

Nó sẽ trả về:

Vì vậy, đó là hướng dẫn ngắn gọn dành cho người mới bắt đầu của chúng tôi để sử dụng Java Native Interface. Chúng tôi hy vọng bạn thấy nó hữu ích.

Học cách làm việc với JNI là điều cần thiết cho bất kỳ ai muốn phát triển các ứng dụng Java, đặc biệt là các ứng dụng android cho điện thoại thông minh.