Crach log信息:

jni crach.png
復(fù)現(xiàn)步驟:
頻繁的點擊登錄按鈕 (頻繁調(diào)用xxkey.so)
分析:
這是因為在登錄的時候,需要讀取so庫中的公鑰信息,所以頻繁的通過JNI機制進(jìn)行了java和C相互調(diào)用,這樣就產(chǎn)生了很多垃圾。查看c代碼,發(fā)現(xiàn)沒有釋放空間,所以就crach了。
解決辦法:
在c文件中,每次return返回數(shù)據(jù)前釋放資源:
(*env)->ReleaseByteArrayElements(env,barr, pBarr, 0);
運行程序 測試,果然ok了。JNI技術(shù)在Android開發(fā)中用的越來越普遍了,需要花時間研究研究啦。