【问题标题】:What can't the NDK be used for?NDK不能用于什么?
【发布时间】:2011-01-04 15:21:14
【问题描述】:

来自official NDK site

Android NDK... 提供 允许您的头文件和库 建立活动,处理用户 输入、使用硬件传感器、访问 应用资源等, 在使用 C 或 C++ 编程时。如果你 编写本机代码,您的应用程序 仍然打包成 .apk 文件 他们仍然在虚拟的内部运行 设备上的机器。根本的 Android应用模型不 改变。

然而,它始终被描述为 Android SDK 的配套工具,以及允许使用本机代码语言“实现应用程序的部分的工具集,例如作为 C 和 C++”。

我的理解是,与基于 Java 的 SDK 不同,NDK 并非旨在实现 Android 应用程序的某些部分。

这对吗?

如果是这样,NDK 允许实施哪些部分不允许

【问题讨论】:

    标签: c++ android android-ndk


    【解决方案1】:

    重要的是要注意,您所指的文档是在 ndk 实际上能够处理诸如活动之类的事情之前出现的。因此,那时您需要做的是使用 sdk 创建一个 android 应用程序,并且至少需要为活动生命周期事件创建一个 java 包装类,这称为本机代码。此外,如果您想要声音或与用户进行其他交互,您通常也必须使用 sdk。

    但是现在,您似乎可以将 NDK 用于整个应用程序(尽管我还没有尝试过),但如果您想使用标准 UI 元素,例如选择游戏文件的列表,我仍然会为此使用 SDK。

    【讨论】:

    • @Leif 感谢和 +1 很好地解释了这一点。那么我是否从您的回答中了解到您实际上可以使用 NDK 对整个应用程序进行编程? TTS 应用程序怎么样?
    • NDK 不支持(不是开箱即用的)垃圾收集,就像 Java 一样 :)
    • 您将不得不编写大量繁琐、难以阅读的 Java 反射代码。或者创建/查找并学习一个包装库。可以这么说,在 C++ 中实例化一个 Java 类并调用一个方法是 6 行代码,这还不包括错误处理。 Java 异常不会传播到 C++ 异常(无论如何都不是开箱即用的)。
    • 95% 平台的接口是/for Java。它可以从 C++ 中调用,但是是以一种非常迂回的方式。没有任何 native C++ 接口会是更好的放置方式。
    • 在使用 NDK 时您应该注意的另一个问题是,当 android 设备开始在比主要(尽管我不相信完全)使用的两个 arm 版本更多的架构上运行时,以及在 ndk 的支持下,您必须为这些架构重新编译代码。好消息是可以对基于 gnu 工具链的 ndk 进行改造以编译为其他架构,但坏消息是您可能没有所需的库。而且@Seva 是正确的,如果你经常使用标准API,sdk 会容易很多。
    【解决方案2】:

    查看 NDK r5(2010 年 12 月发布)。他们为原生 C++ 编码添加了大量支持,包括原生活动。

    【讨论】:

      猜你喜欢
      • 2012-06-25
      • 2020-05-27
      • 1970-01-01
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 2014-03-03
      相关资源
      最近更新 更多