从另一个Android应用程序加载本机共享库

时间:2012-06-04 12:38:03

标签: android android-ndk

我需要分发一个应用程序(一个播放器),它依赖于为给定的ARM版本和扩展(Tegra,Neon)构建的本机库。这个本机库非常大,所以我不能将它的所有版本分发到一个通用包中。所以我决定将应用程序分成一个小的通用.apk和更专业的.apks - 没有任何活动的插件。

如何从主要主机应用程序访问插件应用程序中的专用本机共享库?是否可以简单地使用

System.loadLibrary("path_to_library"); 

如果是这样,我怎样才能获得该库的路径?

如果无法解决这个问题?

2 个答案:

答案 0 :(得分:1)

System.loadLibrary()获取一个库名,并以某种方式将其映射到完整路径。

foo => libfoo.so

系统通常检查apk本身,然后通常/system/lib/

如果您有完整路径,请使用System.load()

在任何情况下,管理lib的位置都会很麻烦,除非它在apk或所有系统库中。

我只是用apk包装特定的lib。

答案 1 :(得分:0)

八年后,TS的主要问题已得到解决:存在可以为每个ABI生成较小APK的拆分,存在可以简化打包的应用程序捆绑包,甚至可以延迟下载本机的扩展程序库,直到应用程序确实需要它为止。

尽管如此,与System.load("/data/data/{app-package}/lib/lib{library-name}.so")相同的技术仍然有效,并且在某些情况下可能有用。

相关问题