java.lang.UnsatisfiedLinkError: No implementation found for


 

錯誤的可能原因:

 

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");
    }
}

 


免責聲明!

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



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