2

读到JNI 函数(本机 C 部分)非常复杂,必须包含 java 包名称。

但是,在阅读 Android webkit 源码时。例如WebView.javanativeMoveGeneration中的函数

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();
}

他的 JNI 函数不遵循命名规则。为什么?

P/S:以上功能仅供演示。我正在阅读Android 4.0.3源码,所以可能与上面的github源码不同

更新 感谢@Alex Cohn 和这个JNI Tips,我知道我们可以使用 JNI_Onload 或使用复杂的名称。但是我们应该把 JNI_Onload 放在哪里呢?

4

1 回答 1

1

JNI 定义了特殊函数JNI_OnLoad。它在调用任何 JNI 方法之前调用,它可以使用指向任何 C 函数的指针填充本机方法表。见官方文档

于 2012-09-27T23:30:51.093 回答