android NDK学習編5のhello-jni――jniの中の頭のファイルの自動生成

2572 ワード

NDKのsamplesプロジェクトの中で、jniディレクトリの下にはありません。c/cppのヘッダファイルではなく、直接に方法の命名規則に従います。hello-j.cファイルのように、
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