2011-11-22 60 views
3

在Android NDK網站,你可以閱讀:與Java相比,Android C有更好的性能嗎?

而Android NDK是一個配套工具到Android SDK,讓您可以應用的 構建性能的關鍵部分在本地代碼。

...

如果你寫本地代碼,你的應用程序仍然打包成一個.apk文件,他們仍然在虛擬機內的設備

上運行...

使用本機代碼不會導致自動增加性能,但會增加應用程序的複雜性。

那麼如果C還編譯爲VM代碼,那麼如何使用C和NDK獲得性能?你可以繞過API,或者C編譯爲更優化的代碼,或者什麼?

或者它只是「開發加速」,所以如果你有一些C代碼,你不必將它移植到Java?

編輯:

我做「Java是比C慢」。我的考慮是,如果C是用gcc編譯,然後怎麼便攜解決(但是這是第二個問題,在背景中)

What are the portability implications of using the NDK?

+1

你真的在問C是否比Java快? –

+0

請記住,Android有它自己的虛擬機,比常規的Java虛擬機快很多,所以你只能用Java編寫,但字節碼是Dalvik。主要原因爲什麼黑莓應用吸和Android的不要(性能明智)。 – blindstuff

+1

@CédricJulien:我真的問過它嗎?再次研究我的問題,發現我詢問Android C是否運行在虛擬機上,而不是C比Java更快 –

回答

4

C代碼的NDK允許您添加到您的應用程序不編譯到VM代碼。它使用gcc和鏈接編譯爲共享庫,可以通過JNI加載並鏈接到Java。因此,編寫Java代碼時,您可以通過使用C編寫而不是依賴JVM優化來獲得性能。

+1

@JakubM:「不會導致自動性能增加」是因爲你從Java訪問的許多東西在Android中已經在C中用固件實現了,所以你自己的實現可能無關緊要。另外,從Java調用C到C(或相反)的開銷很大,因此兩者之間設計不佳的接口可能會導致比僅僅使用Java處理任何事情都要慢的結果。 – CommonsWare

+1

好吧,現在問題出現在後臺:如果它是通過GCC編譯的,那麼它如何可以移植? Androids在不同的處理器上運行,使用不同的指令集 –

+1

@JakubM。 :看看這裏http://stackoverflow.com/questions/4116684/what-are-the-portability-implications-of-using-the-ndk的可移植性問題。 –