java工程中也可以利用JNI调用C/C++函数,并不是只能在Android项目中。

主要分四步:

  1. 在java工程中,首先声明native方法。这里我们使用eclipse建立一个java工程。
  2. 使用jdk中的javah 工具,生成native方法对应的 .h 文件。这个文件是给C/C++工程中使用的。
  3. 在C/C++工程中,引入 .h 文件。
  4. 在C/C++工程中,实现在.h 文件中声明的函数。
  5. 生成dll 文件
  6. 将dll 文件,添加到环境变量PATH里面。否则 System.loadlibarary()这个动态库会找不到。

 

1,如下是我们创建的一个java工程,在ricardo.jin.test 包下。文件名为TestJni.java

【NDK开发】java项目中调用c和c++代码

2,使用javah 工具生成 .h

【NDK开发】java项目中调用c和c++代码

这里我们可以参考书 《深入理解Android 卷I》中的\\第2章 深入理解JNI\\2.4.1 注册JNI函数

 

3, 可以看到生成的.h 文件如下:

/* DO NOT EDIT THIS FILE - it is machine generated */

#include <jni.h>

/* Header for class ricardo_jni_test_TestJni */

 

#ifndef _Included_ricardo_jni_test_TestJni

#define _Included_ricardo_jni_test_TestJni

#ifdef __cplusplus

extern "C" {

#endif

/*

 * Class:     ricardo_jni_test_TestJni

 * Method:    getStringFromC

 * Signature: ()Ljava/lang/String;

 */

JNIEXPORT jstring JNICALL Java_ricardo_jni_test_TestJni_getStringFromC

  (JNIEnv *, jclass);

 

#ifdef __cplusplus

}

#endif

#endif

 

 

可以看到这个文件中,只含有声明为native 的方法。

4,在我们的C++工程中,引入这个.h文件。

【NDK开发】java项目中调用c和c++代码

 

fix 编译的issue。 找不到 jni.h, 竟然在JDK目录下有这个文件,所以拷贝过来。同样还有 jni_md.h 。

 

注意:一定要手动的将文件拷贝到工程文件夹内才行。只是加入工程还是提示找不到文件。

 

【NDK开发】java项目中调用c和c++代码

 

让这个工程编译成dll 库。=》在Solution Explorer 点击右键 -》Properties -》在Configuration Properties的General中,将project default修改,由EXE 修改为 dll.

【NDK开发】java项目中调用c和c++代码

 

在工程的debug 目录下,这样就生成了 jni_study.dll 这个库文件。

相关文章:

  • 2021-11-12
  • 2021-11-30
  • 2021-11-07
  • 2022-12-23
  • 2021-11-18
  • 2021-04-08
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-25
  • 2021-11-15
  • 2022-01-13
  • 2022-12-23
  • 2021-08-17
  • 2021-09-27
  • 2021-10-26
相关资源
相似解决方案