1. 程式人生 > >android so檔案的引用以及遇到的坑

android so檔案的引用以及遇到的坑

android 關於so檔案的引用,網上已經很多了,但是千奇百怪,一種說法是將so檔案放在libs目錄下,另一種說法是在main目錄下建立jniLibs檔案,然後引用so檔案。jniLibs檔案列表
然後在app的build.gradle中加入程式碼

sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

兩種方法都要加這段程式碼。
我在其他專案中都是第二種做法,之前做鐳射推送時也是建立jniLibs檔案。最近發現直播比較受歡迎,於是就在騰訊雲直播申請了一下。按照之前接入的經驗,將so檔案放到jniLibs下,竟然報錯了。

   java.lang.UnsatisfiedLinkError: Native method not found: com.tencent.rtmp.TXRtmpApi.setTempPathLjava/lang/String;)V

一陣頭大啊,怎麼會報這個錯誤呢?明明so檔案的匯入是沒有問題的。
因為我這是直接飲用的第三方的so我呢件,所以不存在方法命名不規範問題。(這裡插一句:NDK編譯的so有時候會在armeabi和armeabi-v7a中分別放置一份,所以不要為了省事只複製armeabi。Android專案和所有library中的armeabi和armeabi-v7a保持同步,要有都有,要沒有都沒有,否則很容易報錯。)
後來我想既然網上那麼多人都能使用第一種方式的so檔案匯入,是不是騰訊雲比較特殊,第二種的so檔案匯入不能識別。於是在libs資料夾下也存放了一份。這裡寫圖片描述


執行後竟然成功了,這就很尷尬了。問題解決了,不知道什麼原因,有知道的大神請留言告知
最後附上兩篇文章自己覺得有用的文章。
使用第三方庫出現找不到so庫UnsatisfiedLinkError錯誤的原因以及解決方案