如何使用NDK定位多个体系结构?

背景

我最近开始使用NDK开发一些代码,我想到了使用NDK开发时可能出现的可移植性问题。

问题

由于NDK使用本机代码,因此需要按CPU架构进行编译。 这是一个问题,因为用户需要运行应用程序,无论该设备的CPU是什么。

迄今为止我find的可能的解决scheme

我注意到我可以修改文件“jni / Application.mk”并使用:

APP_ABI:= armeabi armeabi-v7a x86

但是,从这一步我不知道该怎么做。 该应用程序是否包含每个CPU架构的所有编译代码,并在运行时自动select正确的代码?

另外,如果还有另外一个未知的CPU架构呢?

如果我尝试在Google TV上运行应用会发生什么情况,根据我记得的内容,根本不支持NDK?

我发现的另一个解决scheme是多apk支持。 但是,我不确定我是否理解。 这是否意味着您每次都使用不同的configuration创build相同的APK? ADT没有特殊的自动化工具来帮助吗?

Solutions Collecting From Web of "如何使用NDK定位多个体系结构?"

如果你根本没有设置APP_ABI ,或者使用

 APP_ABI := all 

在你的Application.mk中ndk-build将为你的NDK版本支持的所有体系结构build立。 最新的一个,到目前为止r8d,除armeabi armeabi-v7a x86版本也为mips 。 当另一个架构将被释放,你会希望自动获得的内置APK来支持它。

当您的应用程序安装在Android设备上时,系统将自动select匹配的ABI版本,并从APK安装正确的共享库。

这种方法的一个缺点是,如果本地库很大,你的“单片”APK文件可能会变得巨大。 您可以使用multi-APK方法来缩小用户下载量。 官方网站build议: 只有当您的APK过大(大于50MB)时,您通常应该使用多个APK来支持不同的设备configuration 。 如果您select此路线,您应该仔细遵循版本代码指南。

不幸的是,在Google TV上没有关于NDK支持的可靠预言,但是目前没有任何技术上的理由。 如果当它到达时,你的ndk-build会自动处理它。

更新 这里是一个简单的过程来维护分裂APK。 顺便说一句,新的Android TV确实支持NDK。

对于最新版本(现在是r9),你必须在“jni / Application.mk”

 APP_ABI := all 

要么

 APP_ABI := armeabi armeabi-v7a x86 mips 

没有./ndk_build只会build立'armeabi'