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

Java 无法使用.so文件解析相应的JNI函数,java,android,android-ndk,java-native-interface,native,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\u com\u company

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

public class MyService extends Service{

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

    private native void example();

}
它给了我一个错误“无法解析相应的JNI函数Java\u com\u company\u app\u MyService\u example”

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

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

(这里不是MyService,而是服务)

我能做什么?加载库或其他方面是否存在问题

我还尝试在“服务”中折射类名“MyService”,但“Java\u com\u company\u app\u service\u example”也没有解析


提前谢谢

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

您是否在
build.gradle
上实现了该库?Ehm否。。。我该怎么做?检查我的答案如何包含
*。因此
AndroidStudio中的
文件可能对您有帮助,但没有帮助。如果可以的话,我只有(一个)so文件,没有JAR文件。您是否看到了以
Java\uuu
开头的导出函数?您不应该对
nm
命令使用
-C
#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);