【问题标题】:How can Android native code target multiple processor types?Android 原生代码如何针对多种处理器类型?
【发布时间】:2014-05-01 16:42:55
【问题描述】:

据我了解,Android 上的原生代码是直接与特定设备的处理器协同工作的代码。因此,如果我想利用某个处理器,我会使用本机代码。

但是,如果我想制作一个包含本机代码但面向多个处理器的应用会发生什么?

我是否必须为每个架构制作多个应用程序?或者有没有办法将多个版本的本机代码放在一个应用程序中,选择一个与其运行的设备的处理器相匹配的应用程序?

【问题讨论】:

  • 我已经改写了你的问题,以便更清楚你在问什么。如果我误解了你,请随时回复。
  • 元讨论here.

标签: android performance android-ndk native-code


【解决方案1】:

Android Native Development Kit 是一套交叉编译器和支持库,可用于生成面向一个或多个官方支持的 Android 架构的共享对象 (.so) 文件。

Android 应用程序包 (.apk) 专用 zip 文件格式允许为多个架构包含不同的原生库。

如果您参考 NDK 文档,您会看到有一个项目配置文件,您可以使用它来指定应编译您的原生代码以支持哪些架构。

【讨论】:

    【解决方案2】:

    这通常称为交叉编译。即,您需要一个编译器,而不是为 Y 编译您当前的代码 X。它为 CPU Y 生成代码,而不是通常情况下为 X 生成代码。

    【讨论】:

    • 也许你误解了这个问题。这与交叉编译无关,它与针对多个 CPU 架构有关。请参阅 Chris 的回答。
    • @Kevin - 不,这个答案是正确的,虽然有点简短。交叉编译是必要每个目标编译步骤的实用形式,需要从单一来源支持多个本机架构。 Android NDK 是一套交叉编译器,允许桌面操作系统针对各种 Android 架构进行交叉编译。
    • @Kevin - 这不是这个问题曾经问过的问题。从一开始,这个问题就非常明确地涉及支持多种原生架构(明确说明了“原生”的含义)。这需要多个编译器,而且实际上这些都是交叉编译器。
    • @Kevin 几乎所有的 android 开发都是“交叉编译”,因为桌面通常用于构建针对移动架构(或独特的 DVM)的代码,这与构建系统有很大不同。这个问题中的“不同”显然不是指那种差异,而是指目前在 Android 生态系统中存在的各种原生架构(“特定设备的处理器”)(ARM、MIPS、x86、 ETC)。其中每一个都需要自己的(交叉)编译器来生成适当的本机代码。
    • @kevin - 我明白你的意思,我只是没有被需要交叉编译器和需要几个交叉编译器之间的区别所困扰 - 特别是在这种情况下,几个是分布式的一起在同一个 NDK 工具链包中。我同意这个答案的内容还不够。
    【解决方案3】:

    只有在开发 NDK 应用程序时,才需要针对多 CPU 架构。 在 jni 文件夹下创建一个名为“Application.mk”的文件。添加此参数 APP_ABI= 例子 : APP_ABI:=x86 armv7eabi mips 或者你们都可以这样做 APP_ABI:=all (它将为所有支持的架构创建 apk) 但是这样做你会生成一个 FAT 二进制文件,当用户安装你的应用程序时,google play 将负责过滤不同底层架构的相应 apk。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-10
      • 1970-01-01
      • 2018-08-05
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多