gpt4 book ai didi

android - 如何加载android系统原生库

转载 作者:行者123 更新时间:2023-11-30 04:56:43 27 4
gpt4 key购买 nike

我写了一个 c++ native 库,它有一些依赖项(最显着的是 Qt),我想通过标准 Android Java 应用程序中的 jni 调用它。我目前正在使用 Android Studio,但这并不是强制性的。

库有一些系统依赖性,如 libz、liblog 和(作为 C++ 运行时)libgnuSTL_shared。

现在,我的问题是:如何加载这些库?对于当前测试,我已将它们添加到我的应用程序的 jniLibs 文件夹中,但这不是(我认为)处理这种情况的正确方法。

我当前在主要 Activity 中的代码是这样的:

public class MainActivity extends AppCompatActivity {
// Used to load the 'native-lib' library on application startup.
static {
System.loadLibrary("gnustl_shared");
System.loadLibrary("log");
System.loadLibrary("opus");
System.loadLibrary("z");
System.loadLibrary("Qt5Core");
System.loadLibrary("Qt5Network");
System.loadLibrary("mynative-lib");
}
...
}

如果我删除 liblog 或 libz 或 libgnuSTL_shared,我会得到一个 UnsatisfiedLinkError。

谢谢

最佳答案

这是一个有效的可能性。仍然存在这样的风险,即当您添加库时,如果您不注意,可能会以错误的顺序链接它们。

如果您将所有依赖项静态链接到 mynative-lib,您可能会得到一个更精简的版本。

你最终会得到一个更短的加载代码:

static {
System.loadLibrary("gnustl_shared");
System.loadLibrary("mynative-lib-with-deps");
}

这也会减少您的 jniLibs 文件夹(以及 APK)的大小,因为将您的依赖项静态链接到您的库中可能会减少嵌入到您的应用程序中的依赖项的数量。

关于android - 如何加载android系统原生库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52369861/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com