2016-07-30 82 views
1

希望你能帮助我。我设法创建了我的本地活动项目并将其打包。在libs文件夹中,我有一个在本地活动中动态加载的共享库(dlopen)。我知道包libs被复制到:/data/data/packagename/lib 但我怎样才能使用dlopen访问它?那可能吗?我以为我可以使用本地文件夹名称访问它,例如:./libMySharedLibrary,因为它们全部位于APK/libs子文件夹中。有没有人如何获得正确的文件夹名称或如何访问这些共享库?在APK libs文件夹中动态加载共享对象

回答

0

动态链接程序已经知道了你的包私人图书馆 - 只是通过基本名称,所有应行:

dlopen("libawesome.so", RTLD_LAZY); 

附:为了避免意外发生,您应该确保您的磁带库名称是唯一的,并且不与系统冲突(这些文件位于/system/lib/vendor/lib,还检查了64位设备上的lib64目录)。

+0

假设我的软件包名称是:** com.android.example **。当我这样做时:** adb shell run-as com.android.example **并查看**/lib **文件夹我看不到我的共享库。我可以在.apk文件中看到共享库,但在使用** ant installd **进行安装后,它不在该文件夹中。共享库应该被复制到该文件夹​​中? – yaakuro

+0

@yaakuro AFAIK原生库被复制到['nativeLibraryDir'](https://developer.android.com/reference/android/content/pm/ApplicationInfo.html#nativeLibraryDir)。好像它并不总是你的软件包'lib'目录。无论如何,这个问题不是关于库的位置,而是关于以本地代码加载它们的正确方法。你有没有尝试使用'dlopen()'只有库基名? – Sergio