我有一个带有两个不同CPU ABI的android系统 - armeabi-v7a and x64
。我必须构建应用程序代码以使其工作。我的应用程序(使用c语言)无论如何都不会运行任何一个平台。
或者是否有任何常见的工具链,我可以用它来构建相同的工具链。
臂-EABI-GCC?
答案 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
,并使用all32
和all64
作为所有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支持的多个ABITARGET_ARCH_ABI
可能的值是:
armeabi For ARMv5TE
armeabi-v7a
有关详细信息,请查看此link。
要在x86或amd64系统中运行,您通常可以使用gcc创建.so文件并使用JNI进行功能测试(请记住Android F / W在那里不可用)。
如果您正在寻找快速的构建测试周期,我认为使用基于x86的仿真器(如AndroVM(现为Genymotion))会更好。通过这种方式,您可以为Android设备编写代码并快速测试它。