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 に答える