Java 无法使用.so文件解析相应的JNI函数
我对JNI完全陌生,必须使用现有的编译.so文件。 问题是Android Studio无法找到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
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);