javah -classpath D:\Demo\NDKDemo\app\src\main\java -d D:\Demo\NDKDemo\app\src\main\jni com.ang.ndkdemo.MainActivity
补充:可以通过 - o 指定生成的头文件名称,如果不指定,默认以类全路径名生成(包名 + 类名. h)
javah -classpath E:\Demo\JNIDemo\app\src\main\java -o E:\Demo\JNIDemo\app\src\main\java\jni\JNITest.h com.ang.MainActivity
2,执行以上命令之后:就在项目的 main 文件夹下创建了 jni 文件夹,并且在 jni 文件夹下自动创建了. h 头文件;头文件名也是自动生成的,命名规则是 com_ang_ndkdemo_MainActivity.h(包名 + 类名. h)
3,自动生成的 com_ang_ndkdemo_MainActivity.h 头文件代码
/* DO NOT EDIT THIS FILE - it is machine generated /
#include <jni.h>
/ Header for class com_ang_ndkdemo_MainActivity */
#ifndef _Included_com_ang_ndkdemo_MainActivity
#define _Included_com_ang_ndkdemo_MainActivity
#ifdef __cplusplus
extern “C” {
#endif
/*
- Class: com_ang_ndkdemo_MainActivity
- Method: fromJNIString
- Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_ang_ndkdemo_MainActivity_fromJNIString
(JNIEnv *, jobject);
/JNIEnv 是定义任意native函数的第一个参数(包括调用JNI的RegisterNatives函数注册的函数),指向JVM函数表的指针,函数表中的每一个入口指向一个JNI函数,每个函数用于访问JVM中特定的数据结构。*/
#ifdef __cplusplus
}
#endif
#endif
4,生成. h 头文件时候,如果出现 “找不到类文件” 的错误请参考 blog.youkuaiyun.com/ezconn/arti… 这篇文章
注意:
a. 包名或类名或方法名中含下划线 _ 要用 _1 连接;
b. 重载的本地方法命名要用双下划线 __ 连接;
c. 参数签名的斜杠 “/” 改为下划线 “_” 连接,分号 “;” 改为 “_2” 连接,左方括号 “[”