【问题标题】:Android NDK - which android architectures to include in Application.mk?Android NDK - Application.mk 中包含哪些 android 架构?
【发布时间】:2014-11-05 19:45:52
【问题描述】:

我最近开始使用 NDK,希望将我的 lib 转换为 Android。我的问题是 per-architecture 的二进制文件数量比成功 ndk-build 后生成的数量多 我的 NDK 版本是 r10c 并构建一个简单的应用程序(可执行文件),如下所示:

#include "stdio.h"
int main() {
   printf("hello from Windows Mr. Android!!");
   return 0;
}

/libs 文件夹中的二进制文件创建 7 个架构文件夹,它们是:

  • arm64-v8a
  • armeabi
  • armeabi-v7a
  • mips
  • mips64
  • x86
  • x86_64

二进制文件的平均大小为 6 到 10 KB,但加在一起大约为 64 KB(磁盘大小)。

我的问题是我开发了一个跨平台引擎(Windows、Linux 和 OSX) 并且通过静态链接我在 2.5MB 上获得了大约 2.5MB 的大小em>每个平台都支持。我不知道 Android 二进制格式(ELF?),但我假设它会以大约相同的大小结束。

这意味着,如果我成功地将我的库转换为 Android,我最终将得到大约 (7 * 2.5) = 17.5 MB 的二进制文件,涵盖所有架构。

真的有必要使用APP_ABI := all 为所有架构构建,然后忘记了吗? Android 是否在执行时选择正确的版本?这是为 Android 构建的标准方法,并且知道所有的 Android 都将得到支持吗?

额外问题:

我在 VirtualBox 上使用 Android 并连接到我的操作系统的共享文件夹,但我的 Android 显示带有问号的二进制文件并询问我如何打开它们。这是否需要像 OSX 上的某种 bundling 才能正确执行?交易

【问题讨论】:

标签: android android-ndk


【解决方案1】:

这取决于你现在使用的大多数安卓手机是什么设备

armeabi-7a

如果您也打算在类似模拟器的 Genymotion 上运行您的应用程序,请添加 x86 二进制文件。

所以所有库都不需要只包含您想要支持的设备

如果您想针对大多数安卓手机,您可以在 Application.mk 中指定,如下所示。

APP_ABI := armeabi-v7a,x86

【讨论】:

  • 所以三星 Galaxy 3 是 genymotion(en.wikipedia.org/wiki/Samsung_Galaxy_Tab_3_10.1 有很多采用 x86 架构的真实设备...
  • 感谢您的回答。好吧,我的问题是我没有任何目标。我只是希望总体上支持Android。因此,我将首先关注armeabi-v7a,x86 :) 仅仅因为我在 Android 中完全是菜鸟,这究竟是如何工作的?我要创建一个包含所有架构二进制文件的 APK 还是多个?
  • 我的意思不是说 genymotion 只是 x86,但大多数 android 设备都是基于 arm 的,所以你总是可以根据需要寻找设备的 CPU 规格以包含库来支持它。所以我猜 armeabi -v7a 和 x86 对我来说似乎足够了。三星 Galaxy Tab 3 的 CPU 是 x86。
猜你喜欢
  • 1970-01-01
  • 2019-07-28
  • 1970-01-01
  • 2014-03-13
  • 2018-05-11
  • 1970-01-01
  • 1970-01-01
  • 2013-10-27
  • 2014-03-30
相关资源
最近更新 更多