【问题标题】:Loading shared object dynamically which is in the APK libs folder动态加载 APK libs 文件夹中的共享对象
【发布时间】:2016-12-05 01:59:45
【问题描述】:

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

【问题讨论】:

    标签: android-ndk native-activity


    【解决方案1】:

    动态链接器已经知道你的包私有库 - 只需传递 basename 就可以了:

    dlopen("libawesome.so", RTLD_LAZY);
    

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

    【讨论】:

    • 假设我的包名是:com.android.example。当我这样做时: adb shell run-as com.android.example 并查看 /lib 文件夹我看不到我的共享库。我可以在 .apk 文件中看到共享库,但是在使用 ant installd 安装它之后,它不在该文件夹中。共享库是否应该复制到该文件夹​​中?
    • @yaakuro AFAIK 原生库被复制到 nativeLibraryDir。似乎它并不总是你的包lib 目录。无论如何,问题不是关于库位置,而是关于在本机代码中加载它们的正确方法。您是否尝试过仅使用库基名的 dlopen()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    相关资源
    最近更新 更多