天天看點

android java.lang.UnsatisfiedLinkError: 分析及解決方法

産生此類異常主要有兩種原因:

一, jni還沒有編譯 是一邊編譯一邊用的

 這要分兩種情況:

  第一種是unsatisfiedlinkerror:dll名稱。說明dll沒有放到合适的位置。對于android開發,我們一般把so放在 libs目錄下,但是還是會出現這個錯誤。根本原因system.loadlibrary函數會加載你指定的so,該so中需要連結的所有符号都需要能夠連結到,如果有一個連結不成功,那麼整個so也會加載失敗。仔細檢查so中需要的所有符号,確定其存在且在正确的位置上。

  第二種是unsatisfiedlinkerror:方法名稱。說明dll已經成功加載,但是方法名字錯了。這個錯誤最最常見而且基本的解決方法是:仔細對比你的native 方法的原型確定與javah生成的原型一緻。在java端修改native方法名稱一定要記得更新c/c++端的函數名稱,這是造成此類錯誤最常見的原因。

二,是jni已經編譯過 直接用别人編譯好的so庫

   你建的項目放loadlibrary()的類的包名要和原項目編譯jni時loadlibrary()所在的類名應該一緻  ,因為jni好像是根據java包名來命名的,是以改成一緻的名字 就ok了