Android SDK和NDK有什么区别?

20

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

什么是NDK?文档中,我无法提取以下信息:

相比SDK,使用NDK是否会引入新功能?

我对此很感兴趣,因为使用NDK会大大增加应用程序的复杂性,如果我对性能提升不感兴趣,是否还有其他原因选择NDK?

我的意思是,例如:

-重新启动手机

  • (我知道SDK和NDK都不允许这样做,我只是用它作为我的问题所指的示例)假设Java SDK不允许这样做,但某些本地库可以-那么我的问题的答案将是是,NDK确实添加了一些功能

先感谢任何有帮助的回答。

5个回答

17

除非你有很好的理由使用NDK,否则你应该使用SDK。好的理由可能各不相同,但是例如,你可以使用NDK:

  • 如果你想在Android 2.1(爱克莱尔)中使用OpenGL ES 2.0,则只能通过NDK来实现。SDK对OpenGL ES 2.0的支持始于Froyo版本。

  • 如果你想使用Renderscript

  • 如果你的应用程序逻辑的大部分都是用C/C++编写的


15

在功能方面,NDK要受到很大的限制。

你可以从NDK中获得的是使用C++编写应用程序并将其编译为本地ARM代码的能力。如果你更喜欢C++而不是Java,如果你有一个现有的C++应用程序想要移植到Android上,或者如果你只需要本地代码才能提供的额外性能,那么你应该使用NDK。

我自己没做过这个,但另一种选择是编写混合应用程序,在这种应用程序中,大部分应用程序都是用Java编写的,而选定的一些函数则是用C++编写的,并且从Java代码中调用。


4
很抱歉晚回复这个问题,但我只想确保清楚地表明一个事实:仅仅因为你喜欢使用C++并不是使用NDK的好理由。 - user1914539
1
@DealerNextDoor是因为没有人应该偏爱C++,还是因为没有人应该想要使用NDK? - CorayThan
2
@CorayThan,仅仅因为你不想用Java而选择纯粹使用C++编写是一个不好的理由。正如NDK下载页面所述,“在下载NDK之前,您应该了解到大多数应用程序不会从NDK中受益。作为开发人员,您需要权衡其优点和缺点。特别是,在Android上使用本地代码通常不会导致明显的性能提升,但它总是增加了您的应用程序复杂性。一般来说,只有在必要时才应该使用NDK——永远不要仅仅因为您更喜欢使用C/C++编程。” - user1914539
1
@Alex_Nabu 不写安卓,还是学一门新的语言? - CorayThan
1
@CorayThan 我是认真的。你会认真地建议花几个月时间学习一门新语言,而不是使用 NDK 吗?毫无疑问,劣势并不那么严重。 - Alex_Nabu
显示剩余4条评论

10
据我所知,使用NDK的唯一原因是为了从应用程序中挤出额外的性能并更接近底层。如果您不需要执行这些操作,则可能应该远离NDK。
此外,请注意,Dalvik VM已经具有相当惊人的性能,并且相对简单。

9

我认为了解NDK对移动应用开发至关重要。特别是如果您想开发多平台应用程序,NDK在此领域无可匹敌。由于针对Android编写的相同C++代码可以轻松移植并以不改变原始代码的方式在iOS、Windows或任何其他平台上运行,因此可以节省大量开发应用程序所需的时间;比如游戏和其他经典应用程序。这是SDK无法做到的。


1
同意。现在很难想象任何一款好的应用程序会只局限于像Android这样的一个平台。因此,通常的做法是将UI层之外的所有内容留给本地代码,以便它们可以轻松地移植到其他平台,其中一些可能是制造商指定的。 - Kun Wu

2

本地方法是平台特定的代码。它们通常用诸如C或C ++的语言编写,并包含在库(dll)中。可以创建一个混合Java应用程序,从这些库中获益。

使用本地方法的原因

  1. 获取设备或Android操作系统的特殊功能
  2. 提高速度
  3. 访问大量现有遗留代码

通常,NDK的好用例是CPU密集型应用程序,例如游戏引擎,信号处理和物理模拟。

主要缺点是您将没有跨平台能力

如果您不知道什么是本地代码,则可能不需要使用本地代码。 Android NDK文档解释得很好:

……,您应该了解NDK对大多数应用程序没有好处。作为开发人员,您需要在其优点与缺点之间取得平衡。特别是,在Android上使用本机代码通常不会导致明显的性能改进,但它始终会增加应用程序的复杂性。总的来说,只有在必要时才应使用NDK,而不是仅仅因为您更喜欢使用C / C ++编程。在检查是否应该使用本机代码时,请考虑您的要求并查看Android框架API是否提供所需功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接