jni 簡介

jni的全稱就是Java Native Interface酥夭,顧名思義赐纱,就是Java和C/C++相互通信的接口;

jni開發(fā)的代碼會被編譯成so文件熬北,然后在java中加載so文件疙描;

so文件加載

java 加載so文件主要是兩種方式

  1. loadlibrary

    調用 System.loadLibrary(libname) 或 Runtime.getRuntime().loadLibrary(libname) 加載 so 文件,只需要指定 so 文件的名字讶隐,就會默認從系統(tǒng)的共享庫目錄里面去查找起胰;

  2. load

    調用 System.load(filename) 或 Runtime.getRuntime().load(filename)加載so庫,需要指定完整的so文件路徑巫延;

jni.h

jni 開發(fā)需要引用 jni.h效五;jni.h中主要包含以下部分:

  1. 基本數(shù)據(jù)類型

    typedef uint8_t         jboolean;       /* unsigned 8 bits */
    typedef int8_t          jbyte;          /* signed 8 bits */
    typedef uint16_t        jchar;          /* unsigned 16 bits */
    typedef int16_t         jshort;         /* signed 16 bits */
    typedef int32_t         jint;           /* signed 32 bits */
    typedef int64_t         jlong;          /* signed 64 bits */
    typedef float           jfloat;         /* 32-bit IEEE 754 */
    typedef double          jdouble;        /* 64-bit IEEE 754 */
    typedef unsigned char   jboolean;       /* unsigned 8 bits */
    typedef signed char     jbyte;          /* signed 8 bits */
    typedef unsigned short  jchar;          /* unsigned 16 bits */
    typedef short           jshort;         /* signed 16 bits */
    typedef int             jint;           /* signed 32 bits */
    typedef long long       jlong;          /* signed 64 bits */
    typedef float           jfloat;         /* 32-bit IEEE 754 */
    typedef double          jdouble;        /* 64-bit IEEE 754 */
    
    typedef jint            jsize;          /* "cardinal indices and sizes" */
    
  2. 數(shù)組類型

    class _jobject {};
    class _jclass : public _jobject {};
    class _jstring : public _jobject {};
    class _jarray : public _jobject {};
    class _jobjectArray : public _jarray {};
    class _jbooleanArray : public _jarray {};
    class _jbyteArray : public _jarray {};
    class _jcharArray : public _jarray {};
    class _jshortArray : public _jarray {};
    class _jintArray : public _jarray {};
    class _jlongArray : public _jarray {};
    class _jfloatArray : public _jarray {};
    class _jdoubleArray : public _jarray {};
    class _jthrowable : public _jobject {};
    
    typedef void*           jobject;
    typedef jobject         jclass;
    typedef jobject         jstring;
    typedef jobject         jarray;
    typedef jarray          jobjectArray;
    typedef jarray          jbooleanArray;
    typedef jarray          jbyteArray;
    typedef jarray          jcharArray;
    typedef jarray          jshortArray;
    typedef jarray          jintArray;
    typedef jarray          jlongArray;
    typedef jarray          jfloatArray;
    typedef jarray          jdoubleArray;
    typedef jobject         jthrowable;
    typedef jobject         jweak;
    
  3. 公共體類型

    typedef union jvalue {
        jboolean    z;
        jbyte       b;
        jchar       c;
        jshort      s;
        jint        i;
        jlong       j;c
        jfloat      f;
        jdouble     d;
        jobject     l;
    } jvalue;
    
  4. 方法id

    struct _jfieldID;                       /* opaque structure */
    typedef struct _jfieldID* jfieldID;     /* field IDs */
    
  5. 方法id

    struct _jmethodID;                      /* opaque structure */
    typedef struct _jmethodID* jmethodID;   /* method IDs */
    
  6. 引用類型定義

    typedef enum jobjectRefType {
        JNIInvalidRefType = 0,
        JNILocalRefType = 1,
        JNIGlobalRefType = 2,
        JNIWeakGlobalRefType = 3
    } jobjectRefType;
    
  7. 錯誤類型定義

    #define JNI_FALSE   0
    #define JNI_TRUE    1
    
    #define JNI_OK          (0)         /* no error */
    #define JNI_ERR         (-1)        /* generic error */
    #define JNI_EDETACHED   (-2)        /* thread detached from the VM */
    #define JNI_EVERSION    (-3)        /* JNI version error */
    
    #define JNI_COMMIT      1           /* copy content, do not free buffer */
    #define JNI_ABORT       2           /* free buffer w/o copying back */
    
  8. JNINativeInterface

    struct JNINativeInterface;
    struct _JNIEnv;
    
    typedef _JNIEnv JNIEnv;
    typedef const struct JNINativeInterface* C_JNIEnv;
    typedef const struct JNINativeInterface* JNIEnv;
    
  9. JNIInvokeInterface

    struct JNIInvokeInterface_;  
    struct JavaVM_;  
    #ifdef __cplusplus  
    typedef JavaVM_ JavaVM;  
    #else  
    typedef const struct JNIInvokeInterface_ *JavaVM;  
    
  10. 裝載與卸載方法

    JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved);
    JNIEXPORT void JNICALL JNI_OnUnload(JavaVM* vm, void* reserved);
    
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市烈评,隨后出現(xiàn)的幾起案子火俄,更是在濱河造成了極大的恐慌,老刑警劉巖讲冠,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異适瓦,居然都是意外死亡竿开,警方通過查閱死者的電腦和手機谱仪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來否彩,“玉大人疯攒,你說我怎么就攤上這事×欣螅” “怎么了敬尺?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長贴浙。 經(jīng)常有香客問我砂吞,道長,這世上最難降的妖魔是什么崎溃? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任蜻直,我火速辦了婚禮,結果婚禮上袁串,老公的妹妹穿的比我還像新娘概而。我一直安慰自己,他們只是感情好囱修,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布赎瑰。 她就那樣靜靜地躺著,像睡著了一般破镰。 火紅的嫁衣襯著肌膚如雪餐曼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天啤咽,我揣著相機與錄音晋辆,去河邊找鬼。 笑死宇整,一個胖子當著我的面吹牛瓶佳,可吹牛的內容都是我干的。 我是一名探鬼主播鳞青,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼霸饲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了臂拓?” 一聲冷哼從身側響起厚脉,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎胶惰,沒想到半個月后傻工,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年中捆,在試婚紗的時候發(fā)現(xiàn)自己被綠了鸯匹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡泄伪,死狀恐怖殴蓬,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情蟋滴,我是刑警寧澤染厅,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站津函,受9級特大地震影響肖粮,放射性物質發(fā)生泄漏。R本人自食惡果不足惜球散,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一尿赚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蕉堰,春花似錦凌净、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至皿渗,卻和暖如春斩芭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背乐疆。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工划乖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挤土。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓琴庵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親仰美。 傳聞我的和親對象是個殘疾皇子迷殿,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容