android NDK学習編5のhello-jni――jniの中の頭のファイルの自動生成
2572 ワード
NDKのsamplesプロジェクトの中で、jniディレクトリの下にはありません。c/cppのヘッダファイルではなく、直接に方法の命名規則に従います。hello-j.cファイルのように、
その中のJNIEnv*env:
JNIの運行環境を通して、java層と対話することができます。JNIEnvポインタはJVMで作成され、Nativeのためのc/c+方法はJava実行スタックのデータを操作します。例えば、Java Class、Java Methodなど。
jobject thizまたはjclass class:
現在動作しているデータソースのオブジェクトを指します。静的な方法であれば、このクラスを指します。
具体的にはこれを参考にします。
http://blog.csdn.net/wantianpei/article/details/7638328
テーマに戻れば、上にはないということだけが示されています。hファイルは、jniの命名規則に従いさえすれば、javaがCメソッドを呼び出すのも問題ありません。ハローjniプロジェクトでjniヘッダファイルを生産するには、javahというツールが必要です。まずその助けを見て説明します。
プロジェクトのルートディレクトリで直接実行します。
javah-classipath./bin/classies-d./jni-jni comp.example.hello jni.Hello Jniというスタイルです。
実行後はプロジェクトディレクトリの下でjniフォルダを生産します。中には自動生産のものが保存されています。example_ハロドゥ.ハローJni.h
内容は以下の通りです
参考資料:
http://book.51cto.com/art/201305/395882.htm
jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
直接はJava_ですjavaローカルメソッドのパッケージ名(下線を使って点を置換します。つなげます。)_方法名(2つの固定パラメータ、javaから入ってきた他のパラメータ)。その中のJNIEnv*env:
JNIの運行環境を通して、java層と対話することができます。JNIEnvポインタはJVMで作成され、Nativeのためのc/c+方法はJava実行スタックのデータを操作します。例えば、Java Class、Java Methodなど。
jobject thizまたはjclass class:
現在動作しているデータソースのオブジェクトを指します。静的な方法であれば、このクラスを指します。
具体的にはこれを参考にします。
http://blog.csdn.net/wantianpei/article/details/7638328
テーマに戻れば、上にはないということだけが示されています。hファイルは、jniの命名規則に従いさえすれば、javaがCメソッドを呼び出すのも問題ありません。ハローjniプロジェクトでjniヘッダファイルを生産するには、javahというツールが必要です。まずその助けを見て説明します。
:javah [ ] < >
[ ] :
-help
-classpath < >
-bootclasspath < >
-d < >
-o < > ( -d -o )
-jni JNI ( )
-version
-verbose
-force
< >(
,java.lang.Object)。
一般的な使い方は、androidプロジェクトbin/clasesディレクトリに転送して実行します。javah -classpath ./ -d ../../jni -jni com.example.hellojni.HelloJni
個人の習慣を直接使う:プロジェクトのルートディレクトリで直接実行します。
javah-classipath./bin/classies-d./jni-jni comp.example.hello jni.Hello Jniというスタイルです。
実行後はプロジェクトディレクトリの下でjniフォルダを生産します。中には自動生産のものが保存されています。example_ハロドゥ.ハローJni.h
内容は以下の通りです
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_hellojni_HelloJni */
#ifndef _Included_com_example_hellojni_HelloJni
#define _Included_com_example_hellojni_HelloJni
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_example_hellojni_HelloJni
* Method: stringFromJNI
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_hellojni_HelloJni_stringFromJNI
(JNIEnv *, jobject);
/*
* Class: com_example_hellojni_HelloJni
* Method: unimplementedStringFromJNI
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_hellojni_HelloJni_unimplementedStringFromJNI
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
includeこのヘッダファイルは、Cコードを作成します。参考資料:
http://book.51cto.com/art/201305/395882.htm