未找到本机的实现

Posted

技术标签:

【中文标题】未找到本机的实现【英文标题】:No implementation found for native 【发布时间】:2016-04-01 11:14:26 【问题描述】:

我有一个运行良好的测试项目。我尝试在我的其他项目中使用本地库(以及相同的方法),但出现此错误:

W/dalvikvm(22240): No implementation found for native Lcom/example/myapp/Serial;.open:(Ljava/lang/String;IIZ)Ljava/io/FileDescriptor;

这是 Serial 类中的 JNI 代码:

// JNI
    private native static FileDescriptor open(String path, int baudrate,
                int flags, boolean flowCon);
    public native void close();

    static 
        System.loadLibrary("test_lib");
    

我的 libs 文件夹中的三个文件夹中有“libtest_lib.so”:armeabi、armeabi-v7a、x86。

我调试了应用程序,似乎在调用本机方法“open”之前需要调用“System.loadLibrary”。所以我看不到错误的其他选项..

【问题讨论】:

如果我没记错的话,方法签名不匹配。 但我使用了相同的方法(复制粘贴)和相同的库.. 那怎么可能呢? 我的意思是和其他项目一样。 在您的库中未找到 Serial.open()。您使用的是显式注册还是隐式注册?它是如何声明的?尝试使用 nm 列出库中的符号以查看实际字符串。另见developer.android.com/training/articles/… 【参考方案1】:

您可能从另一个项目复制并粘贴了您的 c 文件中的原型重新定义为 Java_Pacakage_JavaParentClass_functionName(JNIEnv* env, jobject thiz)

【讨论】:

以上是关于未找到本机的实现的主要内容,如果未能解决你的问题,请参考以下文章

使用本机库(仅限 C,无 C++),但未找到实现

Android Studio 附加到进程未找到本机符号

休眠:- 未找到本机查询异常

未找到反应本机命令

“未找到基于 APR 的 Apache Tomcat 本机库”是啥意思?

什么是 API 19 中 OpenCV 的“未找到本机方法”错误?