2017-07-20 12 views
1

Android NDKの新機能で、Androidデベロッパーサイトでthese tipsと読んでいました。ネイティブメソッドを登録するにはJNI_OnLoadを使用することをお勧めしますが、その方法を詳しく説明していません。Android NDKでは通常JNI_OnLoadが使用されていますか?

検索Google's NDK sample repo on GitHubは、JNI_OnLoadという1つの使用方法しか示していません。RegisterNativesは呼び出されません。ウェブを検索してもこれをどうやって行うのかはほとんど分かりませんでした。

私は何かが欠けているように感じます。 Googleによると、これは正しい方法であると考えられていますが、独自の例では代わりに「発見」メソッド命名アプローチを使用しています。

これはおそらくこれを行う古い方法ですか、これはもう実際には行われませんか?

答えて

2

RegisterNativesをが完全にAndroid上で支持されており、それを行うための適切な方法でもうまく機能してshown prominently in NDK documentationあるJNI_OnLoadを、からです。 RegisterNativesとネームマッチング(は常にjavahを使用して正しい名前を得る)によるネイティブメソッドの通常の自動解決と対比する理由はほとんどありません。

  1. あなたはネイティブメソッドの多くを持って

    は、あなたはあなたの共有ライブラリに巨大なエクスポートされた関数テーブルを持ってしたくない場合があります。

  2. 自動マッチングを使用すると、リバースエンジニアリングと共有ライブラリのハッキングが容易になります。

  3. 実行時にネイティブメソッドと一致するカスタムロジックを構築できます。

  4. @CriticalNative方法はRegisterNativesを代わりの動的JNIのリンクに依存して登録しなければなりません。これらの理由の

なしハウツーサンプルや入門チュートリアルには適用されません。

+0

はい、あなたが提供したリンクは、私が参照していたドキュメントの同じ部分です。そのサブセクションを直接指すようにリンクを更新します。しかし、多くの詳細が欠落しており、私はオンライン検索でそれらを表示できませんでした。それが私になぜそれが当てはまるのか疑問に思った。 'JNI_OnLoad'が使われている詳細な例やチュートリアルを教えてください。私はこの答えを受け入れるでしょう、しかし、それは答えられたように質問に答えます。洞察に感謝します。 – orodbhen

+0

チュートリアルではなく、たくさんのopensource:[シンプル](https://android.googlesource.com/platform/development/+/master/samples/SimpleJNI)や[more advanced](https://chromium.googlesource) com/external/webrtc/+/master/modules/audio_device/android/audio_manager.cc)。 –

関連する問題