我有几个本机库,我想通过 apk 包部署它们(即将它们复制到 libs 文件夹或资源)。然后我需要安装单独的应用程序并使用以下方法加载这些库:
System.load(path_to_lib);
可以通过哪种方式实现?据我了解,出于安全原因,我不能只使用 /data/data/libs_package/lib/native_lib.so 路径加载库。还有其他方法吗?
提前致谢。
我有几个本机库,我想通过 apk 包部署它们(即将它们复制到 libs 文件夹或资源)。然后我需要安装单独的应用程序并使用以下方法加载这些库:
System.load(path_to_lib);
可以通过哪种方式实现?据我了解,出于安全原因,我不能只使用 /data/data/libs_package/lib/native_lib.so 路径加载库。还有其他方法吗?
提前致谢。
请参阅android-ndk 讨论组中的此线程。
总而言之,谷歌的安卓开发者说:
如果这两个应用程序有一个共享的用户 ID,那么您可以使用要加载的共享库的完整路径显式调用 System.loadLibrary()。
...
但是请不要尝试这样做。你会给你的用户带来痛苦——无论是更新一个或另一个应用程序导致不兼容并让你崩溃,还是用户卸载另一个应用程序让你崩溃,等等。
另一位开发人员提出了以下解决方案:
所以我现在要做的(并且有效)是有一堆没有共享用户 ID 的包(它们由相同的密钥签名,但我认为这在这里并不重要)。核心应用程序从其他包的 .apk 中解压 .so (我已经有一个自定义解包器来解决一堆其他 Android 错误)。我将它们解压到核心包已知的位置,然后从那里 dlopen() 它们。