2013-05-13 109 views
8

我寫一個遊戲,我有巨大的機庫,我試圖加載我的本地庫在我的主要活動像造成的:java.lang.UnsatisfiedLinkError中:無法加載庫

static { 
     try { 
      System.loadLibrary("mylib"); 
     } catch (UnsatisfiedLinkError e) { 
      Log.d(TAG, "Unsatisfied Link error: " + e.toString()); 
     } 
    } 

我有在衆多設備上測試了這個代碼,我沒有得到這個錯誤。但從我發佈的日誌中,我確實得到了「引起的影響:java.lang.UnsatisfiedLinkError:無法加載庫」。注意:這種崩潰不是通用的,只有幾個人得到這個崩潰

  • 是否問題庫中的導出apk文件?現在我已經通過eclipse自動將庫放入/libs/armabi/libmylib.so中了嗎?
  • 與Android版本有關嗎?我支持Android 2.3以上版本(API級別9)
  • 或者我需要從不同的地方加載庫嗎?
  • 還是我缺少一些非常重要的東西
  • 整個應用程序安裝在SDCARD上是否存在問題?

更多信息的崩潰是:load_segments:68未能從mylib.so

+0

我有巨大的原生庫,有多大?也許它不符合一些內存要求,系統無法加載。 – Blackbelt 2013-05-13 09:57:01

+0

〜7MB(調試版) – Shri 2013-05-13 09:58:56

+0

這絕對不是內存問題。您在哪種設備上使用過此問題? – Blackbelt 2013-05-13 10:00:17

回答

14

考慮到您的應用程序正常工作的大部分設備,只有有時給你的錯誤映射片段,它是安全的假設該庫在APK中正確打包並且其大小/內存佔用也可接受。

因此,我會隨心所欲地提出問題是與庫的構建/編譯體系結構有關。大多數較新的Android設備使用ARM7處理器。很可能您的庫也是針對ARM7體系結構編譯的。一些較舊的設備,特別是那些運行Android 2.3的設備,使用ARM6處理器(我有一個這樣的設備用於測試 - 運行Android 2.3.3的LG GT540),這與ARM7體系結構不兼容。當我試圖在我的舊ARM6手機上運行專爲ARM7設計的應用程序時,我看到類似於您所指示的錯誤(load_segments:68未能從mylib.so映射段)發生崩潰。

還有的解決此問題會三種方式:

  1. 編譯庫對陣雙方架構,包括兩個獨立的.so文件到APK。然後在運行時確定處理器的類型並加載正確的處理器。坦率地說,我不知道這是否可能。

  2. 創建兩個單獨的apk文件 - 一個用於ARM6,另一個用於ARM7 - 然後在清單中使用過濾器來指定相應的體系結構。您可以將它們兩個都上傳到同一個應用的谷歌播放 - 而清單中的過濾器將控制哪一個被下載到哪個設備。

  3. 只通過在清單中指定設備要求來支持ARM7體系結構。你會失去一些客戶的觀衆,但是對於你自己維護這兩個版本的應用程序來說,你的工作會減少。

編輯:根據NDK的文檔,它可以產生多個庫爲不同的架構一氣呵成。您可以明確控制要針對哪些CPU中加入下面一行到Application.mk文件:

APP_ABI := arch1 arch2 arch3 ... 

例如,

APP_ABI := armeabi armeabi-v7a mips 

然後構建過程將創建不同版本的機庫。這些版本將需要放在目錄中的最終apk中

lib/<abi>/lib<name>.so 

其中是架構的名稱。然後,您將與

System.loadLibrary("<name>"); 

加載庫或者你可以建立單獨的APK文件,爲每個架構,然後在谷歌播放使用多APK功能。

您可以在NDK的docs子目錄中的文件CPU-ARCH-ABIS.html文件中找到架構目標的所有信息。

+0

廣泛地說,我接受你的回答,我認爲你的建議是合乎邏輯的。但我不確定是否有清單中的選項或我可以專門爲amrv6和armv7構建的任何位置,我無法找到通過android清單修復此問題的方法 – Shri 2013-05-13 13:01:52

+1

@techjeevi架構未在apk清單中指定,但在爲本地庫構建文件。它後來被合併到構建應用程序中,並被谷歌播放使用。我會做一些挖掘以找到一個例子。 – 2013-05-13 13:29:23

+1

@techjeevi我更新了我的答案,詳細介紹瞭如何使用本地庫的不同版本定位不同體系結構以及在何處查找更多信息。 – 2013-05-13 13:54:12

相關問題