我有一组使用独立工具链针对API 19和NDK rev 17编译的C / C ++库,是否可以在使用API 26(最低SDK目标19)的项目中使用这些库?还是我需要使用API 26重新编译它们?
在脚本中,make_standalone_toolchain.py
要求提供--api
参数,但是我不确定这是项目上使用的最小API还是目标API。
答案 0 :(得分:0)
是否可以在使用API 26(最低SDK目标19)的项目上使用这些库?
是的,有可能,但是可能并不理想。从android-ndk-r17c/platforms
结构的下方看:
android-ndk-r17c 包含项目的最低API级别19,并且该API级别仅包含两种架构,即 arm 和 x86 。这意味着您所有的编译都将分别引用并链接到arch-arm
或arch-x86
中的那些库。请注意,它们是32位ABI。将来,如果您必须包括64位ABI,例如x86_64
或arm64
,我认为您至少需要使用--api 21
重新编译本机代码(自api 21起,NDK开始支持64位ABI)。
如果使用有问题的本机共享库的android项目是用minSdkVersion 21
或更高版本编译的,则建议您使用带有--api 21
的独立工具链来编译本机代码。因为没有设置--api 19
的附加值。
参考:
答案 1 :(得分:0)
是的,可以将库与不同的Str
混合和匹配(这是唯一与NDK相关的SDK版本)。实际上,每当您针对NDK最低支持的API级别以外的对象时,这都是默认配置,因为C ++标准库是针对最低支持的版本构建的。
唯一需要记住的是,整个应用程序的最高minSdkVersion
是minSdkVersion
。如果您有一个针对19构建的库而针对28构建的库,则该应用将运行的最旧的Android版本是28。
(请注意,这是基于ABI的。如果您将64位定位为21,将32位定位为16,则该32位应用仍可以在16上运行。)