【问题标题】:What is the difference between Android SDK and NDK? [closed]Android SDK 和 NDK 有什么区别? [关闭]
【发布时间】:2011-12-11 23:00:20
【问题描述】:

我即将开始安卓应用开发。

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

与 SDK 相比,使用 NDK 是否真的引入了新功能?

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

我的意思是例如:

-重启手机

  • (我知道 SDK 和 NDK 都不允许这样做,我只是用它作为我的意思的一个例子)假设 java SDK 不允许这样做,但一些本机库允许这样做 - 那么我的问题的答案是肯定的, NDK 确实添加了一些功能

提前感谢您提供任何有用的答案。

【问题讨论】:

    标签: android android-ndk


    【解决方案1】:

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

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

    • 如果你想使用 Renderscript

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 很抱歉这么晚才对这个问题发表评论,但我只是想确保清楚地用 C++ 编写,因为你更喜欢它不是使用 NDK 的好理由。
      • @DealerNextDoor 因为没有人应该更喜欢 C++,还是因为没有人应该使用 NDK?
      • @CorayThan 两者都不;纯粹因为不想用 Java 编写而用 C++ 编写是一个不好的理由。正如 NDK 下载页面所述,“在下载 NDK 之前,您应该了解 NDK 不会使大多数应用程序受益。作为开发人员,您需要权衡其利弊。值得注意的是,在 Android 上使用原生代码通常不会带来显着的性能提升,但它总是会增加您的应用程序复杂性。一般来说,您应该只在对您的应用程序必不可少的情况下使用 NDK,而不是因为您只是更喜欢使用 C/C++ 编程。”
      • @Alex_Nabu 不写 Android 或学习一门新语言?
      • @CorayThan 我是认真的。你会认真建议花几个月的时间学习一门新语言而不是使用 NDK 吗?缺点当然没那么糟糕。
      【解决方案3】:

      据我所知,使用 NDK 的唯一原因是从您的应用程序中挤出额外的性能并更接近裸机。如果你不需要做这些事情,你应该远离 NDK。

      还要注意,Dalvik VM 已经有一些非常棒的性能并且相对简单。

      【讨论】:

      • @HaMMeReD 感谢您的收获。编辑了我的回复。
      【解决方案4】:

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

      【讨论】:

      • 同意。如今,很难想象任何优秀的应用程序都愿意只使用像 Android 这样的平台。因此,一般的做法是将 UI 层之外的所有内容留给原生代码,以便它们可以轻松移植到其他平台,其中一些可能是制造商指定的平台。
      【解决方案5】:

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

      使用本机方法的原因

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

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

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

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

      ...,您应该了解 NDK 不会使大多数应用程序受益。作为 作为开发人员,您需要平衡其优点和缺点。 值得注意的是,在 Android 上使用本机代码通常不会导致 显着的性能改进,但它总是增加你的应用程序 复杂。通常,您应该只在必要时使用 NDK 到你的应用程序——绝不是因为你只是喜欢用 C/C++ 编程。什么时候 检查您是否应该使用本机代码进行开发,想想 了解您的要求并查看 Android 框架 API 是否提供 您需要的功能。

      【讨论】:

        猜你喜欢
        • 2016-12-02
        • 1970-01-01
        • 2020-08-18
        • 2017-05-29
        • 1970-01-01
        • 2014-12-12
        • 1970-01-01
        • 2012-06-07
        • 1970-01-01
        相关资源
        最近更新 更多