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
目录,针对目标平台,包含以下文件:
libboost_filesystem.so.1.68.0
是 "real" 共享对象。
libboost_filesystem.so
是 libboost_filesystem.so.1.68.0
的符号链接
APK 内容
构建后,APK 包含一个 libboost_filesystem.so
,其中 现在 是二进制对象(不是符号链接)。
似乎 Android 构建系统遵循了符号链接,抓取了 "pointed-to" 文件的内容,但使用了符号链接的名称。
我试图从 jniLibs
文件夹中删除符号链接,但这样做似乎会忽略 xxx.so.VERSION
文件。
问题
如何将我的 "full name" 共享对象嵌入到 jniLibs
中而不被 Android 构建系统干扰?
不,你不能。您应该避免对 so 文件进行版本控制。有关说明,请参阅 。
Android不支持这种技术也是很自然的,因为你的原生库属于你的APK,不会发生版本冲突。
考虑静态链接 boost 文件系统以避免额外查找。
问题
构建的 APK 看起来不对并阻止我的应用程序加载其本机库,因为它在调用 dlopen()
时找不到依赖项:dlopen failed: library "libboost_filesystem.so.1.68.0" not found
.
jniLibs 内容
我的 jniLibs
目录,针对目标平台,包含以下文件:
libboost_filesystem.so.1.68.0
是 "real" 共享对象。libboost_filesystem.so
是libboost_filesystem.so.1.68.0
的符号链接
APK 内容
构建后,APK 包含一个 libboost_filesystem.so
,其中 现在 是二进制对象(不是符号链接)。
似乎 Android 构建系统遵循了符号链接,抓取了 "pointed-to" 文件的内容,但使用了符号链接的名称。
我试图从 jniLibs
文件夹中删除符号链接,但这样做似乎会忽略 xxx.so.VERSION
文件。
问题
如何将我的 "full name" 共享对象嵌入到 jniLibs
中而不被 Android 构建系统干扰?
不,你不能。您应该避免对 so 文件进行版本控制。有关说明,请参阅 。
Android不支持这种技术也是很自然的,因为你的原生库属于你的APK,不会发生版本冲突。
考虑静态链接 boost 文件系统以避免额外查找。