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.
2.
3.
4.
5.
6.
7.
8.
9.
10.
これらはすべて基本的な概念で、理解するのは少し難しいかもしれませんが、次の文章ではdemoを例に、jniの使用を探求し続けます.
次の記事のリンクを添付します:jni開発:jni基礎チュートリアルと例(二)
一.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基礎チュートリアルと例(二)