UnsatisfiedLinkError: No implementation found for , AndroidStudio使用*.so

今天工作的時候,發現了一個jni的問題,java.lang.UnsatisfiedLinkError: No implementation found for......




問題1:後來查了資料後發現,是由於我在java中定義了native方法,但是在jni中沒有對應的方法,這樣的話java就無法鏈接到本地方法。




原因:

    造成這種Error的有兩種情況:
    (1) 沒有在本地方法中的頭文件中定義方法;
    (2) 缺少so文件。


解決方案:

    (1)在.h文件中第一方法,並在.c中實現方法;
    (2)引入so文件;




方案實行分析:

    方案1:這個不用多說,定義方法,自己根據自己的需求去實現;


    方案2:
    步驟(這裏只講解在Android Studio下的解決方案):

        (1)在  項目名\app\src\main下新建jniLibs文件夾,並將對應的.so文件放進去{文件夾結構爲:處理器版本/***.so(如:armeabi/***.so)},

    

           這樣Android Studio就可以在編譯的時候加載對用的so文件了;
        (2)注意:重點來了,
           在Android Studio下如果你只有部分平臺下的.so文件,而且你不在gradle中做任何配置的話,

           那麼智能的Android Studio就會在編譯的時候編譯出其他平臺下的.so文件(我在Eclipse中測試的時候沒有發現這個問題)

           看好了,我現在只在jniLibs中放入了armeabi版本的*.so文件,但是在apk中卻出現了'x86_64','x86','mips64'等多個版本的*.so文件,

   這樣就會造成程序無法運行【如圖】

           

          
           解決方案:

           在.gradle指定對應平臺的(代碼如下),這樣就可以在編譯的時候讓studio只生成對應平臺的*.so文件【如圖】

           

splits {
        abi {
            enable true
            reset()
            include 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' //select ABIs to build APKs for
            universalApk true //generate an additional APK that contains all the ABIs
        }
    }

Android的.so文件教程參考地址:關於Android的.so文件你所需要知道的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章