Java 未满足LinkError:未找到本机方法(不是由此错误的常见原因引起的)
我正在尝试使用一个使用JNI的库 我试过开发人员提供的示例应用程序,效果很好。所以我知道这不是图书馆里的错误 我假设我在导入库的过程中出错了:Java 未满足LinkError:未找到本机方法(不是由此错误的常见原因引起的),java,android,java-native-interface,Java,Android,Java Native Interface,我正在尝试使用一个使用JNI的库 我试过开发人员提供的示例应用程序,效果很好。所以我知道这不是图书馆里的错误 我假设我在导入库的过程中出错了: 将.so文件复制到我的libs文件夹(名为libjniRTSP.so) 将jniRTSP.java(总结如下)复制到我的项目中: public class jniRTSP { private volatile static jniRTSP libRTSP = null; public static jniRTSP getInstance() {
- 将.so文件复制到我的libs文件夹(名为libjniRTSP.so)
- 将jniRTSP.java(总结如下)复制到我的项目中:
public class jniRTSP { private volatile static jniRTSP libRTSP = null; public static jniRTSP getInstance() { if(null == libRTSP) { synchronized(jniRTSP.class) { if(null == libRTSP) { libRTSP = new jniRTSP(); libRTSP.InitProductList(); // DEBUG libRTSP.SetDebugView(1); } } } return libRTSP; } static { try { System.loadLibrary("jniRTSP"); } catch (Exception e) { e.printStackTrace(); } } public native int GetBrandEnableRecorder(); public native int GetBrandEnableLocal(); public native int GetBrandEnableRemote(); ...
- 然后在onCreate()中,我尝试调用以下方法之一:
返回错误: 未满足链接错误:未找到本机方法com.myuniquepackage.jniRTSP.InitProductList:()IjniRTSP.getInstance().Init(.....)
更新(修复):我没有复制jniRTSP java文件,而是复制了包含它的整个包,并保持了相同的包名。我不确定这是否修复了它,因为包名是问题所在,还是因为它需要该包中的其他java文件之一。虽然我很确定它是否丢失了文件,但在编译时它会抱怨 相当确定的是,包声明在C代码中必须与Java代码相同 因此,类jniRTSP应该在Java中的com.myuniquepackage包中,并且声明了本机方法InitProductList,C代码应该将方法声明为Java_com_myuniquepackage_jniRTSP_InitProductList
通过移动类,您可能会破坏链接,更改Java中的包声明以匹配演示项目,并查看它是否有效,如果有效,您可以将其更改回来,然后在C代码中更改它,这会花费一些时间,但足够简单。调用
loadLibrary
是否真的成功了?另外,您确定jniRTSP方法使用的是.NET大写约定,而不是小写首字母吗?只有两个“常见的”:library not found和method not found,这是其中之一。@chrylis Yep是的,否则他会得到“UnsatisfiedLinkError找不到库'jniRTSP'”在此之前发生错误。@RyanfaeScotland我从未注意到这是一个错误
,而不是异常
!不,我只是复制了整个jniRTSP.java文件。而且我认为我没有访问C代码的权限,它打包在。soAre包声明在每个项目中都是一样的吗?根据您复制代码的方式,它们可能已自动更改。