看板 AndroidDev 關於我們 聯絡資訊
整篇文章寫得很棒,我想補充一些內容 Java 與 Native 其實沒有你說的效能差這麼少 我們實驗室有做過幾個範例,純運算不講畫圖用函數庫 用 Java 跑下去五秒,NDK 下去就是兩秒 更何況甚至 Java 是可以比 Native 慢五到十倍都是有可能的 大多程式都沒有用到 NDK 這東西,但是大多會賺錢的程式會用到它 不管你 Java 再怎麼 Event-driven,再怎麼 Just-In-Time,慢了就是慢了 但是也像您說的一樣,他不成熟,為什麼? 想想為什麼 Android 要用 Java 打天下,而非 Native Language 因為 Java 只要實作出一套虛擬機器,擺在各支手機上都可以跑 現在 NDK 不成熟的原因就是因為這樣 以 Android 的開放自由度,任何人拿到 Code 都可以任意移植 C/C++ 這種語言本身就是跟 machine-dependent 要做出可以任意手機上跑的 Native 程式,難度會比想像中的還多很多 說實在,我覺得 Google 現在能搞出這種程度的 NDK 已經算是很不錯了 想想人家 iPhone 只搞一種系統,用 Obj-C 來寫程式 Android 要全世界都可以開放,還用 Java 來當應用程式開發語言 兩者做出來的難度真的有差... 一點淺見 :) ※ 引述《Killercat (殺人貓™)》之銘言: : 這篇比較不著重於NDK的技術面,比較像是幫助你評估為什麼要用NDK : NDK跟JNI有什麼關係等等... : 這篇本來是我為了教育訓練寫出來的東西,所以就將就看一下吧 :) : - : NDK其實他僅僅只是一組Toolchain及一小組LibC實作, 用以JNI連結上VM : 所以其實他並沒有甚麼特異功能 : : 他不能操作View 他不能操作Service 他其實甚麼都不能幹(正常使用下) : 正常用途下你沒辦法用NDK寫一個View 你也沒辦法用NDK開發任何東西 : 而且大多數的情況下,你把部份Method改用NDK也不會跑的比較快 : 而且裡面的LibC其實不是非常的...完整且高效,也沒有STL給你玩 因為 libc 好搞,libstdc++ 難搞 : 更不用說Boost這些我們平常用到爽用到爛的東西,通通沒有 : 最重要的是,用NDK寫出來的東西並不會比較帥,後續開發者或者主管看到有NDK : 不會拍拍你的頭說你好厲害,只會皺著眉頭,問「真的有必要嗎?」 : 因為他不但難以除錯 : (Native當掉是俗稱的綠當,那是一組memory dump,而不是簡單易懂的紅當) : 而且更是增加編譯複雜度,簡直是給自己找麻煩 : 那...為什麼要用NDK呢? : 第一點是Java本身GC的問題,他會造成很多記憶體破碎,native可以自己控制記憶體 : 這點來講,絕對有助於Heap的過度大量成長 : 第二點則是...真的有些東西會跑的比較快,像OpenGL ES的矩陣演算。不過,為什麼 是快很多 :) 矩陣開下去算個幾次,差距就出來了 當然如果你只是丟幾條指令到 Native 端跑當然沒有用 : 前面會說大多數都跑不快呢?因為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.24.204.221
nvidia:好文! 04/25 07:11
e98877331:push! 05/05 21:43
nowar100:我在個強而有力的證據 Angrybird 硬幣海盜 這種遊戲都有 05/12 22:02
nowar100:用到NDK 而且不是用一點點 大部分都在Native做 05/12 22:02
nowar100:不要說NDK效果不大 那是軟體眼界太小才不需要 要跑得順的 05/12 22:03
nowar100:程式 很多都要靠NDK來加速的 :) 05/12 22:03