我对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"还没有解决!
提前致谢!
答案 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);