在Android中使用Native的好处

Benefits of using Native in Android

本文关键字:Native Android      更新时间:2023-10-16

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

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

根据Android文档,有几点需要记住:

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

  • "一般来说,只有当NDK对你的应用程序至关重要时,你才应该使用它——永远不要因为你更喜欢用C/C++编程。">

  • "典型的NDK候选者是独立的、CPU密集型的操作,它们不会分配太多内存,比如信号处理、物理模拟等等。">

这是一组非常广泛的语句(尤其是最后一个)。根据我所读到的,现在使用大多数JVM,通过JIT编译执行字节码的速度几乎,或者说与直接编译到机器代码一样快。因此,我正在寻找多个答案,从更深的意义上澄清,更具体地说,我们什么时候决定使用本地语言进行Android开发,这些情况的一些好例子是什么

来自英特尔开发区,NDK安卓*应用程序移植方法,JNI 的性能影响和成本

具体来说,在Android*应用程序中使用本机代码不会保证性能提升!通常,性能提升可以是在本机代码涉及以CPU为中心的情况下欣赏操作(如SSE指令的重载使用),但其他时候,例如,手头的应用程序为用户提供复杂的web界面,使用本地代码通过JNI可能会阻碍性能。没有关于当NDK应该和不应该被使用时。。。

SSE是原始MMX指令集的扩展,用于复杂的精确算术处理,如3D渲染、游戏、图像处理、语音和手写识别、科学计算。。。等等,所以NDK在这种情况下应该是有用的。

NDK支持以下指令集

  • ARMv5TE,包括Thumb-1指令
  • ARMv7-A,包括Thumb-2和VFPv3-D16指令,可选支持NEON/VPv3-D32指令
  • x86指令
  • MIPS指令

近地天体技术支持很有趣,并得出了相同的结论:

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

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

这听起来很疯狂,事实确实如此。当你使用许多平台目标进行编程时(你不使用Xamarin、Corona SDK、Appcelerator等框架),通常你必须为每个平台重新编写大部分控制器和视图代码,这不是一种很聪明的方式。

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

这是我的看法。