2013-07-31 110 views
1

我想了解为什么有人想在android编程中使用NDK功能?对于Android学习C++非常重要吗?Android NDK的实际用途是什么?

+0

_“C++对学习Android非常重要吗?”_。不是真的,不是。但在其他情况下,您想使用NDK。例如;您可能会在您的应用程序中使用C/C++中的一些遗留代码,或者您可能需要比Java可为应用程序的某些部分提供的更好的性能。 – Michael

+0

我认为这取决于您的应用程序。本地代码运行速度比使用java编写时快,因为它不必通过JVM。所以对于图形或游戏引擎之类的东西,它们通常是完全原生的,或者是本地的,但是用Java API来包装。另外,有时使用本地库可能需要您编写一些本机代码。 – mpellegr

回答

3

三个(也许第四)主要理由是:

  • 性能。对于一些重要的内部循环来说,C/C++相对于Java的边际性能优势,特别是在Android编译器中提供即时编译(JIT)之前,可能是一个决定性因素。
  • 使用现有的C/C++库。这里的推理非常明显。
  • 做一些事情,NDK允许Java API无法管理。接近硬件的低级操作,特别是触摸制造商特定的硬件,可能只能通过C/C++
  • 正如Yojimbo建议的,混淆。对Java编码的机器码进行反向工程比Java字节码更难,尽管你不应该依赖默默无闻的安全性。

说了这么多之后,你应该确定你需要NDK,然后再决定使用它。 NDK代码的测试和维护成本可能会高于同等Java。

+1

在列表中,我会添加“增加逆向工程应用程序的难度”。 – Yojimbo

1

我已经使用NDK几次,无论是:

  • 利用现有的C库。
  • 跨平台(如iOS)共享不使用Java的代码。

NDK对性能不太有用,因为Android应用程序通常不受CPU限制,而是等待网络或文件访问。这就是为什么谷歌says

在Android上使用本机代码通常不会导致显着的性能改进,但它总会增加您的应用程序复杂性。

+0

感谢您的答案。但你能更具体吗?我的意思是你使用C++ NDK解决问题的一个真实的实例。 –

+0

如果你不介意我问,你在工作场所使用JavaScript? –

+0

如果是这样,你用什么javascript的? –

相关问题