錯誤的可能原因:
1、.so 文件路徑問題
(1) 要么你就在main/下新建一個JniLibs文件夾,再把SDK里帶的so文件目錄諸如armeabi等等文件夾丟進去就可以了。
(2) 要不你就把放so文件的目錄諸如armeabi直接放在放jar文件的目錄libs里頭,然后修改build.gradle文件的內容,添加上圖或者如下
android {
sourceSets{
main{ jniLibs.srcDirs=['Libs']
}
}
2、jni 調用類的路徑一定要一致。也就是說 .so中函數聲明涉及到的package name和class name與調用它的package name和class name不符。因此我們要改變我們工程中的package name和class name。使其與.so文件中函數簽名提示的一致,在這個類中加入native方法的聲明。
如: JNI接口 Java_com_netease_xtc_cloudmusic_utils_NeteaseMusicUtils_nativeInit 中,com.netease.xtc.cloudmusic.utils 代表的是 package name ,NeteaseMusicUtils 則是 class name。
而第三方提供so庫的工作人員的c文件的定義JNI接口為Java_com_netease_cloudmusic_utils_NeteaseMusicUtils_nativeInit,即: package name 必須為: com.netease.cloudmusic.utils ,而class name 必須為 NeteaseMusicUtils 。
3、未被成功調用
public class Native { static { System.loadLibrary("xxxx"); } } 改為: public class Native { Native { System.loadLibrary("xxxx"); } }