Android 調用.so包時報錯:No implementation found for native Lxxx, java.lang.UnsatisfiedLinkError: XXX時的解決辦法(轉)


問題就是在調用自己同事寫的.so包時,怎么也掉不通,程序一直報錯退出,錯誤內容就是:

 

1 No implementation found for native Lxxx, 

Java.lang.UnsatisfiedLinkError: XXX時的解決辦法

因為我倆都沒接觸過ndk,所以我找了上午原因也一直沒通,各種無力感涌來,

其中包括以下幾個很強力的辦法,都沒能解決我的問題:

1 在.cpp文件里,增加extern C{}結構,

2 在libs下,創建armeabi和armeabi_v7a這兩個目錄,分別將.so文件放進去。

3 檢查

 

[java]  view plain  copy
  1. static{  
  2. <span style="white-space:pre">    </span>System.LoadLibrary("so name");//不能帶lib  
  3. }  

 

經過無數次失敗后,想起平時調用百度地圖,個推等等第三方包的時候,都有會一個或者多個.so文件,同時會有一個對應的命名類似.jar文件,想到也許是我創建的項目的目錄名和.so本身的方法名不匹配造成的,於是:

經過不斷嘗試,發現:

在創建項目時,該項目的包名必須和這個.so文件的方法里的目錄一致才可以保證調通,

即:

JNICALL Java_com_ndk_demo_jni_compute();

那我們的項目包名就應該是:com.ndk.demo,而生命native方法的類名是:jni

這樣才能保證調用。

其他的命名方式沒有進行過多嘗試,有其他匹配方式的同學,留言給我,多謝。

這個方法解決了我的問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM