/* Header for class com_zhuanghongji_ndkdemo_JNITest */
#ifndef _Included_com_zhuanghongji_ndkdemo_JNITest
#define _Included_com_zhuanghongji_ndkdemo_JNITest
#ifdef __cplusplus
extern “C” {
#endif
/*
-
Class: com_zhuanghongji_ndkdemo_JNITest
-
Method: getStringFromJNI
-
Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_zhuanghongji_ndkdemo_JNITest_getStringFromJNI
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
上面代码中的JNIEXPORT
和 JNICALL
是jni的宏,在android的jni中不需要,当然写上去也不会有错。从上面的源码中可以看出这个函数名那是相当的长啊。。。。 不过还是很有规律的, 完全按照:java_pacakege_class_mathod
形式来命名。
注意下上面的注释:
/*
-
1.该方法所在的类
-
Class: com_zhuanghongji_ndkdemo_JNITest
-
2.该方法所在类中的对应方法
-
Method: getStringFromJNI
-
3.其中()表示函数的参数为空
-
其中Ljava/lang/String;表示函数的返回值是java的String对象
-
Signature: ()Ljava/lang/String;
-
这里为空是指除了JNIEnv *, jobject 这两个参数之外没有其他参数,
-
JNIEnv*, jobject是所有jni函数必有的两个参数,
-
分别表示jni环境和对应的java类(或对象)本身
*/
6.接着在jni目录下新建一个 .c文件
来实现头文件里面声明的方法。
我自己建立的是:com_zhuanghongji_ndkdemo_JNITest.c
实现代码后,如下:
// include刚才生成的