2017-02-10 93 views
9

問題:20%的用戶正在接受:原生功能沒有實現發現

Fatal Exception: java.lang.UnsatisfiedLinkError 
No implementation found for java.lang.String com.example.utils.API.getHashString(android.content.Context) (tried Java_com_example_utils_API_getHashString and Java_com_example_utils_API_getHashString__Landroid_content_Context_2) 

對於其他80%的應用在我的測試設備完美的工作,也不例外,以及。 找不出什麼問題。

EDIT1: 圖書館在啓動畫面上完美加載。在這一點上沒有例外。

static { System.loadLibrary("my-lib"); } 

EDIT2: 只是重現該錯誤。這絕對是隨機的。應用程序函數調用可以正常工作,並且在某個時候啓動失敗。唯一的修復方法是重新安裝應用程序。

+0

嘗試從靜態構造函數中調用有問題的方法。它是否在同一設備上失敗? –

+0

你的意思是靜態塊嗎?我想嘗試,但我無法測試真實用戶的所有生產解決方案。 –

+0

你的意思是,這個問題從來沒有在實驗室複製?並且您的日誌顯示,其他用戶可以使用相同的設備嗎? –

回答

2

繼我的評論和@ stanislav-parkhomenko後來的評論後,我將其重新發布爲答案。謝謝!

我的評論:

哪裏是靜態{...}塊位於何處?可能的原因可能是代碼在某些調用之前未被執行。

以後又經本人確認這是原因:

的問題是在庫初始化。由於共享功能,啓動屏幕並不總是運行,這就是爲什麼有時圖書館沒有加載。

感謝Xavier Rubio Jansana的建議,治好了我的失明。

很高興幫助!

2

此錯誤是由您正在加載的Java和本機庫之間的方法簽名不匹配造成的。 20%的用戶可能擁有不同版本的同名文件庫文件。如果它是你自己的圖書館,請嘗試給它一個相對獨特的名稱並從絕對路徑加載它,以減少名稱衝突的可能性。

0

它看起來像是試圖加載本地庫,並且Android Gradle還沒有支持本機代碼。您應該仔細檢查圖書館的文檔以確認;我試圖查看它,但它看起來像沒有可公開訪問的文檔的商業圖書館。

您可以將.so文件放入src/mainjniLibs文件夾中。這是介紹了AS 0.7.2

爲樣本,看 this@CommonsWare,或見this頁的官樣(滾動到頁面底部)

仍然是在安卓原生的gradle庫不支持只要我遵循簡單的hack.It就可以很好地工作。 Check this

+0

nope,它是我自己的庫,它只包含java的幾個函數實現。 –