无法使用.so文件解析相应的JNI函数

时间:2016-05-04 17:08:31

标签: java android android-ndk java-native-interface native

我对JNI完全陌生,我必须使用现有的编译.so文件。 问题是Android Studio无法找到JNI功能。 我用类似的代码加载我的库:

public class MyService extends Service{

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

    private native void example();

}

它给了我一个错误"无法解析相应的JNI函数Java_com_company_app_MyService_example"。

如果我运行此命令(在终端中)

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

我得到了,在其他人之间(我只需要少量的图书馆功能),

register_com_company_app_service(_JNIEnv*)

(而不是MyService有服务)

我该怎么办?加载库或其他什么问题?

我还尝试过折射类名称" MyService"在"服务"但是" Java_com_company_app_service_example"还没有解决!

提前致谢!

1 个答案:

答案 0 :(得分:3)

您需要记住,函数签名必须与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);