android|android中调用共享库.so的几种方法
【android|android中调用共享库.so的几种方法】底层调用共享库中函数的方法
> 首先使用dlopen("libmedia.so", RTLD_LAZY);
加载对应的库文件libmedia.so;
> 之后使用dlsym(libhandle, "function_name");
获取指定函数的指针;
> 最后使用获取的函数指针调用对应的函数,执行相应的操作;
需要注意的是,调用的共享库都必须在对应的Android.mk的共享库中添加;
android调用第三方共享库.so
1.将SO文件直接放到libs/armeabi下,然后代码中System.loadLibrary("xxx");再public native static intxxx_xxx_xxx();接下来就可以直接调用xxx_xxx_xxx()方法;
2.第二种方案,创建自己的SO文件,在自己的SO文件里调用第三方SO,再在程序中调用自己的SO,这种比较复杂,需要建java类文件,生成.h文件,编写C源文件include之前生成的.h文件并实现相应方法,最后用android NDK开发包中的ndk-build脚本生成对应的.so共享库;
> 首先要看这个SO是不是JNI规范的SO,比如有没有返回JNI不直接支持的类型。也就是说这个SO是不是可以直接当作JNI来调用。如果答案是否定的,你只能选第二个方案。
> 还要看你是不是希望这个SO的库直接暴露给JAVA层,如果答案是否定的,你只能选第二个方案,比如你本身也是一个库的提供者。
> 看能不能直接从JAVA调用的最简单的方法就是看SO里的函数名是不是Java_XXX_XXX_XXX格式的,是就可以,你可以自己写一个配套的JAVA文件,注意一下SO函数名和JAVA函数名的转换规则,或者向SO提供方索要;
> 使用第三方动态库,应该至少有2个文件,一个是动态库(.so),另一个是包含动态库API声明的头文件(.h)
推荐阅读
- 热闹中的孤独
- android第三方框架(五)ButterKnife
- Shell-Bash变量与运算符
- JS中的各种宽高度定义及其应用
- 2021-02-17|2021-02-17 小儿按摩膻中穴-舒缓咳嗽
- 深入理解Go之generate
- 异地恋中,逐渐适应一个人到底意味着什么()
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- “成长”读书社群招募