android中调用共享库.so的几种方法

本文介绍了在Android中调用共享库.so的两种主要方法:一是通过dlopen和dlsym动态加载并调用函数;二是将SO文件放入指定目录,并通过System.loadLibrary与JNI配合使用。同时,文章强调了选择调用方式应考虑SO是否遵循JNI规范以及是否直接暴露给JAVA层,并提供了判断和转换规则的提示。
AI助手已提取文章相关产品:

底层调用共享库中函数的方法

> 首先使用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 int  xxx_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)

您可能感兴趣的与本文相关内容

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值