JNI 作用: 是为了让 java代码 能调用c写的代码.
使用方法. : 先在我们的java类中 把 native 方法定义好, 例如 :
public native String javaCallC();
然后我们进入dos, 如果你的工具是 android studio, 我们切换到工程的 java目录下, 然后使用 javah 包名+类名 生成一个头文件, 下面 是生成好的文件
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_itcs_cscompany_jni_MainActivity */ #ifndef _Included_com_itcs_cscompany_jni_MainActivity #define _Included_com_itcs_cscompany_jni_MainActivity #ifdef __cplusplus extern "C" { #endif /* * Class: com_itcs_cscompany_jni_MainActivity * Method: javaCallC * Signature: ()V */ <pre name="code" class="cpp">JNIEXPORT jstring JNICALL Java_com_itcs_cscompany_jni_MainActivity_javaCallC (JNIEnv *, jobject);
#ifdef __cplusplus}#endif#endif
可以看到.
JNIEXPORT jstring JNICALL Java_com_itcs_cscompany_jni_MainActivity_javaCallC (JNIEnv *, jclass);
接下来我们在java目录 下 创建个c++文件.
然后把生成的头文件全部复制到 c++里面去.
JNIEXPORT jstring JNICALL Java_com_xxx_xx_ui_activity_SwipeLayoutTest_getContent (JNIEnv *env,jobject jclass){ return env->NewStringUTF("gaga"); }
并且在 JNIEnv *, jclass 改成 JNIEnv *env, jobject jclass, 并且写好返回值
注意........... 这里我们要写 #include "jni.h" 这就好比java中的import 什么是jni.h呢? 其实它是一个头文件, 里面包含的 c与java的 互调规范. 想了解的可自行去看~
我们直接返回了一个字符串
接下来 我们要在 build.gradle里面 的 defaultConfig下配置 ndk{ moduleName "firstJNI"} 这里的配置是指 编译出so库的名称
在我们的主activity中, 我们需要
static { System.loadLibrary("firstJNI"); }
加载这个so库, so库我们可以在build->intermediates->ndk里找到
然后直接调用方法就可以了~