I read that JNI函数(本机C部分)非常复杂,必须包含java包名。
然而,在阅读Android webkit源码时。例如WebView.java
中的nativeMoveGeneration
函数
private native int nativeMoveGeneration();
它调用WebView.cpp
中的JNI函数static int nativeMoveGeneration(JNIEnv *env, jobject obj)
{
WebView* view = GET_NATIVE_VIEW(env, obj);
if (!view)
return 0;
return view->moveGeneration();
}
Ihis JNI功能不遵循命名规则。为什么?
P / S:上述功能仅用于演示。我正在阅读Android 4.0.3源代码,因此它可能与上面的github源代码不同
更新 感谢@Alex Cohn和这个JNI Tips,我知道我们可以使用JNI_Onload或使用复杂的名称。但是我们应该把JNI_Onload放在哪里?
答案 0 :(得分:1)
JNI定义了特殊功能 JNI_OnLoad 。它在调用任何JNI方法之前调用,并且可以使用指向任何C函数的指针填充本机方法表。见the official document