作者Killercat (杀人猫™)
看板AndroidDev
标题[分享] 浅谈NDK
时间Sun Apr 24 18:25:35 2011
这篇比较不着重於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
1F:推 Jotarun:推 04/24 21:06
2F:→ nowar100:已收录 04/24 22:05
3F:推 milonga332:推~ 04/25 20:55
4F:推 ppaass:推~ 04/25 21:17
5F:→ alook555:请问如果直接用NDK直接写c 是否有办法从通话内部录音? 04/28 19:29
6F:推 yienge:NDK经验分享推 05/02 10:48