在Android中使用Native的好处

Bra*_*ger 8 c++ java android android-ndk

所以我开始了一个学期长的项目,我的团队决定使用Android作为目标平台.这尤其激起了我对某个问题的好奇心.

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

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

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

  • "一般来说,只有在你的应用程序必不可少时才应该使用NDK,因为你只是喜欢用C/C++编程."

  • "NDK的典型优秀候选者是独立的,CPU密集型操作,不会分配太多内存,例如信号处理,物理模拟等."

这是一套非常广泛的陈述(特别是最后一个陈述).根据我的阅读,现在使用大多数JVM,通过JIT编译执行字节代码的速度几乎或者与直接编译到机器代码一样快.因此,我正在寻找能够在更深层次上澄清的多个响应,更具体地说,我们何时决定使用本地语言进行Android开发,以及这些情况的一些好例子是什么?

vza*_*llo 3

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

\n\n
\n

具体来说,在 Android* 应用程序中使用本机代码并不能保证性能提升!通常,在本机代码涉及以 CPU 为中心的操作(例如SSE 指令的繁重 \xe2\x80\x93 任务使用)等情况下,可以实现性能提升,但在其他情况下,当例如,当前的应用程序只是\n 向用户提供复杂的Web 界面,通过JNI 使用本机代码\n 可能会降低性能。没有关于何时应该使用 NDK、何时不应该使用 NDK 的“书面规则”...

\n
\n\n

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

\n\n

NDK支持以下指令集

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

NEON技术支持很有趣,并得出相同的结论:

\n\n
\n

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

\n
\n