android ndk vs sdk - 如果涉及到功能

时间:2011-10-20 16:38:10

标签: android android-ndk

我即将开始Android应用程序开发。

What is NDK?文档中我无法提取以下信息:

使用NDK实际上是否会引入与SDK相比的新功能?

我对此感兴趣,因为使用NDK会大大增加应用程序的复杂性,所以如果我对性能提升不感兴趣,还有其他理由去NDK吗?

我的意思是例如:

-restart phone

  • (我知道SDK或NDK都不允许这样,我只是用它作为我的意思的例子)让我们说java SDK不允许这样,但是一些本地库做 - 然后回答我的问题是肯定的,NDK做的添加一些功能

提前填写任何有用的答案。

5 个答案:

答案 0 :(得分:17)

你真的应该使用SDK,除非你有充分的理由使用NDK。好的理由可能会有所不同,但例如,您可以使用NDK:

  • 如果您想使用OpenGL ES 2.0 for Android 2.1(Eclair),它只能通过NDK使用。对OpenGL ES 2.0的SDK支持始于Froyo版本。

  • 如果您想使用Renderscript

  • 如果您的应用程序逻辑的很大一部分用C / C ++编写

答案 1 :(得分:13)

NDK在功能方面受到更多限制。

您从NDK获得的是能够用C ++编写应用程序并将其编译为本机ARM代码的能力。如果您比C ++更喜欢C ++,如果您想要移植到Android的现有C ++应用程序,或者您只需要本机代码可以提供的额外性能,那么无论如何都应该使用NDK。

我自己没有这样做,但另一种选择是编写混合应用程序,其中应用程序主要使用Java编写,选择的函数用C ++编写,从Java代码调用。

答案 2 :(得分:9)

据我所知,使用NDK的唯一原因是从应用程序中挤出额外的性能并接近裸机。如果您不需要执行上述任何一项操作,则应该远离NDK。

另请注意,Dalvik VM已经具有非常出色的性能并且相对简单。

答案 3 :(得分:9)

对我而言,我认为了解NDK是非常重要的,NDK是移动应用程序开发中的强大工具。特别是如果你想开发一个多平台应用程序,NDK在这个领域是无与伦比的。由于使用C ++ for Android编写的相同代码可以在iOS,Windows或任何其他平台上轻松移植和运行,而无需更改原始代码。这实际上节省了大量时间用于开发在多个平台上运行的应用程序;作为游戏和其他经典应用程序。你无法使用SDK。

答案 4 :(得分:1)

本机方法是特定于平台的代码。它们通常用C或C ++等语言编写,并包含在库中(dll' s)。可以创建一个受益于此类库的混合Java应用程序。

使用原生方法的原因

  1. 获取对您设备或Android的特殊功能的访问权限 操作系统
  2. 获得额外的速度
  3. 获取对大量现有遗留代码的访问权
  4. 通常,NDK的良好用例是CPU密集型应用程序,如游戏引擎,信号处理和物理模拟

    本机方法的主要缺点是您不具备跨平台功能

    现在,如果您不知道原生代码是什么,那么您可能不需要使用本机代码。 Android NDK文档很好地解释了这一点:

      

    ...,您应该明白NDK不会使大多数应用受益。如   开发人员,您需要平衡其优势与缺点。   值得注意的是,在Android上使用本机代码通常不会导致   显着的性能提升,但它总是会增加您的应用程序   复杂。通常,只有在必要时才应使用NDK   到您的应用程序 - 从不因为您只是喜欢用C / C ++编程。什么时候   考虑是否应该使用本机代码进行开发   关于您的要求,看看Android框架API是否提供   您需要的功能。