在Android中使用Native的好处

所以我开始了一个长达一个学期的项目,我的团队决定使用Android作为目标平台。 这特别刺激了我对一个问题的好奇心。

我想在大多数开发案例下,Java和虚拟机是最好的开发范例。 我的问题是:在什么情况下使用本地软件开发工具包(C / C ++)而不是Java?

根据Android文档,有几点需要注意:

  • “你应该明白NDK不会让大多数应用程序受益,作为一名开发人员,你需要平衡其优点和缺点。值得注意的是,在Android上使用本机代码通常不会带来显着的性能提升,但它总会增加你的应用程序复杂性“。

  • “一般来说,如果它对你的应用程序是必不可少的,那么你应该只使用NDK,而不是因为你只是喜欢用C / C ++编程。”

  • “NDK的典型优秀候选者是独立的CPU密集型操作,不会分配太多的内存,如信号处理,物理仿真等。”

  • 这是一组非常广泛的陈述(尤其是最后一个陈述)。 从我读过的内容来看,现在大多数JVM使用JIT编译来执行字节码的速度几乎或者与直接编译为机器码一样快。 因此,我正在寻找更深层次的多重答案,更具体地说,我们何时决定为Android开发使用本机语言,以及这些情况的一些好例子?


    从英特尔开发人员专区, NDK Android *应用程序移植方法 ,性能影响和JNI成本

    具体而言,在Android *应用程序中使用本机代码并不能保证性能提升! 通常情况下,如果本机代码涉及以CPU为中心的操作(如SSE指令的重要使用 )时,性能提升可以被理解,但在其他情况下,例如,当前的应用程序仅提供复杂web界面给用户,通过JNI使用本地代码可能会妨碍性能。 关于什么时候应该和不应该使用NDK,没有“书面规则”...

    SSE是为复杂算术过程引入的原始MMX指令集的延伸,具有诸如3D渲染,游戏,图像处理,语音和手写识别,科学计算等精度,因此NDK在这种情况下应该很有用。

    NDK支持以下指令集

  • ARMv5TE,包括Thumb-1指令
  • ARMv7-A,包括Thumb-2和VFPv3-D16指令,可选支持NEON / VFPv3-D32指令
  • x86指令
  • MIPS指令
  • NEON技术支持很有意思,并得出了相同的结论:

    可以将视频编码/解码,2D / 3D图形,游戏,音频和语音处理,图像处理,电话和声音合成等多媒体和信号处理算法加速至少3倍于ARMv5的性能,至少是ARMv6的2倍SIMD。


    正如大家所说,当您的应用需要性能提升时,建议使用原生Android编程。 但我认为可能有另一个使用NDK的原因:多平台代码。

    这听起来很疯狂,而且是。 当你使用许多平台目标进行编程时(并且你不使用像Xamarin,Corona SDK,Appcelerator和其他框架),通常你必须重写大多数控制器并查看每个平台的代码,而不是很聪明的方式。

    但是,几乎所有的控制器代码都可以使用标准C / C ++移植,因为(讽刺!)所有移动平台都支持标准C / C ++,因此您可以将逻辑写入某些libXXX并在所有目标平台中重新使用它不会失去很多性能(如Appcelerator或Cordova)。

    这是我的意见。

    链接地址: http://www.djcxy.com/p/76951.html

    上一篇: Benefits of using Native in Android

    下一篇: Can SBT refresh git uri dependency (always or on demand)?