如何加载android系统本机库
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何加载android系统本机库相关的知识,希望对你有一定的参考价值。
我写了一个c ++本机库,它有一些依赖项(最值得注意的是Qt),我想通过jni从标准的android Java App调用它。我目前正在使用Android Studio,但这不是必须的。
libs有一些系统依赖,如libz,liblog和(作为c ++运行时)libgnustl_shared。
现在,我的问题是:我如何加载这些库?对于当前测试,我已将它们添加到我的应用程序的jniLibs文件夹中,但这不是(我认为)处理这种情况的正确方法。
我在主要活动中的当前代码是这样的:
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 Studio 中禁用 android 本机调试器