This question和this post提到使用armeabi-v7a
ABI过滤器构建的NDK也适用于aarch64
Android平台,因此我们不需要包含{{ 1}}中。
但是,我在两个arm64-v8a
平台(联想Phab-P1770M和Redmi 3S)上遇到以下问题。
我在我的项目中使用opencv库。但是,当我在aarch64
app.module
我看到内置的APK在ndk {
abiFilters "armeabi-v7a", "x86"
}
和libopencv_java3.so
文件夹中不包含lib/armeabi-v7a
。显然,调用lib/x86
函数也会崩溃,并显示错误opencv
。
但是,当我在上面的列表中添加libopencv_java3.so
时,也会在APK中另外创建arm64-v8a
文件夹(如预期的那样)。但是lib/arm64-v8a
库仅存在于该目录中,并且按预期,该模块会在运行时正确加载。
因此,基本上,我想了解一下是否仅使用ABI过滤器libopencv_java3.so
也适用于armeabi-v7a
平台。因为上述两篇文章都说应该这样做,但是我的经验并未表明这一点。
有人可以帮助我了解我在做什么错吗?
答案 0 :(得分:0)
armeabi-v7a
是32位CUP体系结构,通常它也与64位体系结构兼容。如果您没有提供适当的动态库,即相应的arm64-v8a
,则安装管理器将为您的目标电话选择辅助ABI,即armeabi-v7a
。
但是,为什么不总是为您的应用程序使用主ABI?作为主要的ABI,它将为您的应用提供最佳性能。
您可以从此处获取有关abi的更多详细信息:https://developer.android.com/ndk/guides/abis