Android アプリケーションの開発を開始し、次のチュートリアルに従いました。
http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/ しかし、アプリケーションは機能しませんでした。私はそれをデバッグし、ログの猫はこのメッセージを示しています: JNI_Onload が見つかりません..どうすればこの問題を解決できますか?
ありがとう
Android アプリケーションの開発を開始し、次のチュートリアルに従いました。
http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/ しかし、アプリケーションは機能しませんでした。私はそれをデバッグし、ログの猫はこのメッセージを示しています: JNI_Onload が見つかりません..どうすればこの問題を解決できますか?
ありがとう
JNI_OnLoad 関数の主な目的は、すべてのネイティブ メソッドを登録することです。
これは推奨される方法ですが、唯一の方法ではありません。したがって、JNI_OnLoad 関数の提供はオプションです。すべてのネイティブ メソッドを登録するために使用されるため、メソッドが実際に使用される前に、Java ネイティブ メソッド宣言とその C/C++ 対応部分との間の署名の不一致を検出できます。
代わりに、次のように静的クラス初期化子からネイティブ ライブラリをロードすることもできます。
static {
System.loadLibrary("mylib");
}
そうすれば、JNI_OnLoad 関数を提供する必要がなくなり、'mylib' 内のすべてのネイティブ メソッドが自動的に検出されます。唯一の欠点は、実際に呼び出すまで、ネイティブ メソッド シグネチャの一部が間違っているかどうかがわからないことです。その場合、'unsatisfiedlinkerror' が表示され、呼び出そうとしたネイティブ メソッドの実装が見つからないことが通知されます。
このオプション (オプション 2 - 自動検出) を使用する場合、デバッグ レベルのメッセージは、JNI_OnLoad 関数を提供するのを「忘れた」ことを伝える単なる警告になるため、無視してかまいません。
詳細については、JNI のヒントを参照してください:
http://developer.android.com/guide/practices/jni.html
JNI_OnLoad は、関数が見つからなかったことを知らせるデバッグ レベルのメッセージです。
これは、'extern "C"' 宣言をせずに JNI_OnLoad を書くことがあり、それが機能しない理由がわからないことがあるからです。
あなたが直面している問題は、おそらくメッセージとは無関係です。手がかりについては、近くの logcat 出力を見てください。dlopen() の失敗と Java 例外が関連している可能性があります。
その一部を質問に貼り付け、おそらく失敗をより詳細に説明する必要があります(「機能しなかった」は少しあいまいです)。