2011-10-20 47 views
17

我即將開始android應用程序開發。android ndk vs sdk - 如果功能涉及

What is NDK?文檔我沒能提取以下信息:

是否使用NDK實際引進比較SDK的新功能?

我對此感興趣,因爲使用NDK大大增加了應用程序的複雜性,所以如果我對性能增加不感興趣,是否還有其他原因可以用於NDK?

我的意思是比如:

-restart電話

  • (我既不知道SDK或NDK允許這一點,我只是用它作爲例子說明我的意思)讓說的Java SDK中不允許這個,但一些本地庫做 - 然後回答我的問題是肯定的,NDK確實增加了一些功能

Thanx提前爲任何有用的答案。

+0

我不明白這是基於意見的問題 – hendrix

回答

9

就我所知,使用NDK的唯一原因是擠出應用程序的額外性能,並更接近裸機。如果你不需要做這些事情,你應該遠離NDK。

另外請注意,Dalvik虛擬機已經有一些非常棒的性能和相對簡單的。

+0

不是Java,Dalvik VM – HaMMeReD

+0

@HaMMeReD感謝您的支持。編輯我的迴應。 –

+1

或現在ART VM! – CorayThan

13

NDK在功能方面受限得多。

您從NDK獲得的是用C++編寫應用程序並將其編譯爲本機ARM代碼的能力。如果你喜歡C++比Java更好,如果你有一個現有的C++應用程序,你想要移植到Android,或者如果你只需要額外的性能,只有本地代碼可以提供,那麼你應該使用NDK。

我自己並沒有這樣做,但另一種選擇是編寫混合應用程序,其中應用程序主要是用Java編寫的,用Java代碼調用用C++編寫的選定函數。

+4

對這個問題的評論太晚了,但我只是想確保清楚用C++編寫,因爲你更喜歡它,這不是使用NDK的好理由。 – DealerNextDoor

+1

@DealerNextDoor因爲沒有人應該更喜歡C++,或者因爲沒有人應該使用NDK? – CorayThan

+2

@CorayThan兩者都不;用C++編寫純粹是因爲你不想用Java編寫是一個不好的理由。正如NDK下載頁面所述,「在下載NDK之前,您應該明白NDK不會讓大多數應用程序受益。作爲開發人員,您需要平衡其優點和缺點,值得注意的是,在Android上使用本機代碼通常不會導致一個明顯的性能改進,但它總是增加你的應用程序複雜性。一般來說,如果它對你的應用程序是必不可少的,那麼你應該只使用NDK,而不是因爲你只是喜歡用C/C++編程。 – DealerNextDoor

17

你真的應該使用SDK,除非你有充分的理由使用NDK。良好的原因各有不同,但是,例如,你可以使用NDK:

  • 如果你想使用的OpenGL ES 2.0的Android 2.1(Eclair的),只有通過NDK繳費。 OpenGL ES 2.0的SDK支持從Froyo版本開始。

  • 如果你想使用的renderScript

  • 如果你有C語言編寫你的應用程序的邏輯有很大一部分/ C++

9

對於我來說,我想知道NDK是很重要的,其是移動應用程序開發中的強大工具。特別是如果你想開發一個多平臺的應用程序,NDK在這個領域是無與倫比的。由於使用C + +編寫的Android代碼可以在iOS,Windows或任何其他平臺上輕鬆移植和運行,而無需更改原始代碼。這實際上爲開發用於在多個平臺上運行的應用程序的開發節省了大量時間;作爲遊戲和其他經典應用程序。你無法使用SDK。

+1

同意。如今,很難想象任何好的應用程序都只想要像Android這樣的平臺。因此,一般的做法是將UI層之外的所有內容都留給本地代碼,以便將它們輕鬆移植到其他平臺,其中一些平臺可能是製造商指定的平臺。 –

1

本地方法是平臺特定的代碼。它們通常使用C或C++等語言編寫,幷包含在庫(dll's)中。有可能創建一個混合Java應用程序,從這些庫中受益。

理由使用本地方法

  1. 獲得訪問到您的設備或或Android OS
  2. 的特殊能力獲得額外的速度
  3. 獲得對身軀龐大的現有的遺留代碼
  4. 訪問

通常,NDK的良好使用案例是CPU密集型應用程序,如ga我的發動機,信號處理和物理模擬

的本地方法的主要缺點是,你不會有跨平臺能力

現在,如果您不知道本機代碼是什麼,那麼您可能不需要使用本機代碼。 Android NDK文檔解釋了這一點:

...,你應該明白NDK不會使大多數應用程序受益。作爲開發人員,您需要平衡其優點和缺點。 值得注意的是,在Android上使用本機代碼通常不會導致顯着的性能提升,但它總會增加您的應用程序的複雜性。一般來說,如果您的應用程序必須使用NDK,那麼您應該只使用NDK --絕對不要因爲您只喜歡用C/C++編程。當 檢查您是否應該使用本機代碼進行開發時,請考慮 以瞭解您的需求,並查看Android框架API是否提供您需要的功能 。