javah -d (jni新建文件名) -classpath (sdk路径);(class 路径) (class文件名,包括包名)
-d 输出目录,jni是gradle默认的路径
-classpath jar的路径,有时碰到的找不到Activity的类的错误可能是由这个引起的
com.zhuanghongji.ndkdemo.JNITest 包名+类名
执行上述命令发现在main目录下多了一个jni文件夹,而且里面有生成好的头文件:com_zhuanghongji_ndkdemo_JNITest.h
内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* 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.该方法