我正在使用几个相互依赖的库移植大量本机代码。加载代码失败,因为Android链接器只查找/system/lib/
中的依赖项,而不是/data/data/com.packagename.nnn/lib
的应用程序安装目录中的依赖项。
作为第一个解决方法,我使用System.load()以正确的依赖顺序从Java加载所有.so。这个解决方案对我来说并不令人满意,因为由于插件架构,库集从一个版本变为另一个版本。 UI也不需要了解很多关于本机库的信息。
我发现Android不支持RPATH或为应用设置LD_LIBRARY_PATH。我发现的唯一解决方法是使用完全合格的SONAME构建库。
然而,一些依赖项是预先构建的。
即使所需的.so没有完全合格的SONAME,是否可以将完全合格的NEEDED标签编译到我自己的库中?
或者是否可以修改现有的.so并将其SONAME或NEEDED替换为完全合格的版本而无需重新编译?
答案 0 :(得分:0)
Mozilla Fennec从/ data / data / package /目录下的自定义缓存目录加载一堆共享对象,您可以查看它们的来源。