歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android中JNI的使用之一:Java原生JNI的使用、javah指令的使用以及圖解教材

Android中JNI的使用之一:Java原生JNI的使用、javah指令的使用以及圖解教材

日期:2017/3/1 10:35:18   编辑:Linux編程
Java Nativie Interface(JNI,中文名稱Java本地接口)標准時Java平台的一部分,它允許Java代碼和其他語言寫得代碼進行交互。JNI是本地編程接口,它使得Java虛擬機(VM)內部運行的Java代碼能夠用其他編程語言(如C、C++和匯編語言)編寫的應用程序和庫進行交互操作。JNI的主要用途是為了對硬件進行訪問以及追求高效率或可重用C/C++庫。

Android系統中采用了JNI的方式來調用C/C++方法,然而,在Android系統裡進一步加強了Java JNI的使用,使JNI的調用更具有效率。因此,總的來說,Android系統裡可以采用兩種方式來使用JNI。第一種:Java原生JNI,使用dll等動態鏈接庫 ;第二種,Android加強版JNI,通過動態加載*.so鏈接庫來進行JNI調用。今天,我們分析第一種JNI使用方式,也稱得上是JNI入門。

由於Java與其他編程語言采用的語法不同,為了讓Java與C/C++庫函數能進行通信,約定的一個參數類型映射如下:

Java類型 C/C++類型

void void

jboolean boolean

jint int

jlong long

jdouble double

jfloat float

jbyte jbyte

jchar char

jshort shor

上面的只是簡單類型的一個映射,後面我們會完善其他參數類型的映射。

開發環境介紹(Windows下):

Eclipse: 主要用來創建Java工程

MicrosoftVC++6.0: 生成動態鏈接庫供相應的Java文件加載

一、使用Eclipse創建Java工程

本例中,我們簡單的創建了一個Java工程HelloBabyJNI,工程絕對路徑位於E:\MyCode\AndroidCode\HelloBabyJNI路徑下, 主文件路徑位於\src\lover\hellojni路徑下(路徑對後面的javah編譯很重要)

HelloBabyJNI.java文件如下:

[java]
  1. package com.lover.hellojni;
  2. /**
  3. * 一個簡單的Java JNI實例
  4. *
  5. */
  6. public class HelloBabyJNI {
  7. /*
  8. * 靜態構造函數,動態加載HelloBabyJNI動態庫,其dll文件名為:HelloBabyJNI.dll --->由MSVC6.0軟件創建
  9. */
  10. static {
  11. System.load("E:/HelloBabyJNI.dll"); // 可能需要 dll鏈接庫的絕對存放路徑
  12. }
  13. /*
  14. * 在Java中注冊需要調用的C/C++本地方法(native method),也就是需要C/C++來實現的方法
  15. */
  16. public native int add(int a, int b);
  17. // main方法,加載動態庫來調用C/C++本地方法
  18. public static void main(String[] args) {
  19. HelloBabyJNI helloBabyJNI = new HelloBabyJNI();
  20. // 調用注冊的add方法來得到返回值
  21. int result = helloBabyJNI.add(2, 3);
  22. // 輸出
  23. System.out.println("after invoke the native method,the result is "+ result);
  24. }
  25. }

2,編譯HelloBabyJNI.java文件,生成HelloBabyJNI.class文件,位於路徑\src\lover\hellojni\HelloBabyJNI.class

3,使用javah指令編譯HelloBabyJNI.class文件,生成Java與C/C++之間進行通信的約定接口,它規定了Java中nativemethod在C/C++的具體接口。運行cmd後,進入於E:\MyCode\AndroidCode\HelloBabyJNI\src路徑下,使用javah指令,指令集形式如下:

javah -classpath E:\MyCode\AndroidCode\HelloBabyJNI\src -jni com.lover.hellojni.HelloBabyJNI,具體指令用法可以參考javah –help,本文只是重應用上。

如圖所示:

Copyright © Linux教程網 All Rights Reserved