我想了解为什么有人想在android编程中使用NDK功能?对于Android学习C++非常重要吗?Android NDK的实际用途是什么?
回答
三个(也许第四)主要理由是:
- 性能。对于一些重要的内部循环来说,C/C++相对于Java的边际性能优势,特别是在Android编译器中提供即时编译(JIT)之前,可能是一个决定性因素。
- 使用现有的C/C++库。这里的推理非常明显。
- 做一些事情,NDK允许Java API无法管理。接近硬件的低级操作,特别是触摸制造商特定的硬件,可能只能通过C/C++
- 正如Yojimbo建议的,混淆。对Java编码的机器码进行反向工程比Java字节码更难,尽管你不应该依赖默默无闻的安全性。
说了这么多之后,你应该确定你需要NDK,然后再决定使用它。 NDK代码的测试和维护成本可能会高于同等Java。
在列表中,我会添加“增加逆向工程应用程序的难度”。 – Yojimbo
我已经使用NDK几次,无论是:
- 利用现有的C库。
- 跨平台(如iOS)共享不使用Java的代码。
NDK对性能不太有用,因为Android应用程序通常不受CPU限制,而是等待网络或文件访问。这就是为什么谷歌says:
在Android上使用本机代码通常不会导致显着的性能改进,但它总会增加您的应用程序复杂性。
感谢您的答案。但你能更具体吗?我的意思是你使用C++ NDK解决问题的一个真实的实例。 –
如果你不介意我问,你在工作场所使用JavaScript? –
如果是这样,你用什么javascript的? –
- 1. toContain()的实际用途是什么?
- 2. 什么是System.Transactions的实际用途?
- 3. Socket.ExclusiveAddressUse的实际用途是什么?
- 4. array_diff_uassoc的实际用途是什么?
- 5. jQuery的实际用途是什么?
- 6. android中.so文件的实际用途是什么?
- 7. 该嵌套类的实际用途是什么?
- 8. JUnit测试用例中“失败”的实际用途是什么?
- 9. 什么是PHP的睡眠()的实际用途?
- 10. ES5提供的新方法的实际用途是什么?
- 11. Observable.never()函数的实际用途是什么?
- 12. <sparkle:ReleaseNotesLink>的实际用途是什么?
- 13. 双向覆盖“bdo”的实际用途是什么?
- 14. Lua在Mac OS X中的一些实际用途是什么?
- 15. .PDB文件的实际用途是什么?
- 16. `git fetch`命令的实际用途/目标是什么
- 17. 什么是stream_wrapper_register在php中的实际用途?
- 18. 受保护构造函数的实际用途是什么?
- 19. Callback类模板的实际用途是什么?
- 20. '-x'参数的实际用途是什么?
- 21. <dfn>标签的实际用途是什么?
- 22. resx文件的实际用途是什么?
- 23. 受保护继承的实际用途是什么?
- 24. getchar和putchar的实际用途是什么?
- 25. 成员隐藏,什么是它的实际用途
- 26. “复制”构造函数的实际用途是什么?
- 27. 可挂载式发动机的实际用途是什么?
- 28. 互联网上mac地址的实际用途是什么?
- 29. Android - 什么是实际使用 - 类别
- 30. jQuery.get() - 实际用途?
_“C++对学习Android非常重要吗?”_。不是真的,不是。但在其他情况下,您想使用NDK。例如;您可能会在您的应用程序中使用C/C++中的一些遗留代码,或者您可能需要比Java可为应用程序的某些部分提供的更好的性能。 – Michael
我认为这取决于您的应用程序。本地代码运行速度比使用java编写时快,因为它不必通过JVM。所以对于图形或游戏引擎之类的东西,它们通常是完全原生的,或者是本地的,但是用Java API来包装。另外,有时使用本地库可能需要您编写一些本机代码。 – mpellegr