2017-11-07 15 views
0

AndroidスタジオのAPPにJNIフォルダを作成しました。私はすべてのCファイルをコピーしましたが、NeuralNetwork.cの1つだけを呼び出す必要があります。NeuralNetwork_initialize.cNeuralNetwork_terminate.cもあります。私はすでにCMakeFileを持っています。私は、この(それはmain.cのと呼ばれる)のようなもので、別のCファイルを作成する必要があります知っているJavaクラスのC関数JNIを呼び出す

#import <jni.h> 
JNIEXPORT jstring JNICALL Java_com_dsp_testapp_NewRecordingActivity_getString(JNIEnv *env, jobject thiz) { 
return (*env)->NewStringUTF(env, "Hello World from C!"); 
} 

しかし、私はそれが特に私のNeuralNetwork.cを呼び出す必要があり、私が使用する必要がありますも知っています何らかの形で初期化して終了しますが、実際にはどのように知っているのでしょうか。

System.loadLibrary("my_src"); 

my_srcは私のcmakeのファイルを使用して生成された私のライブラリの名前です:

さて、私のJavaクラスでは、私はこれをしませんでした。 しかし私はmain.c機能を呼び出す方法を知らない。

  • NeuralNetwork.cは私だけでダブルを与える:1、または0と256

の長さと5つのベクトル入力を持っているあなたはこれで私を助けていただけますか?

答えて

0

基本的には、ライブラリで使用したもの(com.dsp.testapp.NewRecordingActivity)に対応する修飾名(class + package)でJavaクラスを作成する必要があります。その後、nativeとしてメソッドを宣言する必要があります:

public native getString(Object obj)

その後、ちょうどこのクラスのオブジェクトを作成し、メソッドを呼び出します。

+0

これは問題ありませんが、私のcクラスではどのようにして呼び出す必要のあるC関数を示しましたか? – user8559076

+0

私はその質問を理解するとは思わない。 'C'コードの中から' C'関数を呼びたい場合は、関数を呼び出してください(そのヘッダファイルがインクルードされていると仮定します)。 –

+0

「JavaはどのようにしてどのC関数を呼び出すかを知っていますか?」と尋ねると、C関数名からそれをデコードします。基本的には、 'Java_package_name_with_dots_replaced_by_underscores_methodName'を呼び出します。 –

関連する問題