【问题标题】:What are the portability implications of using the NDK?使用 NDK 对可移植性有何影响?
【发布时间】:2010-11-07 06:06:17
【问题描述】:

我需要一些在大型 long[] 上执行的操作非常快。我能看到的唯一选择是使用 Android NDK。谁能总结一下使用 NDK 对我的应用的影响,包括哪些设备可以使用该应用以及对维护我的应用有什么影响?

我看到您需要指定要为其编译 C 代码的架构,例如 ARM 和 Intel。当 Android 的新架构出现时会发生什么?每次出现新架构时我都必须更新我的应用吗?

【问题讨论】:

  • 是的,每个架构都需要一个可执行文件。您可能只需将它们全部包含并加载您需要的那些,但我从未使用过 NDK。你到底在做什么?您确定这是您代码中的瓶颈吗?您是否已实现并对其进行了概要分析?
  • 长操作包括屏蔽前 8 位,执行一些加法和乘法,将这些位放回原处,然后对剩余的位执行此操作。它在 Java 中非常缓慢(例如,当我想要大约 0.1 秒时执行 1 秒)并且似乎是 NDK 的理想候选者。虽然代码很简单,但适用于所有拱门。

标签: java android android-ndk


【解决方案1】:

谁能总结一下使用 NDK 对我的应用的作用,哪些设备可以使用该应用

只有在您拥有 NDK .so 的 CPU 上运行的设备才能运行您的应用。

以及对维护我的应用有什么影响?

在多个 CPU 架构上进行测试可能需要每个架构都使用硬件。我说“可能”是因为……

当新的 Android 架构出现时会发生什么?

...我们真的不知道。除了增加对 ARM7 的支持,NDK 没有改变它的目标。

目前,我能想到的 Android 主要非 ARM 平台有两种:

  • Intel Atom,被 Google TV 设备使用。在撰写本文时,NDK 不支持这一点。但是,您也不能为 Google TV 发布应用程序。因此,在我们开始编写 Google TV 应用程序时,可能会更新 NDK。
  • MIPS。在撰写本文时,NDK 不支持这一点。我不知道这方面的计划是什么。

可以想象,模拟器似乎会模拟这些 CPU。毕竟现有的安卓模拟器是模拟ARM5的。但是,除非发生这种情况,否则您将需要为您打算支持的每个架构测试硬件。

每次出现新架构时我都必须更新我的应用吗?

仅当您想支持新架构时。除非有大量设备可以访问您的应用程序,否则任何新架构都不会非常重要。 “临界质量”可能来自一般设备销售,也可能是因为您达成了 OEM 协议,将您的应用捆绑在某人的设备上。

代码很简单,适用于所有拱门。

注意你的字节序。

【讨论】:

  • 太棒了,谢谢你的帖子。最后一件事,如果有人说,有一部基于 Intel Atom 的新手机,而我的应用程序没有该 CPU 的 .so,我的应用程序会在市场上对他们隐藏吗?
  • @RichardNewton:我希望如此。我想你可以创建一个仅限 ARM7 的应用程序,看看 ARM5 设备是否在市场上看到它,以便在基于 Atom 的市场兼容设备出现之前测试该理论。但是,由于今天支持的架构很少,所以现在有点模糊。
  • 我认为谷歌会有一些策略来处理这一切。我找不到任何统计数据,但开发人员正在使用 NDK,而且 Google 鼓励使用它,因此据我所知,制作使用 NDK 的应用似乎没有风险。
  • @RichardNewton:唯一的风险是,从发布架构到可以使用 NDK 授权的应用程序运行之间可能存在时间窗口。运气好的话,这些窗口会很小甚至不存在。但是,我们只会知道它何时发生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 2011-12-16
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
相关资源
最近更新 更多