我想了解爲什麼有人想在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