在Android上使用dlopen()的正确方法是什么?
我的Android应用程序捆绑了一个共享对象。它位于APK的在Android上使用dlopen()的正确方法是什么?,android,android-ndk,dlopen,Android,Android Ndk,Dlopen,我的Android应用程序捆绑了一个共享对象。它位于APK的lib文件夹中。在Android 7上,我只需执行以下操作即可加载它: lib = dlopen("libfoo.so", RTLD_LAZY); 然而,这在Android 4上不起作用。在Android 4上,我必须执行以下操作: lib = dlopen("/data/data/<my_package_identifier>/lib/libfoo.so", RTLD_LAZY); lib=dlopen(“/data/
lib
文件夹中。在Android 7上,我只需执行以下操作即可加载它:
lib = dlopen("libfoo.so", RTLD_LAZY);
然而,这在Android 4上不起作用。在Android 4上,我必须执行以下操作:
lib = dlopen("/data/data/<my_package_identifier>/lib/libfoo.so", RTLD_LAZY);
lib=dlopen(“/data/data//lib/libfoo.so”,RTLD_-LAZY);
那么,在Android上调用dlopen()
时,我是否总是必须指定路径/data/data//lib
?我有点担心硬编码路径,但正如我所说,仅仅传递共享对象的名称在Android 4上不起作用
我知道从Java方面使用
System.loadLibrary()
可能更容易,但我也不想使用它,因为它不允许我卸载库 实际上,尝试从/data/data//lib
打开lib在Android 7上不起作用。所以我根本不知道如何让它工作,因为第一个版本在安卓4上不工作,第二个版本在安卓7上不工作。我如何使它在两个版本上都能工作?好的,那么我当然可以先尝试打开libfoo.so
,但失败的是尝试/data/data//lib/libfoo.so
,但当然这仍然感觉有点粗糙。。。