最近在android4.4升5.0的項目中,經常遇到java.lang.UnsatisfiedLinkError: No implementation found for的問題,出現這個問題主要是因為MTK或高通5.0的框架代碼相比於4.4有了很大的改變,尤其是它的jni庫等都發生了變化,出現這個錯誤說明是找不到java層引用的那個jni函數。最近發現的可能原因如下:
1. 沒有調用System.loadLibrary()函數加載庫。在4.4中,有些應用的相應load函數是在框架中發生的,而在5.0中卻沒有了,因此首先需要檢查load函數是否存在。對應用而言,load函數最好寫在Application中,可確保一定會被加載。注意庫加載時,比如庫名稱為libtest.so,那么對應的load函數寫法為System.loadLibrary("test");
2. 底層庫文件與上層Java jni文件對應的包名或類名發生了變化,這需要核對jni文件注冊的地方jniRegisterNativeMethods(),這個函數對應了上層Java jni的包名和類名。
3. 底層庫文件與上層Java jni文件對應的函數名稱,函數參數等發生了變化,這需要核對JNINativeMethod gMethods[],jni函數注冊的地方。