如何使用NDK指定多个架构?(How to target multiple architecture

2019-07-18 10:56发布

背景

我最近开始开发使用NDK的一些代码,我已经想同时使用NDK开发到可能发生可能的便携性问题。

问题

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

可能的解决方案到目前为止,我已经找到了

我发现我可以修改文件“JNI / Application.mk”及用途:

APP_ABI:= armeabi armeabi-V7A 86

但是,我不知道我应该从这个步骤做。 将应用程序包含所有的编译代码的每个CPU架构和运行本身时自动选择正确的呢?

另外,如果还会有什么其他的CPU架构,是未知的?

如果我试图谷歌电视上运行应用程序时,会发生什么它根据什么,我记得不支持NDK呢?

我发现另一种解决方案是多APK支持。 但是,我不知道我的理解。 所有这一切意味着你创建相同的APK,具有不同配置每一次? 从ADT没有特别的自动化工具,以帮助吗?

Answer 1:

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

APP_ABI := all

Application.mk,然后NDK建造将建立你的NDK版本支持的所有架构。 最新的一个,迄今为止R 8d中,除了会armeabi armeabi-v7a x86构建也为mips 。 当其他架构将被释放,你会希望自动获得APK内置支持它。

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

这种方法的一个缺点是,如果本机库都大了,你的“铁板一块”的APK文件可能会变得很大。 您可以使用多APK的方法来让用户下载更小。 在官方网站的建议: 您应仔细按照版本代码guildlines如果你选择这条路线。

不幸的是,对于谷歌电视上NDK支持不值得信赖的预言,但似乎是当前不可用没有技术理由。 如果当它到来时,你的NDK,版本将自动照顾它。

UPDATE 下面是一个简单的过程中保持分裂APK。 顺便说一句,新的Android电视不支持NDK。



Answer 2:

最新的版本(现在R9)你必须在“JNI / Application.mk”指定

APP_ABI := all

要么

APP_ABI := armeabi armeabi-v7a x86 mips

没有./ndk_build只会打造“armeabi”



文章来源: How to target multiple architectures using NDK?