Android NDK-使用通过不同API级别编译的库

时间:2019-01-29 12:45:41

标签: android android-ndk

我有一组使用独立工具链针对API 19和NDK rev 17编译的C / C ++库,是否可以在使用API​​ 26(最低SDK目标19)的项目中使用这些库?还是我需要使用API​​ 26重新编译它们?

在脚本中,make_standalone_toolchain.py要求提供--api参数,但是我不确定这是项目上使用的最小API还是目标API。

2 个答案:

答案 0 :(得分:0)

  

是否可以在使用API​​ 26(最低SDK目标19)的项目上使用这些库?

是的,有可能,但是可能并不理想。从android-ndk-r17c/platforms结构的下方看:

enter image description here

android-ndk-r17c 包含项目的最低API级别19,并且该API级别仅包含两种架构,即 arm x86 。这意味着您所有的编译都将分别引用并链接到arch-armarch-x86中的那些库。请注意,它们是32位ABI。将来,如果您必须包括64位ABI,例如x86_64arm64,我认为您至少需要使用--api 21重新编译本机代码(自api 21起,NDK开始支持64位ABI)。

如果使用有问题的本机共享库的android项目是用minSdkVersion 21或更高版本编译的,则建议您使用带有--api 21的独立工具链来编译本机代码。因为没有设置--api 19的附加值。

参考:

答案 1 :(得分:0)

是的,可以将库与不同的Str混合和匹配(这是唯一与NDK相关的SDK版本)。实际上,每当您针对NDK最低支持的API级别以外的对象时,这都是默认配置,因为C ++标准库是针对最低支持的版本构建的。

唯一需要记住的是,整个应用程序的最高minSdkVersionminSdkVersion。如果您有一个针对19构建的库而针对28构建的库,则该应用将运行的最旧的Android版本是28。

(请注意,这是基于ABI的。如果您将64位定位为21,将32位定位为16,则该32位应用仍可以在16上运行。)