jni開発:jni基礎チュートリアルおよびインスタンス(一)

3166 ワード

このブログは初めてjniに触れたシロを連れてjniの基本的な知識の理解を完成します.本編は主に概念を主とし、次のブログはみんなを連れて難易度の低いjniの実例を完成させます.2つのブログを続けて見てください.ありがとうございます.
一.jniの概要
1.jniのフルネームはJava Native Interfaceであり、JavaとC/C++が通信するインタフェースであり、生活の中で2人が取引を行う仲介者に似ている.
2.以下の場合はjniが必要
1開発時にjava言語でサポートされていないオペレーティングシステムプラットフォームの特性に依存するいくつかの機能を呼び出す必要がある.
2開発時、CやC++など、以前のjava以外の言語で開発されたシステムを統合するために開発された.
③開発時には、プログラムの実行時間を節約するために、いくつかの低レベルまたは中級言語を採用しなければならない.
二.データ転送の基本タイプ
java type   ->  jni type
boolean    ->  jboolean
byte          ->  jbyte
char          ->  jchar
short         ->  jshort
int              ->  jint
long           ->  jlong
float           ->  jfloat
double       ->  jdouble
All Reference type ->  jobject
三.jni署名規則
1.JNIメソッド署名ルール:(パラメータ1タイプ署名パラメータ2タイプ署名......パラメータnタイプ署名)
2.値タイプの署名を返します.署名の間にスペースも区切りもありません.
3.署名規則
①boolean対応署名はZ
②byte対応署名はB
③char対応署名はC
④long対応署名はJ
⑤float対応署名はF
⑥double対応署名はD
⑦short対応署名はS
⑧int対応署名はI
⑨クラスの対応署名はL+全限定クラス名+;3つの部分からなり、クラス名をすべて/分割する
⑩配列の対応署名は[+要素タイプ署名、例えばint[]署名は[I
四.一般的な関数
jni.hヘッダファイルには、すでに書かれた関数がたくさんあります.ここでは例を挙げて説明します.
1.
jclass FindClass (JNIEnv *env, const char *name);

  :             
  :env jni    ,name     , /  
  :       ,       ,    NULL

2.
jobject AllocObject (JNIEnv *env, jclass clazz);  

  :    Java                 ,        ,clazz            
  :env jni    ,clazz java   
  :   Java   ,         ,   NULL

3.
jclass GetObjectClass (JNIEnv *env, jobject obj);

  :      
  :env jni    ,obj java  
  :java   

4.
jstring  NewString (JNIEnv *env, const jchar *unicodeChars,   jsize len);

  :   Unicode          java.lang.String   
  :env jni    ,unicodeChars         ,len       
  :Java      ,          ,  NULL

5.
jsize  GetStringLength (JNIEnv *env, jstring string);

  :   Java       
  :env jni    ,string java     
  :Java       

6.
jsize GetArrayLength (JNIEnv *env, jarray array);

  :         
  :env jni    ,array java  
  :          

7.
jobject  GetObjectArrayElement (JNIEnv *env,   jobjectArray array, jsize index);

  :  Object     
  :env jni    ,array java  ,index     
  :Java   

8.
void  SetObjectArrayElement (JNIEnv *env, jobjectArray array,  jsize index, jobject value);

  :   Object      
  :env jni    ,array java  ,index     ,value         
  : 

9.
jmethodID GetMethodID(JNIEnv *env, jclass clazz,const char *name, const char *sig);
 
  :        (   )     ID
  :env jni    ,clazz java   ,name    ,sig      
  :   ID,          ,   NULL

10.
NativeType CallMethod (JNIEnv*en v,  jobject obj , jmethodID methodID, ...);

  :       Java     ,   methodID        GetMethodID()   
  :env jni    ,obj java  ,methodID   ID
   :      Java      

これらはすべて基本的な概念で、理解するのは少し難しいかもしれませんが、次の文章ではdemoを例に、jniの使用を探求し続けます.
次の記事のリンクを添付します:jni開発:jni基礎チュートリアルと例(二)