問題就是在調用自己同事寫的.so包時,怎么也掉不通,程序一直報錯退出,錯誤內容就是:
1 No implementation found for native Lxxx,
2 Java.lang.UnsatisfiedLinkError: XXX時的解決辦法
因為我倆都沒接觸過ndk,所以我找了上午原因也一直沒通,各種無力感涌來,
其中包括以下幾個很強力的辦法,都沒能解決我的問題:
1 在.cpp文件里,增加extern C{}結構,
2 在libs下,創建armeabi和armeabi_v7a這兩個目錄,分別將.so文件放進去。
3 檢查
- static{
- <span style="white-space:pre"> </span>System.LoadLibrary("so name");//不能帶lib
- }
經過無數次失敗后,想起平時調用百度地圖,個推等等第三方包的時候,都有會一個或者多個.so文件,同時會有一個對應的命名類似.jar文件,想到也許是我創建的項目的目錄名和.so本身的方法名不匹配造成的,於是:
經過不斷嘗試,發現:
在創建項目時,該項目的包名必須和這個.so文件的方法里的目錄一致才可以保證調通,
即:
JNICALL Java_com_ndk_demo_jni_compute();
那我們的項目包名就應該是:com.ndk.demo,而生命native方法的類名是:jni
這樣才能保證調用。
其他的命名方式沒有進行過多嘗試,有其他匹配方式的同學,留言給我,多謝。
這個方法解決了我的問題。