2016-05-04 21 views
1

私はJNIの新機能で、既存のコンパイル済みの.soファイルを使用する必要があります。 問題は、Android StudioがJNI機能を見つけることができないことです。対応するJNI関数を.soファイルで解決できません。

public class MyService extends Service{ 

    static { 
     System.loadLibrary("mylib"); 
    } 

    private native void example(); 

} 

をし、それは私に、「JNI関数Java_com_company_app_MyService_example対応する解決できません」というエラーを与える: 私はこれまで、コード似てマイライブラリをロードします。代わりたMyServiceの

私は(ターミナルで)このコマンドを実行すると

arm-linux-androideabi-nm -DC mylib.so 

私は(私は図書館の唯一のいくつかの関数を必要とする)他の人の間で、取得、

register_com_company_app_service(_JNIEnv*) 

(ありサービス)

どうすればよいですか?ライブラリの読み込みに問題がありますか?

「サービス」のクラス名「MyService」も屈折させようとしましたが、「Java_com_company_app_service_example」も解決されませんでした。

ありがとうございます!

+0

はあなた 'build.gradle'のライブラリことを実装していますか? – Aspicas

+0

Ehm no ...どうすればいいですか? – Mirko

+0

'* .so'ファイルを' AndroidStudio'に含める方法を教えてください。多分あなたを助けることができます。http://stackoverflow.com/a/33164947/3626214 – Aspicas

答えて

2

関数の署名は、Javaの名前と一致していなければならず、エクスポートする必要があることに注意する必要があります。
また、メンバ関数は最初のパラメータとしてオブジェクトを受け取り、静的関数がそのクラスを受け取ります。

#ifdef __cplusplus 
extern "C" { 
#endif 
JNIEXPORT void JNICALL Java_Namespace_Class_MemberFunction 
     (JNIEnv *, jobject); 

JNIEXPORT void JNICALL Java_Namespace_Class_StaticFunction 
     (JNIEnv *, jclass); 

#ifdef __cplusplus 
} 
#endif 

だからあなたの場合には、それは次のようになります。

JNIEXPORT void JNICALL Java_com_company_app_MyService_example 
     (JNIEnv *, jobject); 
関連する問題