JNI 的注冊過程

我這里抽絲剝繭,簡明扼要,有時候反而對于應用層開發(fā)者更友好。
System.loadLibrary("libxxx.so") 這句代碼會去app安裝目錄lib中中查找xx.so這個文件,我們知道so庫里面記錄了函數(shù)和變量的一些相對地址和符號,在加載時能確定這些函數(shù)的絕對地址,在通過系統(tǒng)函數(shù)dlsym(dlsym是一個計算機函數(shù),功能是根據(jù)動態(tài)鏈接庫操作句柄與符號,返回符號對應的地址,不但可以獲取函數(shù)地址,也可以獲取變量地址。)獲取函數(shù)名為JNI_OnLoad的方法,這就是為什么我們在動態(tài)注冊函數(shù)時,需要我們在C,C++源代碼中提供這個函數(shù),然后我們可以在這個方法中調(diào)用jinRegisteNative方法將Java類中的函數(shù)與native函數(shù)相關聯(lián)。如何關聯(lián),可以參看老羅的Dalvik虛擬機JNI方法的注冊過程分析
知識擴展:
dlopen以指定模式打開指定的動態(tài)連接庫文件,并返回一個句柄給調(diào)用進程;
dlerror返回出現(xiàn)的錯誤;
dlsym通-過句柄和連接符名稱獲取函數(shù)名或者變量名;
dlclose來卸載打開的庫;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容