總結一下開發android jni 遇到的坑

開發android jni 遇到的問題

開發android jni的背景知識,網的資料很多,在此給出自己找的幾個比較好的文章與示例。
1、Android JNI(一)——NDK與JNI基礎
JNI 靜態註冊與動態註冊
Android JNI
2、 android jni 分爲靜態加載和動態加載
示例地址
JNIDemo
問題:

  1. 靜態加載失敗,原因是包的名稱錯誤。
  2. 在jni中調用靜態類加載動態庫的方法將函數指針保存到map中,在new 一個類,調用靜態類獲取函數指針失敗。
    在這裏插入圖片描述
    解決方法:多線程調用,懶漢模式是非線程安全的,改成餓汗模式。
  3. 文件權限問題,之前不瞭解程序的需要寫的權限,比較二的問題。
  4. jin成功運行,但是在JNI的庫中,加載動態庫時,調用dlsym()函數時,在dlerror()函數檢查時,產生一條錯誤error:undefined symbol: JNI_OnLoad
    lib1~libs3 時採用dlopen加載的。
    在單獨進程裏運行,dlopen運行是好的。只是在jni裏調用有這麼一條錯誤,懷疑與android有關。
    在這裏插入圖片描述
    (注)只有第一次調用失敗,以後都是正常的。
    在網上找到了相似的問題,但沒有完美的解決方法。
    解決方法:
    使用dlerror檢查錯誤,應該清除之前的錯誤,
    while(dlerror());
    NOTES
    The message returned by dlerror() may reside in a statically allocated buffer that is overwritten by subsequent dlerror() calls.
    出處
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章