APK:与版本号相关的本机库名称问题 (SO.X.Y)

APK: native libraries name issues related to version number (SO.X.Y)

问题

构建的 APK 看起来不对并阻止我的应用程序加载其本机库,因为它在调用 dlopen() 时找不到依赖项:dlopen failed: library "libboost_filesystem.so.1.68.0" not found.

jniLibs 内容

我的 jniLibs 目录,针对目标平台,包含以下文件:

APK 内容

构建后,APK 包含一个 libboost_filesystem.so,其中 现在 是二进制对象(不是符号链接)。 似乎 Android 构建系统遵循了符号链接,抓取了 "pointed-to" 文件的内容,但使用了符号链接的名称。

我试图从 jniLibs 文件夹中删除符号链接,但这样做似乎会忽略 xxx.so.VERSION 文件。

问题

如何将我的 "full name" 共享对象嵌入到 jniLibs 中而不被 Android 构建系统干扰?

不,你不能。您应该避免对 so 文件进行版本控制。有关说明,请参阅 。

Android不支持这种技术也是很自然的,因为你的原生库属于你的APK,不会发生版本冲突。

考虑静态链接 boost 文件系统以避免额外查找。