首页 > 解决方案 > Android:在 aarch64 平台上找不到 armeabi-v7a abi 过滤器的 libopencv_java3.so

问题描述

这个问题这篇文章提到使用armeabi-v7aABI 过滤器构建的 NDK 也适用于aarch64Android 平台,因此我们不需要包含arm64-v8a在 ABI 过滤器列表中。

aarch64但是,我在联想 Phab-P1770M 和 Redmi 3S两个平台上遇到了以下问题。

我在我的项目中使用 opencv 库。但是,当我将以下内容添加到我的app.module

ndk {
        abiFilters "armeabi-v7a", "x86"
    }

我看到构建的 apk 不包含libopencv_java3.solib/armeabi-v7aandlib/x86文件夹中。调用opencv函数,显然也会因错误而崩溃,libopencv_java3.so.

但是,当我添加arm64-v8a到上面的列表中时,lib/arm64-v8a还会在 APK 中另外创建文件夹(如预期的那样)。但是该libopencv_java3.so库仅存在于该目录中,并且正如预期的那样,该模块在运行时正确加载。

所以基本上,我想了解仅使用 ABI 过滤器是否也armeabi-v7a适用于aarch64平台。因为前面提到的两个帖子都说应该,但我的经验并没有证明这一点。

谁能帮我理解我做错了什么?

标签: androidopencv

解决方案


armeabi-v7a是 32 位 CUP 架构,通常它也兼容 64 位架构。如果您没有提供正确的动态库,即相应的arm64-v8a,安装管理器将选择辅助 ABI,即armeabi-v7a您的目标手机。

但是,为什么不总是为您的应用程序使用主 ABI?作为主要 ABI 将为您的应用程序提供最佳性能。

您可以从此处获取有关 abi 的更多详细信息:https ://developer.android.com/ndk/guides/abis


推荐阅读