您的问题不在于库代码,而在于.so文件本身。 Android设备具有主ABI,处理器支持该指令集。 例如,某些具有64位处理器的设备使用ABI arm64-v8a 。
arm64-v8a
但是,许多库和应用程序还不支持64位处理器。通常,较新的处理器也支持辅助ABI,这是一种更常见的ABI。 arm64-v8a 处理器通常支持 armeabi-v7a 例如,也是。
armeabi-v7a
当应用程序启动时,它开始在目录中查找本机库。首先,它检查主ABI目录, arm64-v8a 在这个例子中。如果.so文件不存在,则检查辅助ABI目录( armeabi-v7a )。如果仍未找到,您将收到您描述的错误。
在你的情况下,你有文件,如你所说,所以这不是问题。
这种选择的一个大问题是,如果目录存在,它总是坚持主ABI。如果并非所有库都为所有ABI提供所有.so文件,则可能导致崩溃。这是描述的 这里 。
这是一个示例:您在应用中包含2个库: 1. VideoPlayerLibrary,其中包含所有ABI的.so文件 2. GifLibrary,只有.so文件 armeabi 和 armeabi-v7a 。
armeabi
现在,如果您启动应用程序 arm64-v8a 设备,它将坚持它的主要ABI,因为它已在那里找到文件(VideoPlayerLibrary的.so文件)。但是目前你想玩GIF,它会尝试加载.so文件 arm64-v8a 目录,但它不会在那里找到它,它会像你的帖子一样崩溃,链接错误。
的 所以,你可以做什么? 强>
你有2个选择: