🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
接下来我们需要使用javah工具生成JNI风格的头文件了,之后我们需要在c文件中实现相关的原生方法,你可以执行一下命令: `javah -jni HelloWorld` 头文件的名字是类名+.h,类型是包含全包名的类名,我们这里的实例程序没有包名,就直接是HelloWorld.h了.这里就不再将整个头文件内容列出,只是列出我们关心最重要的部分:print函数的c函数原型. ~~~ /* * Class: HelloWorld * Method: print * Signature: ()V */ JNIEXPORT void JNICALL Java_HelloWorld_print (JNIEnv * env, jobject obj) { printf("Hello World!\n"); } ~~~ 忽略JNIEXPORT 和JNICALL这两个宏, 你会发现这个原生函数签名中包含两个参数,而相应的Java语言中的print函数则是没有参数的.每一个原生函数的第一个参数是一个JNIEnv接口指针,第二个参数指向HelloWorld对象本身(有点像c++语言中的this指针).注意我们的print函数是非静态函数,如果是静态函数,则第二个参数应当是jclass类型.在本书的后续章节我们会讨论如何使用JNIEnv接口指针和jobject参数,在这里我们就暂且忽略它了(因为我们的代码用不到这两个参数).