1. 程式人生 > >Android -- 出現.so檔案找不到時怎麼處理

Android -- 出現.so檔案找不到時怎麼處理

一. 問題

在專案中我們有時會遇到這樣的錯誤: cannot find “xxx.so”

這其中有兩種原因導致的錯誤,這種錯誤可能會讓我們的應用程式產生閃退和ANR錯誤(應用程式無響應),

我們的解決辦法也是從這兩個方面入手

二. 解決

(1).so檔案沒有被呼叫

在model下的build.gradle中的android內新增以下程式碼:

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

(2)由AAR引起的

介紹一下.aar和jar包的不同之處:

.aar : 包含了整個專案的資源,res下的資原始檔和class檔案。

jar包,只有class檔案和清單檔案。

有時我們呼叫第三方時,第三方SDK是.aar字尾檔案,這時我們同時添加了.aar檔案和.so檔案時,可能會引起衝突,

這是由於當.aar內部的so檔案型別比外部.so檔案多時,會導致外部的so檔案找不到。

解決辦法:需要剔除.aar中不需要的.so檔案。

(3)載入不到檔案

手機也有32位和64位系統,當jnilibs中有多個資料夾,但其中的.so檔案不一樣多,不相同時,也會報.so檔案找不到。

這是由於32位的手機系統只會讀32位檔案中的.so包,執行不會有錯,因為一開始新增進來的都是加在32位中;但是當

64位手機系統來讀取時,會出現.so檔案找不到,這樣因為在相應的資料夾下沒有該.so檔案。

android studio jnilibs下各資料夾意義:

  1. armeabiv-v7a: 第7代及以上的 ARM 處理器。2011年15月以後的生產的大部分Android裝置都使用它.
  2. arm64-v8a: 第8代、64位ARM處理器,很少裝置,三星 Galaxy S6是其中之一。
  3. armeabi: 第5代、第6代的ARM處理器,早期的手機用的比較多。
  4. x86: 平板、模擬器用得比較多。
  5. x86_64: 64位的平板。

解決辦法:將jnilibs下各個檔案包中的.so檔案保持同樣的.so檔案。

還有一種情況,就是你的jnilibs下只有一個檔案包,這時候就需要新建對應的資料夾(一般是新建v7a和X86的),再將

所有的.so檔案複製貼上進去即可。

The end !