这两天处理JNI的事情,发现以前处理过的问题,如今有些忘记了,以此记录,避免以后遗忘。
1、先建立个JniUtil类,以实现JNI类调用
public class JniUtil {
static {
System.loadLibrary("jniUtil");
}
public native String hello();
}
2、这里可以分两种情况处理,
(1)用Make Project生成JniUtil.class文件
(2)命令生成JniUtil.class
javac JniUtil.java
3、根据JniUtil.class生成.h文件
打开Android Studio的Terminal或者操作系统自带的Terminal。切换到代码的顶级目录app/src/main,命令为:
javah -d jni -classpath <class文件的路径> <包名+类名>
(1)make生成的class
avah -d jni -classpath E:\AndroidProjects\WbaseTestApp\app\build\intermediates\javac\debug\compileDebugJavaWithJavac\classes com.up.threevison.wbasetestapp.JniUtil
(2)javac生成的class
E:\AndroidProjects\WbaseTestApp\app\src\main>javah -d jni -classpath .\java com.up.threevison.wbasetestapp.JniUtil
4、对应的c头文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_up_threevison_wbasetestapp_JniUtil */
#ifndef _Included_com_up_threevison_wbasetestapp_JniUtil
#define _Included_com_up_threevison_wbasetestapp_JniUtil
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_up_threevison_wbasetestapp_JniUtil
* Method: hello
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_up_threevison_wbasetestapp_JniUtil_hello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif