前面提到JNI主要是可以完成Java調用C++/C函數,C++/C也可以調用Java方法。先看Java調用C++/C函數。
下面先看java接口參數是String類型(入參)
example:
Java interface
public void setName(String name);
JNI file:
JNIEXPORT void JNICALL Java_setName_ 1native (JNIEnv *env, jclass thiz, jstring name)
{
const char* str;
jboolean isCopye = false;
/* 把傳進來的jstring類型轉爲utf-8類型,JNI中只識別編碼方式是UTF-8的 */
str = env->GetStringUTFChars(name, &isCopye);
…….
/* 注意使用完了最好讓JVM釋放轉換成UTF-8的 string的對象的空間,如果不顯示的調用的話,JVM中會一直保存 該對象,不會被垃圾回收器回收,有可能就會導致內存溢出。 */
env->ReleaseStringUTFChars(name, str);
}