jni開發需要注意的問題:
背景: 最近一個月一直在做移植庫的工作,將c代碼到share library移植到Android平臺。這就涉及到Android NDK(native develop kit)內容。這裏只想記錄下JNI(Java native interface)經常遇到到問題。
問題1. 忘記delete local reference。帶New到方法(如:NewByteArray)這樣到方法比較好辨認,需要手動調用DeleteLocalRef()來釋放(返回值除外)。比較特殊的一個方法是:GetByteArrayELement必須要調用ReleaseByteArrayElements進行釋放。當然如果你只是取bytearray中到byte,那麼完全可以用GetByteArrayRegion實現。
問題2. 沒有NewGlobalRef。 在不同線程調用java方法,需要保存jobject對象,這時需要對jobject對象做全局引用,否則會失效。
問題3. jbytearray的length。在JNI layer獲取到jbytearray到長度是不對到,應該由java獲取byte[]的length再傳給C layer。否則C layer有可能獲得到是亂碼。
問題4. 線程問題。 不同線程使用JNIEnv*對象,需要AttachCurrentThread將env掛到當前線程,否則無法使用env。
問題5. javap 命令是對java的class文件操作;而javah命令需要在包名到上一層路徑運行才行,否則無法生成.h文件。
問題6. 儘量避免頻繁調用JNI或者是使用JNI傳輸大量到數據。
問題7. Reference Table overflow (max=1024) 或者是 Reference Table overflow (max=512)一定是因爲忘記釋放global reference或者local reference,請仔細檢查代碼。
問題8. 不要在windows下使用cygwin編譯NDK code,那樣會遇到arguments too long問題,因爲windows路徑長度有限制導致。雖然可以使用subst將路徑映射爲短路徑,但是在編譯時間和調試上,windows到孩子都是傷不起。同樣到build,在windows下要15分鐘左右,而在mac下只要5分多,相差3倍。調試JNI 代碼到速度更是不用提了,差太多。
總結,JNI代碼量其實不是很多,JNI作爲一個數據傳輸層,它到作用僅僅是java和c直接到橋樑,但是如果處理不好將會是災難,調試和找bug非常困難。
jni開發需要注意的問題:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
jni 調用 例子
JNI允許程序員編寫的本地方法處理的情況下,當一個應用程序不能完全在Java編程語言編寫的,例如當標準Java類庫不支持平臺特定的功能或程序庫。它也
明风的博客
2020-07-04 05:07:15
FFmpeg - 朋友圈錄製視頻添加背景音樂
HongChengDarren
2019-07-18 06:34:09
FFmpeg - Android 視頻播放器
HongChengDarren
2019-07-05 08:13:04
FFmpeg - 打造一款萬能的音樂播放器
HongChengDarren
2019-06-16 11:03:23
從 Linux 內核的角度來看 Binder 驅動
HongChengDarren
2019-05-12 10:13:13
音視頻技術學習 - 啓動篇
HongChengDarren
2019-04-15 09:25:01
NDK 開發實戰 - 實時人臉檢測和識別
HongChengDarren
2019-04-03 08:20:51
Android智能識別 - 銀行卡區域裁剪(原理篇)
HongChengDarren
2019-02-01 15:27:44
圖形圖像處理 - 我們所不知道的 Bitmap
HongChengDarren
2019-01-05 15:29:54
圖形圖像處理 - Android 濾鏡效果
HongChengDarren
2018-12-10 15:04:16
數據結構算法 - 棧和隊列
HongChengDarren
2018-11-22 00:29:51
數據結構算法 - ConcurrentHashMap 源碼解析
HongChengDarren
2018-11-22 00:29:51
數據結構算法 - HashMap 源碼深度解析
HongChengDarren
2018-11-22 00:29:51
數據結構算法 - LeetCode 刷題
HongChengDarren
2018-11-22 00:29:51
24小時熱門文章