【问题标题】:How to correctly find native lib path in Android?如何在 Android 中正确找到本机库路径?
【发布时间】:2020-07-30 22:00:55
【问题描述】:

我正在尝试听从 https://issuetracker.google.com/issues/128554619#comment4 的建议(尚未在 Android 10 上运行,但希望我的代码也能在那里工作):

虽然 exec() 不再适用于应用程序主目录中的文件,但它继续支持只读 /data/app 目录中的文件。特别是,应该可以将二进制文件打包到应用程序的本地 libs 目录中并启用 android:extractNativeLibs=true,然后在 /data/app 工件上调用 exec()。 wrap.sh 功能也采用了类似的方法,记录在 https://developer.android.com/ndk/guides/wrap-script#packaging_wrapsh 中。

正如这个答案所建议的那样:https://stackoverflow.com/a/58748468/9204

但是,在我的情况下,本地库被提取到的目录不是

File(filesDir.parentFile!!, "lib")

就像那个答案一样,但是

File(File(packageCodePath).parentFile!!, "lib/arm64")

这显然是 hacky(尤其是硬编码 arm64),并且可能取决于特定的 Android 版本和/或设备。

是否有文档化的方法来查找本机 libs 目录?

【问题讨论】:

    标签: android


    【解决方案1】:

    这是applicationInfo.nativeLibraryDirContext)。

    即使https://developer.android.com/ndk/guides/wrap-script#packaging_wrapsh

    Android Studio 仅从 lib/ 目录打包 .so 文件,因此,如果您是 Android Studio 用户,则需要将 wrap.sh 文件放在 src/main/resources/lib/* 目录中, 以便正确打包。

    至少在一个设备上放置src/main/resources/lib/* 的文件被打包在APK 中,但如果不是lib*.so,则不会在之后提取。通过重命名可执行文件来修复,很高兴没有任何依赖于名称本身。

    【讨论】:

    • 我在 src/main/resources/lib/ABI/ 文件夹中有一个可执行文件,当我为调试构建时,可执行文件被复制并在applicationInfo.nativeLibraryDir 中找到但是当我构建发布它时不是,是不是和上面的帖子有关?任何想法如何解决它?
    • 对不起,我不知道。
    • 感谢您的回复,如果您遇到同样的问题,您能说一下吗?还是在发布时构建良好?如果它没有让我觉得它与反应原生破坏事物有关
    • 目前无法查看。
    猜你喜欢
    • 1970-01-01
    • 2021-05-07
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多