精華區beta AndroidDev 關於我們 聯絡資訊
這篇比較不著重於NDK的技術面,比較像是幫助你評估為什麼要用NDK NDK跟JNI有什麼關係等等... 這篇本來是我為了教育訓練寫出來的東西,所以就將就看一下吧 :) - NDK其實他僅僅只是一組Toolchain及一小組LibC實作, 用以JNI連結上VM 所以其實他並沒有甚麼特異功能 : 他不能操作View 他不能操作Service 他其實甚麼都不能幹(正常使用下) 正常用途下你沒辦法用NDK寫一個View 你也沒辦法用NDK開發任何東西 而且大多數的情況下,你把部份Method改用NDK也不會跑的比較快 而且裡面的LibC其實不是非常的...完整且高效,也沒有STL給你玩 更不用說Boost這些我們平常用到爽用到爛的東西,通通沒有 最重要的是,用NDK寫出來的東西並不會比較帥,後續開發者或者主管看到有NDK 不會拍拍你的頭說你好厲害,只會皺著眉頭,問「真的有必要嗎?」 因為他不但難以除錯 (Native當掉是俗稱的綠當,那是一組memory dump,而不是簡單易懂的紅當) 而且更是增加編譯複雜度,簡直是給自己找麻煩 那...為什麼要用NDK呢? 第一點是Java本身GC的問題,他會造成很多記憶體破碎,native可以自己控制記憶體 這點來講,絕對有助於Heap的過度大量成長 第二點則是...真的有些東西會跑的比較快,像OpenGL ES的矩陣演算。不過,為什麼 前面會說大多數都跑不快呢?因為JNI是有Overhead的,你增加的效能通常還不見得比 增加的overhead來的高。 第三點,你可能開發自己的ROM, 恩這時候NDK就會用很大。不過這理先不提這個... 最後一點也是最重要的原因,你有想用的C Library, 或者你有多平台library想用同一份 code. 當然,你要有原始檔,不然這都是做不到的。 如果你看完這四點還認為你需要評估使用NDK與否,那請繼續看下去。 不然,請你等到真的需要的時候在好好考慮他,NDK多數情況下不是解藥,是一種劇毒毒藥 (如果有人看到這理的話,我必須做個附註 : 2.3開始允許完全使用NDK開發Activity 不過這個技術方面成不成熟跟泛不泛用,我想我這邊先留個空白吧 :) 有興趣的人 這邊有一份demo code 看看吧~ http://www.oschina.net/code/snippet_12_2904 事實上我個人認為這技術並不成熟, 不過我想寫出來至少可以讓人覺得比較super~一點 XD ) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.43.113.175
Jotarun:推 04/24 21:06