Android ABI 的目标 exe(ndk 构建)

Target exe for Android ABI(ndk build)

我有一个 android 系统,有两个不同的 CPU ABI - armeabi-v7a and x64。对于其中一个,我必须构建应用程序代码来获取它 working.My 应用程序(在 c 语言中)无论如何都不会 运行 用于任何一个平台。 或者是否有任何通用工具链可以用来构建相同的工具链。 arm-eabi-gcc?

我认为您无法使用 android 提供的 ndk(交叉编译器)来针对完全不同的体系结构(arm 和 x86)。您可以使用以下变量

来定位 arm 支持的多个 ABI
TARGET_ARCH_ABI

可能的值为:

armeabi For ARMv5TE 
armeabi-v7a

有关详细信息,您可以查看此 link

对于x86或amd64系统中的运行,您通常可以使用gcc创建.so文件并使用JNI进行功能测试(记住Android F/W在那里不可用).

如果您正在寻找快速构建测试周期,我认为您最好使用基于 x86 的模拟器,如 AndroVM(现在为 Genymotion)。通过这种方式,您可以为 android 设备编写代码并快速测试它。

NDK 包含在 Android 平台上 运行 您的程序所需的所有工具链。

要设置您需要编译的体系结构,您应该在 Application.mk 中设置 APP_ABI 变量或将其传递给 ndk-build命令。

APP_ABI:=all 将使您的 ndk 项目针对所有支持的架构构建:armeabiarmeabi-v7aarm64-v8a, x86, x86_64, mipsmips64

您还可以列出要构建的架构:APP_ABI:= x86_64 x86 armeabi-v7a arm64-v8a 并使用 all32all64 作为所有 32 位和所有 64 位的快捷方式架构。

要确定目标设备支持哪些平台,您可以调用 adb shell getprop ro.product.cpu.abi(首选架构)和 adb shell getprop ro.product.cpu.abi2(第二架构)。

从 Android 5.0 开始,使用 adb shell getprop ro.product.cpu.abilist 代替,即 returns 所有支持的 ABI 的列表,按优先顺序排序。