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个小时,该用的招数都用尽了,跑起来还是报这个错误,突然想到有没有可能是编译缓存导致的?
就是这个 .cxx 目录,我发现执行 Gradle clean
的时候,build
目前是可以清理掉的,但是这个 .cxx目录却没有删掉,会不会是它导致的?于是手动把build
目录,.gradle
目录,.cxx
目录都给删掉,然后再编译 so 库。
出人意外的是,这次居然可以了,看来往jni层添加新的code,编译新的 so 时,最好还是需要把这个 .cxx目录删掉才行。
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
标签:
jni
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库