如何使用NDK定位多个架构?

背景

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

问题

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

到目前为止我find了可能的解决方案

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

APP_ABI:= armeabi armeabi-v7a x86

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

此外,如果将有另一个未知的CPU架构怎么办?

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

我发现的另一个解决方案是多apk支持。 但是,我不确定我理解它。 这一切是否意味着您每次使用不同的配置创建相同的APK? ADT没有专门的自动化工具来帮助解决这个问题吗?

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

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

 APP_ABI := all 

在您的Application.mk中 ,然后ndk-build将为您的NDK版本支持的所有体系结构构建。 迄今为止最新的一款r8d,除了armeabi armeabi-v7a x86还将为mips打造。 当另一个架构发布时,您希望自动获得构建的APK来支持它。

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

这种方法的一个缺点是,如果本机库很大,那么“单片”APK文件可能会变得庞大。 您可以使用多APK方法使用户下载更小。 官方网站建议: 只有当您的APK太大(超过50MB)时,您通常应该使用多个APK来支持不同的设备配置 。 如果选择此路线,则应仔细遵循版本代码guildlines。

不幸的是,关于Google TV上的NDK支持没有值得信赖的预言,但似乎没有技术上的理由certificate其目前的不可用性。 如果它到达,你的ndk-build将自动处理它。

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

对于最新版本(现在为r9),您必须在“jni / Application.mk”中指定

 APP_ABI := all 

要么

 APP_ABI := armeabi armeabi-v7a x86 mips 

没有./ndk_build只会构建’armeabi’