17、java.lang.UnsatisfiedLinkError: No implementation 处理方法
一、問題現(xiàn)象
在使用第三方生成的 so 庫(kù)時(shí),遇到下面的bug:
UnsatisfiedLinkError: No implementation found for
java.lang.UnsatisfiedLinkError: No implementation found forjava.lang.String com.cloud.wd.tralanguage.JniUtil.getStringFromC() (tried Java_com_cloud_wd_tralanguage_JniUtil_getStringFromC and Java_com_cloud_wd_tralanguage_JniUtil_getStringFromC__)如圖:
二、問題分析
按照bug log提示內(nèi)容說(shuō)是我 getStringFromC 方法并沒有實(shí)現(xiàn):
而我引用的是第三方的so這個(gè)方法已經(jīng)實(shí)現(xiàn)了,既然實(shí)現(xiàn)了 為什么還會(huì)提示需要實(shí)現(xiàn)呢?
原來(lái)仔細(xì)觀察得知 :提示讓我實(shí)現(xiàn) 我自己寫的 native 方法:
com.cloud.wd.tralanguage.JniUtil.getStringFromC(),壓根沒有引用到我添加的so中的方法, 問題找到了那么如何引用 正確的so呢?
經(jīng)過一番的 google 發(fā)現(xiàn):再使用第三方so 方法時(shí), 所使用的native 類的位置要和之前生成 so 方法的 包名 、類名 、方法名 要完全一致!
例如:生成so工程的 native 方法類 ,
包名: com.cloud.jnitest 類名: JniTest 方法名:getStringFromC ()則 要想使用 so中的getStringFromC () 方法; 就需要
在使用的so工程中添加:
包名: com.cloud.jnitest 類名: JniTest 方法名:getStringFromC ()只用 兩者的包名 、類名、方法名 完全一致才會(huì)正確的引用到需要加載的so;
三、問題解決
問題找到了,就好解決了。
在src/main/java 目錄下建立 和生成so包名一樣的文件夾,
例如:使用生成so的包名是 com.cloud.jnitest ,那么就在使用so的工程src/main/java 新建 相同包名的文件。
在src/main/java /[so包名] 目錄下建立 和生成so包名一樣的類文件,
例如:使用生成so的類名是 JniTest ,那么就在使用so的工程src/main/java /[so包名] 新建 相同包名的類文件。
在src/main/java /[so包名] /類文件 ,中添加需要使用到的方法。
在使用 so的工程中 最終 效果:
啦啦啦 —— 今天夏至要吃面!所以 我今晚 下面給你吃呀 … 哈哈
參考鏈接:
http://m.blog.csdn.net/u012721933/article/details/51016027
http://blog.csdn.net/ouyang_peng/article/details/52997698
總結(jié)
以上是生活随笔為你收集整理的17、java.lang.UnsatisfiedLinkError: No implementation 处理方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FGA细粒度审计
- 下一篇: MDX的实例讲解(排名前15的小例子)