2013-07-31 157 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的? –

相關問題