android-记录一个UnsatisfiedLinkError的问题

JNI: 记录一个UnsatisfiedLinkError的问题

今天在使用下午build的一个so lib时,无意中报了下面的问题:

AndroidRuntime: FATAL EXCEPTION: Thread-4903
    Process: com.hxct.home, PID: 24487
    java.lang.UnsatisfiedLinkError: No implementation found for void com.gqt.codecs.AmrNB.close() (tried Java_com_gqt_codecs_AmrNB_close and Java_com_gqt_codecs_AmrNB_close__)
    at com.gqt.codecs.AmrNB.close(Native Method)
    at com.gqt.media.RtpStreamSender_group.run(RtpStreamSender_group.java:978)

看 log 说的是:

java.lang.UnsatisfiedLinkError: No implementation found for ...

其实这个错误之前也遇到过,根据以往的经验,这大概是说 java 端的 native 方法找不到对应的jni方法,一般情况下要么是生成的jni函数的签名与 java端native 不匹配(通常是包名不匹配),要么是 so 库还没有加载导致的,可仔细检查了下我的native方法签名与 jni函数签名是匹配的呀,我从来都是使用android studio 自动生成 jni 函数签名的,基本不大可能出错,而且按住Ctrl键点击方法名也能跳转到对应的C/Java方法 。

那到底是什么原因导致的呢?

折腾了大概快1个小时,该用的招数都用尽了,跑起来还是报这个错误,突然想到有没有可能是编译缓存导致的?

image-20230505140455144

就是这个 .cxx 目录,我发现执行 Gradle clean的时候,build目前是可以清理掉的,但是这个 .cxx目录却没有删掉,会不会是它导致的?于是手动把build目录,.gradle目录,.cxx目录都给删掉,然后再编译 so 库。

出人意外的是,这次居然可以了,看来往jni层添加新的code,编译新的 so 时,最好还是需要把这个 .cxx目录删掉才行。



如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
posted @   夜行过客  阅读(203)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示