Android ndk 动态加载APK libs文件夹中的共享对象

Android ndk 动态加载APK libs文件夹中的共享对象,android-ndk,native-activity,Android Ndk,Native Activity,希望你能在这里帮助我。我设法创建了我的原生活动项目并打包了它。在libs文件夹中,我有一个在本机活动中动态加载(dlopen)的共享库。 我知道程序包lib被复制到:/data/data/packagename/lib 但是如何使用dlopen访问它?可能吗?我想我可以使用本地文件夹名来访问它,比如:./libMySharedLibrary,因为它们都在APK/libs子文件夹中。是否有人知道如何获得正确的foldername或如何访问这些共享库?Dynamic linker已经知道您的包专用库

希望你能在这里帮助我。我设法创建了我的原生活动项目并打包了它。在libs文件夹中,我有一个在本机活动中动态加载(dlopen)的共享库。 我知道程序包lib被复制到:/data/data/packagename/lib
但是如何使用dlopen访问它?可能吗?我想我可以使用本地文件夹名来访问它,比如:./libMySharedLibrary,因为它们都在APK/libs子文件夹中。是否有人知道如何获得正确的foldername或如何访问这些共享库?

Dynamic linker已经知道您的包专用库-只需传递basename,一切都应该正常:

dlopen("libawesome.so", RTLD_LAZY);

注意:为避免意外,您应确保您的库名称唯一且不与系统名称冲突(这些名称位于
/system/lib
/vendor/lib
,同时检查64位设备上的
lib64
目录)

动态链接器已经知道您的包私有库-只需传递basename,一切都应该正常:

dlopen("libawesome.so", RTLD_LAZY);

注意:为避免意外,您应确保您的库名称唯一且不与系统名称冲突(这些名称位于
/system/lib
/vendor/lib
,同时检查64位设备上的
lib64
目录)

假设我的包名是:com.android.example。当我这样做时:adb shell作为com.android.example运行,查看/lib文件夹,我看不到我的共享库。我可以在.apk文件中看到共享库,但在使用ant installd安装它之后,它不在该文件夹中。共享库是否应该复制到该文件夹中?@yaakuro AFAIK native libs被复制到。而且似乎它并不总是您的包
lib
目录。无论如何,问题不在于库的位置,而在于如何在本机代码中加载它们。您是否尝试仅使用库basename使用
dlopen()
?假设我的包名为:com.android.example。当我这样做时:adb shell作为com.android.example运行,查看/lib文件夹,我看不到我的共享库。我可以在.apk文件中看到共享库,但在使用ant installd安装它之后,它不在该文件夹中。共享库是否应该复制到该文件夹中?@yaakuro AFAIK native libs被复制到。而且似乎它并不总是您的包
lib
目录。无论如何,问题不在于库的位置,而在于如何在本机代码中加载它们。您是否尝试仅使用库basename使用
dlopen()