2015-04-01 82 views
0

我有两个不同的CPU ABI的Android系统 - armeabi-v7a and x64。对于这一个我要构建的应用程序代码来得到它working.My应用程序(C语言)反正犯规运行为任一平台。 或者是否有任何常见的工具链,我可以建立相同的。 arm-eabi-gcc?目标EXE为Android ABI(NDK编译)

回答

5

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

要设置您需要编译到,你应该设置APP_ABI变量中Application.mk或者把它传递给ndk-build命令的架构。

APP_ABI:=all会让你的NDK项目正在兴建的所有支持的架构:armeabiarmeabi-V7Aarm64-V8A,,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而是返回所有支持的ABI的列表,按优先顺序排序。

+0

因此把APP_ABI:= <>中的adb shell getprop ro.product.cpu.abi的输出应该可以正常工作吗?即使是第二个拱也行吗? – Raulp 2015-04-06 06:27:04

+1

是的,确切地说,将第一个拱形框架更好:例如,在许多x86设备上,第二个拱形框架是armeabi-v7a,但armeabi-v7a二进制文件实际上是通过仿真层执行的。 – ph0b 2015-04-06 18:35:02

0

我不认为你可以针对完全不同的架构(ARM和x86)与Android NDK提供(交叉编译器)。您可以针对多个ABI的手臂下面的变量

TARGET_ARCH_ABI 

可能值支持是:

armeabi For ARMv5TE 
armeabi-v7a 

了解更多详情,您可以检查此link

要在x86或AMD64系统运行就可以正常使用GCC创建.so文件,并使用JNI来测试功能(记住Android的F/W将不可用那里)。

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

+2

受支持的ABI列表严重过期。最新的一个可以在NDK文档中找到。打开Start_Here.html,然后导航到“NDK程序员指南” - >“ABI管理”。在NDK的R10C中支持的ABI是armeabi,armeabi-v7a,arm64-v8a,x86,x86-64,mips和mips64。 – Michael 2015-04-01 10:43:15

+1

'TARGET_ARCH_ABI'不应该被重写,它应该被配置为'APP_ABI'。而且,许多设备实际上支持x86和arm架构。 – ph0b 2015-04-02 08:52:03