针对Android ABI的目标exe(ndk build)

时间:2015-04-01 08:54:54

标签: android c android-ndk arm

我有一个带有两个不同CPU ABI的android系统 - armeabi-v7a and x64。我必须构建应用程序代码以使其工作。我的应用程序(使用c语言)无论如何都不会运行任何一个平台。 或者是否有任何常见的工具链,我可以用它来构建相同的工具链。 臂-EABI-GCC?

2 个答案:

答案 0 :(得分:5)

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

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

APP_ABI:=all将使您的ndk项目为所有受支持的体系结构构建: armeabi armeabi-v7a arm64-v8a x86 x86_64 mips mips64

您还可以列出要为其构建的体系结构: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代替,返回所有支持的ABI的列表,按优先顺序排序。

答案 1 :(得分:0)

我不认为你可以使用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设备编写代码并快速测试它。